こんにちは、42Tokyo所属のkharuyaです🙇
以前の記事でRFCの概要をまとめた記事を投稿しましたが、今回の記事では内容を RFC 3986 に絞ってまとめました。
最後まで読んでくださると嬉しいです。
目次
📝 そもそもRFC (Request for Comments) ってなに?
RFC は、一言でいうと 「インターネットの世界における共通のルールブック」 です。
私たちがブラウザでウェブサイトを見たり、メールを送ったりできるのは、世界中のコンピュータがこの「RFC」という同じルールに従って動いているからです。
RFCがそもそもわからないという方は以前投稿した下記の記事を読んだ後で本投稿を読んでいただければ理解が深まるかと思います。
🌐 RFC 3986 の概要
RFC 3986 は、URI (Uniform Resource Identifier) の共通の「文法(シンタックス)」を定義した文書です。
URLやURNといった、リソースを識別するための文字列がどうあるべきかという世界共通のルールが書かれています。
1. このドキュメントの役割
世界中のあらゆる場所にあるリソースを、コンピュータが誤解なく特定できるようにするための共通言語としての書式を規定しています。Webサーバー自作においては、クライアントから届いたURIを正しく分解(パース)するために必要不可欠な知識です。
2. 定義されている主な内容
-
URIの構造:
scheme,authority,path,query,fragmentの各パーツの定義。 -
予約文字と非予約文字: どの文字をそのまま使ってよくて、どの文字を
%エンコードすべきか。 -
相対パスの解決: 基点となるURIから相対的な位置をどう計算するか(
.や..の処理)。 - 正規化: 見た目が違うURIが「同じ場所を指しているか」を判定するルール。
3. 初学者が注目すべきポイント
| 項目 | 内容 |
|---|---|
| パーセントエンコード | 日本語やスペースなどを %XX 形式に変換する仕組み。 |
| URIの5要素 |
scheme://user:pass@host:port/path?query#fragment という基本形。 |
| 予約文字の扱い |
/, :, ?, # など、区切りとして特別な意味を持つ文字のルール。 |
📋 RFC 3986 の主要なセクション一覧
Webサーバーのパース処理を実装する際、特に読み込むべきセクションです。
| セクション | 項目名 | 初学者が注目すべき内容 |
|---|---|---|
| Section 2 | Characters | 使用可能な文字セット。予約文字(Reserved Characters)の定義。 |
| Section 3 | Syntax Components | 最重要。 URIを構成する各パーツ(path, query等)の文法定義。 |
| Section 5 | Relative Resolution |
/../ や ./ を含むパスを、絶対パスに変換するアルゴリズム。 |
| Section 6 | Normalization | URIの比較(大文字小文字の区別やエンコード解除)のルール。 |
💡 実装のアドバイス
Webサーバーを自作する場合、まずは Section 3 の図(URIの構造)を理解しましょう。リクエストされたURIを「どこまでがパスで、どこからがクエリか」を正確に切り分けることが、その後のCGIやファイル探索の成否を分けます。
✍️ おわりに
ここまで読んでいただきありがとうございます🙇
今回はRFC 3986について簡単にまとめてみましたが、以前投稿したRFCとはなんぞやと一緒に読んでいただければ、さらにRFCについての理解が深まるかと思います。
📚 参考文献・関連リンク
👤 著者について
- X: @h_kawasaki_
- GitHub: 42kharuya
いいねやフォローをいただけると執筆の励みになります!🚀