将軍の備忘録

アウトプット用です。あしからず。

Real World HTTPを読んだ (1章のみ)

なぜ読もうと思ったのか?

web業界に入って3年以上経つが、HTTPプロトコルについてちゃんと勉強したことがなかったので読んでみようとなった。

何を得たいか?

  • HTTPについて体型形的に学んでみたい
  • 実際にHTTPプロトコルはどのようにやりとりされているかを理解する
  • HTTPに関連する技術の仕組みを理解する

所感

気になったところだけメモ

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

  • 最初のバージョンHTTP/0.9は、HTMLのドキュメントを取得するだけのシンプルなプトコロルだった。
  • HTTP/0.9でできないこと

    • 1つのドキュメントを送る機能しかない
    • すべてHTTPである想定であったため、コンテンツフォーマットを伝える手段がなかった
    • 検索のリクエストを送る以外のリクエストが送信できなかった
    • 文書を送信したり、更新したり、削除することができなかった
  • HTTP/0.9からのリクエスト変更点

    • メソッドが追加された(GET)
    • HTTPバージョンが追加された
    • ヘッダーが追加された(Host,User-Agent, Accept)
  • HTTP/0.9からのレスポンス変更点

    • HTTPバージョンと3桁のスタータスコードが含まれる
    • リクエストと同じヘッダーが含まれる
  • 電子メールで使われていたヘッダーを使うことに

    • ヘッダーは、「フィールド名:値」で構成
    • ヘッダと本文の間に空行
    • クライアントからサーバに送るヘッダ
      • User-Agent、Referer、Authorization等
    • サーバからクライアントに送るヘッダ
      • Content-Type、Content-Lentgth,Content-Encoding,Date等
    • X- から始めるヘッダは自由に使って良い
  • MIMEタイプ

    • Content-Typeヘッダに含まれいるあれ
    • ファイルの種類を区別するためのもの
    • ブラウザはファイルの種類ごとにどのような動作をするか管理している
    • ファイルの種類にあわせてブザウザの画面に表示したり、保存したりする。
    • このファイルの種類を表す識別子がMIMEタイプ
    • 拡張子で分かりそうなものだけど?
      • 例)CGIを使ったアクセスカウンターは、数字の入った画像を生成するPerlスリプトだった
      • しかし.cgiにアクセスしても返されるのは、画像なので拡張子による判断は難しい
      • CGIプログラムが image/gifようなヘッダーを生成することで画像が表示されていた
  • メソッド

    • GET、HEAD、POSTがある
    • PUTとDELETEは、HTTP1.0の段階では必須でなかった
  • ステータスコード

    • 100番台:処理中の情報の伝達
    • 200番台:成功時のレスポンス
    • 300番台:サーバからクライアントへの命令。リダイレクトとか
    • 400番台:クライアントエラー
    • 500番台:サーバ内部のエラー
  • リダイレクト

    • クライアントのLocationヘッダをみて、再度リクエストを行う
    • リダイレクトの欠点
      • リダイレクトのたびにTCPセッションの接続、HTTPの送信・受信の2往復が発生する
      • Googleではリダイレクトは5回以下、できれば3回以下というガイドラインを出している
  • URL

    • URIとURLは別物
    • URIには、URL(Uniform Resource Name)とう名前の付け方ルールも含まれる
    • URLは、ドキュメントのリソースを特定する手段を提供する
    • 例)
      • urn:JR:あずさ2号 というルールで名前をつけた名前がURN
      • 電車://新宿駅/9番ホーム/あずさ2号 がURL。
        • 電車が長野いってしまうとアクセスできない
    • 以下の要素で構成される
      • スキーマhttps
      • ホスト名:www.oreilly.co.jp
      • パス:index.shtml
      • スキーマ://ユーザ:パスワード@ホスト名:ポート/パス#フラグメント?クエリー
    • これからのスキーマを解釈するのはブラウザの責任
  • ボディ

    • 1回のレスポンスごとに1ファイルを返す
    • ボディはContent-Encodingで指定された圧縮アルゴリズムで圧縮できる
    • この時、Content-Lengthは、圧縮後のデータサイズとなる

2章のレビューもたぶん書きます。