HTTP
ウィキペディアからの引用HTTP:HyperText Transfer Protocol(英語:HyperText Transfer Protocol、略称:HTTP)は、分散型、協調型、およびハイパーメディア情報システム用のアプリケーション層プロトコルです。HTTPは、World Wide Web上のデータ通信の基盤です。
HTTPを設計する本来の目的は、HTMLページを公開および受信する方法を提供することでした。HTTPまたはHTTPSプロトコルを介して要求されたリソースは、Uniform Resource Identifiers(URI)によって識別されます。
HTTPプロトコル層
HTTP(HyperText Transfer Protocol)、Hypertext Transfer Protocolは、TCPに基づくアプリケーション層プロトコルです。
HTTPリクエストレスポンスモデル
HTTPは要求と応答で構成され、標準のクライアントサーバーモデル(B / S)です。HTTPプロトコルは常にクライアントによって開始される要求であり、サーバーは応答を返します。下の画像を参照してください。
HTTPはステートレスプロトコルです。ステートレスとは、クライアント(Webブラウザー)とサーバーの間に永続的な接続を確立する必要がないことを意味します。つまり、クライアントがサーバーに要求を送信し、サーバーが応答を返すと、接続は閉じられます。サーバーは接続に関する情報を保持しません。
HTTPは要求/応答モデルに従います。クライアント(ブラウザー)はサーバーに要求を送信し、サーバーは要求を処理して適切な応答を返します。すべてのHTTP接続は、要求と応答のセットとして構造化されています。
HTTP作業プロセス
HTTP操作はトランザクションと呼ばれ、その処理のプロセス全体は次のとおりです。
アドレス解決
クライアントブラウザを使用してこのページをリクエストする場合:localhost.com : 8080 / index.htm
プロトコル名、ホスト名、ポート、オブジェクトパス、およびその他の部分がそこから分解されます。このアドレスの場合、解決の結果は次のようになります。
プロトコル名:http ホスト名:localhost.com ポート: 8080 オブジェクトパス: /index.htm
このステップでは、ドメイン名localhost.comを解決してホストのIPアドレスを取得するためにDNSが必要です。
HTTP要求パケットをカプセル化する
上記の部分をマシン自体の情報と組み合わせて、HTTPリクエストパケットにカプセル化します。
TCPパケットにカプセル化され、TCP接続を確立します(TCPスリーウェイハンドシェイク)
HTTPの作業を開始する前に、クライアント(Webブラウザー)は最初にネットワークを介してサーバーとの接続を確立する必要があります。接続はTCPを介して完了します。このプロトコルとIPプロトコルは共同でインターネットを構築します。これは、よく知られているTCP / IPプロトコルファミリーであるため、インターネットは、TCP / IPネットワークとも呼ばれます。
HTTPはTCPよりも高いレベルのアプリケーション層プロトコルです。ルールによれば、下位層プロトコルが確立されて初めて上位層プロトコルの接続を確立できます。したがって、最初にTCP接続を確立する必要があります。一般的なTCP接続のポート番号は80です。これはポート8080です。
クライアントは要求コマンドを送信します
接続が確立されると、クライアントはユニフォームリソース識別子(URL)、プロトコルバージョン番号の形式でサーバーに要求を送信し、その後に要求修飾子、クライアント情報、および可能なコンテンツを含むMIME情報を送信します。
サーバーの応答
リクエストを受信すると、サーバーは、対応する応答情報をステータスラインの形式で提供します。これには、情報のプロトコルバージョン番号、成功またはエラーコード、サーバー情報、エンティティ情報、可能なコンテンツを含むMIME情報が含まれます。
エンティティメッセージは、サーバーがヘッダー情報をブラウザに送信した後、ヘッダー情報の送信が終了したことを示す空白行を送信し、次にContent-Type応答ヘッダー情報で記述された形式でユーザーの実際のリクエストを送信します。データ。
サーバーはTCP接続を閉じます
通常の状況では、Webサーバーが要求データをブラウザーに送信すると、TCP接続が閉じられ、ブラウザーまたはサーバーがヘッダー情報に次のコード行を追加すると、
接続:キープアライブ
TCP接続は送信後も開いたままなので、ブラウザは同じ接続を介してリクエストを送信し続けることができます。接続を維持すると、要求ごとに新しい接続を確立するために必要な時間が節約され、ネットワーク帯域幅も節約されます。
HTTP作業プロセスで使用される概念
メッセージフォーマット
HTTP1.0メッセージには、要求と応答の2つのタイプがあります。メッセージ形式は次のとおりです。
リクエストメッセージフォーマット
要求メソッドURL HTTP /のバージョン番号
(オプション)リクエストヘッダフィールド
の空白行
体(POSTリクエストでのみ有効)
たとえば、次のとおりです。
GET http:// m.baidu.com/ HTTP / 1.1 Host m.baidu.com Connection Keep - Alive ... // 其他header key = iOS
応答メッセージの形式
HTTP /バージョン番号は、コード記述の戻りコードを返し
レスポンスヘッダフィールド(オプション)
空のライン
体を
たとえば、次のとおりです。
HTTP / 1.1 200 OK Content-Type text / html; charset = UTF-8 ... // 其他ヘッダ <html> ...
URLの構造
HTTPプロトコルを使用してリソースにアクセスするには、URL(Uniform Resource Locator)のユニフォームリソースロケーターを使用します。URLの形式は次のとおりです。
scheme:// host:port / path?query scheme:プロトコルを示します(Http、Https、Ftpなど)。; host:は、アクセスされたリソースが配置されているホスト名を示します:例:www.baidu.com; port:は、ポート番号を示し、デフォルト80: パス:ターゲットホスト上のアクセスされたリソースのストレージパスを示します; クエリ:クエリ条件を示します; 例:http:// www.baidu.com/search?words=Baidu
HTTPリクエストメソッド
GET:URLで指定されたリソースを取得する;
POST:エンティティ情報を転送する
PUT:ファイルをアップロードする
DELETE:ファイルを削除する
HEAD:GETと比較してメッセージのヘッダーを取得する、メッセージの本文を返さない
OPTIONS:サポートされているメソッドについて尋ねる
TRACE:リクエストを追跡するパス;接続
:プロキシサーバーと通信するときにトンネルを確立し、TCP通信にそのトンネルを使用する必要があります。SSLとTLSは主にデータを暗号化し、ネットワークトンネルを介して送信するために使用されます。
メッセージフィールド
HTTPヘッダーフィールドは、Content-Type:text / htmlのように、中央が「:」で区切られたフィールド名とフィールド値で構成されます。これらの中で、同じフィールド名は複数のフィールド値に対応できます。
5種類のHTTPメッセージフィールドがあります。
- リクエストメッセージフィールド
- 返信メッセージフィールド
- エンティティヘッダーフィールド
- 一般的なメッセージフィールド
- その他のメッセージフィールド
リクエストメッセージフィールド
HTTPリクエストでサポートされるメッセージフィールド。
Accept:クライアントが処理できるメディアタイプ。text / htmlなどの場合、クライアントはサーバーにhtmlタイプのデータを返すように要求します。そうでない場合は、テキスト タイプを返すことができます。メディアタイプの形式は通常、type / subTypeです。これは、subTypeタイプのデータが優先的にリクエストされることを意味します。リクエストされない場合、タイプ データを返すことができます。 一般的なメディアタイプ: テキストファイル:テキスト / html、テキスト/プレーン、テキスト/ css、アプリケーション/ xml 画像ファイル:iamge / jpeg、画像/ gif、画像/ png、 動画ファイル:動画 / mpeg アプリケーションで使用されるバイナリファイル:Application / octet-stream、application / zip Acceptフィールドは複数のフィールド値を設定できるため、サーバーは順番に一致し、最初に一致したメディアタイプを返します。もちろん、qパラメーターを通じて メディアタイプの重みと重みを設定することもできます優先度が高いほど、優先度が高くなります。Qの値は[ 0、1 ]、好ましくは小数点3の後、1にデフォルト0 。例: Accept:text / html、application / xml; q =0.9、* / * Accept -Charset:クライアントがサポートする文字セットを示します。たとえば、次のように受け入れ-文字セット:GB2312、ISO- 8859 - 1。 受け入れ -encoding:クライアントがコンテンツのエンコーディングをサポートしていること。例:Accept- エンコード:gzip 一般的に使用されるコンテンツエンコード: gzip:ファイル圧縮プログラムgzip によって生成されたエンコード形式; compress:Unixファイル圧縮プログラムによって生成されたエンコード形式compress; deflate:zlibとdeflate圧縮アルゴリズムを組み合わせて生成されたエンコード形式; ID:デフォルトのエンコード形式で、圧縮は実行されません。 Accept -Language:クライアントがサポートする言語を示します。例:Accept-Language:zh- cn、en Authorization:クライアントの認証情報を示します。クライアントがアクセス時に認証する必要がある場合、サーバーは401を返し、クライアントは認証情報 をAuthorizationフィールドに追加してサーバーに送信します。認証が成功すると、200が返されます。LinuxCommuneのFtpサーバーなど: Ftp: // ftp1.linuxidc.com。 ホスト:リソースがアクセスされるホスト名、つまりURLのドメイン名部分を示します。以下のような:m.baidu.com の場合-Match:If- Matchの値が、要求されたリソース(リソースに関連付けられたエンティティタグ。リソースが変更され、それに応じてエンティティタグが変更される)のETag値と一致する場合、 サーバーは要求を処理します。 If -Modified-Since:クライアントが所有するローカルリソースの適時性を確認するために使用されます。クライアントから要求されたリソースがIf-Modified- sinceで指定され た時間後に変更された場合、サーバーは要求を処理します。このようによう:もし変性-以降:木曜の09 7月2018 00:00:00 、クライアントの場合と言った -側が要求したリソースの変更は1月後に2018年第90号のポイント、サーバプロセスの変更要求を発生しました。このフィールドを使用して、次の問題を解決でき ます。大量のデータを含むインターフェースがあり、リアルタイム性が高いため、更新時に変更されたフィールドを使用して、不要なトラフィック消費を回避できます。 If -None-Match:If -Matchの値が要求されたリソースのETag値と 一致しない場合、サーバーは要求を処理します。 If -Range:If- Range(ETag値または時間)の値が、アクセスされたリソースのETag値または時間と一致する場合、サーバーはリクエストを処理 し、[Range]フィールドに設定された指定範囲のデータを返します。一貫性がない場合は、すべてのコンテンツが返されます。IF -レンジの事実がIF-ことは Matchのアップグレードバージョンです。 の値が一致しない 場合でもデータを返すことができます。If - Matchが一致しない場合、リクエストは処理されないため、データを再度リクエストする必要があります。 If -Unmodified-Since:If-Modified- sinceとは逆に、要求されたリソースが指定された時間後に変更されていない場合にのみ要求が処理され、 それ以外の場合は412を返します。 Max- Forwards:リクエストが通過できるサーバーの最大数を示します。リクエストが転送されるたびに、Max-Forwardsは1ずつ減少します。Max- Forwardsが0の場合、リクエストが配置されて いるサーバーは転送を行わず、直接応答します。このフィールドは、通信の問題を特定するために使用できます。たとえば、Alipayファイバーが切断される前に、[ 最大 - 転送]を 設定すると、おおよその位置を特定できます。 プロキシ - 承認:クライアントがプロキシサーバーから認証チャレンジを受信すると、クライアントは認証情報を プロキシ - 承認に 追加して認証を完了します。承認はクライアントとサーバー間で行われることを除いて、承認と同様です。 範囲:リソース取得例えばセクション、:範囲:バイト = 500 - サーバ場合1000は、500〜1000バイトの指定されたリソースとの間に取得した内容を表します。 正しく処理できる場合は、データの一部が返されたことを示す206を応答として返します。このような範囲要求を処理できない場合は、200で応答し、完全な データ、 リファラーを返します。要求の発信元のページをサーバーに通知します。たとえば、バイドゥのホームページでキーワードを検索すると、結果ページのリクエストヘッダーにはこのフィールドが含まれ 、値は https://www.baidu.com/になります。このフィールドを介して、広告のクリックをカウントできます。 ユーザー - -エージェント:プロキシネームサーバへのリクエストやその他の情報を開始するブラウザ、例えば: ユーザー -agent:Mozillaの/ 5.0(Linuxでは、Androidの5.0 SM-G900Pビルド/ LRX21T;)のAppleWebKit / 537.36 ヤモリのような(KHTML、 )クローム / 63.0。3239.84モバイルサファリ/ 537.36
返信メッセージフィールド
HTTP応答でサポートされるメッセージフィールド。
処理できないことを示します。 エージ:サーバーは、オリジンサーバー(キャッシュサーバーではない)が応答を作成したのはどれくらい前かをクライアントに通知します。 単位は秒です。 ETag:指定されたリソースを要求するために使用できる物理リソースの識別子。 場所:リクエストされたリソースの新しい場所。 プロキシ - 認証:プロキシサーバーで必要な認証情報をクライアントに送信します。 再試行 - 後:サーバーはクライアントに再試行の頻度を通知します。通常、503および3xxリダイレクト応答で使用されます。 サーバー:現在のHTTPサーバーアプリケーションプログラムについてサーバーに通知します。 WWW - 認証は:そのようBasicまたはダイジェストなどの認証スキームに適用されるアクセスリソースへのクライアントを教えてください。401応答には、 WWW- Authenticateフィールドが含まれている必要があります。