メインコンテンツへ移動

HTTP 学習ノート 1_基本常識

無料2015-05-24#HTTP#http入门#http常识#http学习

HTTP プロトコルは最重要であり、よく研究する必要があります

零。追加の常識

OSI(Open System Internetwork)参照モデル:

  1. アプリケーション層

アプリケーションにネットワーク通信インターフェースを提供

  1. 表現層

  2. セッション層

  3. トランスポート層

データ転送ユニットはメッセージ

  1. ネットワーク層

データ転送ユニットはパケット

  1. データリンク層

データ転送ユニットはフレーム

  1. 物理層

データ転送ユニットはビット bit

OSI7 層は研究用の理論モデルであり、実際の応用では煩雑すぎるため、TCP/IP 参照モデルがあります:

P.S.ここでの TCP/IP はプロトコル体系、またはプロトコルファミリを指し、SNMP、ICMP、UDP、DNS など様々なネットワークプロトコルを含みます

  1. アプリケーション層

HTTP、FTP、DNS など

  1. トランスポート層

TCP、UDP など

  1. ネットワーク層

IP など

  1. データリンク層

HTTP はアプリケーション層プロトコルであり、内部はトランスポート層の TCP とネットワーク層の IP なので、HTTP も 3 ウェイハンドシェイク、4 ウェイハンドシェイクが必要です

したがって、接続の確立/解放のオーバーヘッドが存在し、パフォーマンス最適化として HTTP/1.1 バージョンではデフォルトでパーシステント接続ですが、HTTP/1.0 にはありません

さらに、いくつかの概念を簡単に区別する必要があります:

  • プロキシ

転送機能を持つアプリケーション

  • ゲートウェイ

他のサーバー通信データを転送するサーバー

  • トンネル

Client と Server 間の通信接続を維持できるアプリケーション

  • トンネル

一.URI と URL

  • URI(Uniform Resource Identifier):統一資源識別子、特定のインターネ���トリソースを識別する文字列

  • URL(Uniform Resource Locator):統一資源位置指定子、特定のインターネットリソースの場所を識別する文字列

URL に不可欠なのはスキーム(Scheme)、ホスト名(Host)、リソースパス(URL Path)です

したがって URL は URI のサブセットであり、または URL は URI の一部と言えます

二.HTTP メソッド

  • GET:リソースの取得

1.0/1.1 サポート、常用

  • POST:エンティティ本体の転送

1.0/1.1 サポート、常用

  • PUT:ファイルの転送

1.0/1.1 サポート、一般的なウェブサイトでは该方法を使用しません。PUT メソッド自体に認証メカニズムがなく、誰でもファイルをアップロードできるため、セキュリティ問題が存在するためです

  • HEAD:メッセージヘッダーの取得

1.0/1.1 サポート、常用

  • DELETE:ファイルの削除

1.0/1.1 サポート、PUT メソッドと同じ問題が存在

  • OPTIONS:サポートするメソッドの問い合わせ

1.1 サポート

  • TRACE:パスのトレース

1.1 サポート、Max-Forward ヘッダーフィールドと組み合わせてパスをチェック

  • CONNECT:トンネルプロトコルでプロキシに接続することを要求

1.1 サポート、SSL(Secure Sockets Layer 安全ソケット層)、TLS(Transport Layer Security 転送層セキュリティ)と組み合わせてトンネルで TCP 通信を実現

  • (LINK):リソースとの接続を確立

1.0 サポート、1.1 で廃止

  • (UNLINK):接続関係を切断

1.0 サポート、1.1 で廃止

三.HTTP ステータスコード

  • 1XX:Informational(情報ステータスコード)

受信したリクエストを処理中

-  101:Switching Protocol、プロトコル切り替え、Upgrade ヘッダーフィールドと組み合わせてプロトコル切り替えを要求、あまり一般的ではない
  • 2XX:Success(成功ステータスコード)

リクエストが正常に処理完了

-  200:OK、リクエストが正常に処理

-  204:No Content、リクエストは正常に処理されたが返すリソースがない(レスポンス本体が空)

-  206:Partial Content、リクエストの一部内容を要求、レスポンスヘッダーの Content-Range が範囲を示す
  • 3XX:Redirection(リダイレクトステータスコード)

リクエストを完了するために追加操作が必要

-  301:Moved Permanently、永久的リダイレクト、ブラウザは自動的にブックマークを更新すべき

-  302:Found、一時的リダイレクト、ブックマークを更新しない

-  303:See Other、302 に似ているが、GET メソッドで新しい URL にアクセスすることを要求

    注意:仕様では 301、302 に遭遇してもリクエストメソッドを変更しない(元々 POST なら引き続き POST を使用)と規定しているが、*事実上の標準*はほぼすべてのブラウザが 301、302、303 に遭遇すると GET メソッドに変更する。これは仕様と一致しない

-  304:Not Modified、リソースは見つかったが、リクエスト条件(If-Match、If-Modified-Since、If-None-Match、If-Range、If-Unmodified-Since)を満たさない

    注意:304 は 3XX に属するが、*リダイレクトとは関係ない*
    
