『Real World HTTP』を読む

Real World HTTP

ある時、こちらのロードマップを見つけました。 github.com

バックエンドエンジニアとして仕事をしている上でとても参考になったと同時に必須とされている内容のものでも自分はその知識を持っていないものが多くあることに改めて気づかされました。

このロードマップに則り自分と相方のなおひさと共に記載されてある項目をそれに対応する良書を見つけアウトプットしていきます。

今回僕の担当は「What is HTTP?」
HTTPって何?って聞かれたらこの本を読むまではwebのブラウザとサーバーの間の決まりごとだよ!くらいしか答えることが出来ませんでした。

HTTPの理解の深めるため今回は「Real World HTTP」という本を読み章ごとにまとめていきます。 今回は1章のみをまとめます。

Real World HTTP ―歴史とコードに学ぶインターネットとウェブ技術

Real World HTTP ―歴史とコードに学ぶインターネットとウェブ技術

  • 作者:渋川 よしき
  • 発売日: 2017/06/14
  • メディア: 単行本(ソフトカバー)

第 1 章 HTTP/1.0 のシンタックス:基本となる4つの要素

HTTP/0.9から1.0までの歴史

HTTP/0.9

1章のタイトルにある基本となる4つの要素とは
1. メソッドとパス
2. ヘッダー
3. ボディ
4. ステータスコード

HTTP/0.9で実現できていることは、ボディの受信とパスのみ。 HTTP/0.9はテキスト情報が書かれたページのパスをサーバーに指定して、それを取得してくるだけのプロトコルです。
リクエストにはホスト名、IPアドレス、ポート番号を指定するだけであり

$ curl --http1.0 http://localhost:18888/hoge

上記の場合はサーバーが受け取るのは/hogeというパス部分のみ。

HTTTP/1.0

1.0から基本となる4つの要素が機能として使えるようになる。

  • リクエスト時にメソッドを追加
  • リクエスト時にHTTPバージョンを追加
  • ヘッダーの追加

HTTPの先祖について①(電子メール)

HTTP/1.0は電子メールのヘッダー+本文という構造を参考にして取り入れた。

クライアントがサーバーに対して送るヘッダーの一部

  • User-Agnet: クライアントが自分のアプリケーション名を入れるところ
  • Referer: サーバー側で参考にするための追加情報
  • Authorization: 特別なクライアントにだけ通信を許可する際、認証情報をサーバーに伝えるためのもの

サーバーからクライアントに返す時に付与するヘッダーの一部

  • Content-Type: ファイルの種類を指定する。MIMEタイプと呼ばれる識別子を記述。
  • Contetn-Length: ボディのサイズ
  • Content-Encodind: 圧縮形式の説明
  • Date: ドキュメントの日時

X-から始まるヘッダーは各アプリケーションが独自に設定できる

HTTPの先祖について②(ニュースグループ)

ニュースグループとは記事を読んだり投稿したりするプラットフォームのこと。USENETととも呼ばれている。
この分散アーキテクチャからHTTPはメソッドとステータスコードを参考にして取り入れ、 HTTP/1.0からGET, POST, HEADなどが利用できるようになった。

ステータスコード

主に5つのカテゴリに分類される

  • 1xx系: 処理中の情報の伝達
  • 2xx系: 成功時のレスポンス
  • 3xx系: サーバからクライアントへの命令(リダイレクト、キャッシュの利用など)
  • 4xx系 :クライアントからのリクエストのエラー
  • 5xx系: サーバー内部のエラー

URLとボディについて

URL

URLはRFC1738で定義され、場所からドキュメントなどのリソースを特定する手段を提供する。

ボディ

HTTP/0.9ではリクエストにデータは含められず、レスポンスはファイルコンテンツそのものだったがHTTP/1.0ではリクエストにコンテンツを含められ、レスポンスはボディとヘッダーを含むようになった。

本章の中はRFCにまつわる記載が多く、W3Cも含めて学び直そうという気持ちになった。
次回は2章と3章で提供されているソースを自分で動かしてみます。