-  307:Temporary Redirection、一時リダイレクト、302 と同じ意味

    事実上の標準を是正するために導入されたステータスコード、302 を厳密に遵守してメソッドを変更しないことを望んだが、現在ブラウザは必ずしもそうしない。標準は再び失敗
  • 4XX:Client Error(クライアントエラーコード)

サーバーはリクエストを処理できない

-  400:Bad Request、リクエストメッセージに構文エラーが存在

-  401:Unauthorized、認証が必要(BASIC 認証または DIGEST 認証)または認証失敗を示す

-  403:Forbidden、特定リソースへのアクセスリクエストが拒否

-  404:Not Found、サーバーはリクエストされたリソースを見つけられない、理由を説明したくない 403 レスポンスの代わりとして使用可能

-  405:Method Not Allowed、メソッド不支持、あまり一般的ではない

-  412:Precondition Failed、前提条件失敗、あまり一般的ではない

-  417:Expectation Failed、期待失敗、あまり一般的ではない
  • 5XX:Server Error(サーバーエラーコード)

サーバーはリクエスト処理中にエラー発生

  • 500:Internal Server Error、サーバーはリクエスト実行中にエラーが発生

  • 503:Service Unavailable、サーバーが過負荷またはメンテナンス中

四.HTTP メッセージヘッダー

HTTP メッセージヘッダー = メッセージヘッダー + 空行(CR+LF) + メッセージ本体

             = 開始行(リクエスト行/ステータス行) + ヘッダー + 空行 + メッセージ本体
             
             = 開始行 + リクエスト/レスポンスヘッダーフィールド + 一般ヘッダーフィールド + エンティティヘッダーフィールド + 空行 + メッセージ本体

P.S.この*空行(CR+LF)*を軽視してはいけません。HTTP ヘッダーインジェクション攻撃が存在するのはこの空行があるためです

###1.開始行

開始行はリクエスト行とステータス行に分かれます(それぞれ HTTP リクエストメッセージとレスポンスメッセージに対応):

  • リクエスト行:リクエストに使用するメソッド、URI、HTTP バージョンを説明

  • ステータス行:返すレスポンスの HTTP バージョンとステータスコードを説明

###2.ヘッダーフィールド

リクエストヘッダーフィールド
ヘッダーフィールド名説明
Acceptユーザーエージェントが処理可能なメディアタイプ
Accept-Charset優先する文字セット
Accept-Encoding優先するコンテンツエンコーディング
Accept-Language優先する言語(自然言語)
AuthorizationWeb 認証情報
Expectサーバーの特定動作を期待
Fromユーザーの電子メールアドレス
Hostリクエストリソースがあるサーバー
If-Matchエンティティタグ(ETag)を比較
If-Modified-Sinceリソースの更新時間を比較
If-None-Matchエンティティタグを比較(If-Match と逆)
If-Rangeリソースが更新されていない場合、エンティティ Byte の範囲リクエストを送信
If-Unmodified-Sinceリソースの更新時間を比較(If-Modified-Since と逆)
Max-Forwards最大転送ホップ数
Proxy-Authorizationプロキシサーバーがクライアントに要求する認証情報
Rangeエンティティのバイト範囲リクエスト
*Referer*Web 認証情報
TE転送エンコーディングの優先度
User-AgentHTTP クライアントプログラムの情報
レスポンスヘッダーフィールド
ヘッダーフィールド名説明
Accept-Rangesバイト範囲リクエストを受け入れるかどうか
Ageリソース作成からの経過時間を推算
ETagリソースのマッチング情報
Locationクライアントを指定 URI にリダイレクト
Proxy-Authenticateプロキシサーバーのクライアントに対する認証情報
Retry-After再度リクエストを送信する時機の要求
ServerHTTP サーバーのインストール情報
Varyプロキシサーバーキャッシュの管理情報
WWW-Authenticateサーバーのクライアントに対する認証情報
一般ヘッダーフィールド
ヘッダーフィールド名説明
Cache-Controlキャッシュの動作を制御
Connectionホップバイホップヘッダー、接続の管理
Dateメッセージ作成の日時
Pragmaメッセージ指示
Trailerメッセージ末端のヘッダー一覧
Transfer-Encodingメッセージ本体の転送エンコーディング方式を指定
Upgrade他のプロトコルにアップグレード
Viaプロキシサーバーの関連情報
Warningエラー通知
エンティティヘッダーフィールド
ヘッダーフィールド名説明
Allowリソースがサポートする HTTP メソッド
Content-Encodingエンティティ本体に適用するエンコーディング方式
Content-Languageエンティティ本体の自然言語
Content-Lengthエンティティ本体のサイズ(単位:バイト)
Content-Location対応するリソースの URI に代わる
Content-MD5エンティティ本体のメッセージダイジェスト
Content-Rangeエンティティ本体の位置範囲
Content-Typeエンティティ本体のメディアタイプ
Expiresエンティティ本体の有効期限日時
Last-Modifiedリソースの最終更新日時

P.S.その他のヘッダーフィールドおよびより詳細なヘッダーフィールド情報は 博客園:HTTP メッセージ を参照

###参考資料:

  • 《図解 HTTP》

コメント

コメントはまだありません

コメントを書く