詳細HTTPプロトコルフォーマット

参考:https://www.jianshu.com/p/8fe93a14754c

、URIの構造

HTTPユニフォームリソース識別子(使用してURI)データを送信し、接続を確立します。URL(ユニフォームリソースロケータ)は、特別な種類でURI、リソースを検索するための十分な情報が含まれている、我々は一般的に使用されURL、そして完全にはURL次のセクションが含まれます。

http://www.fishbay.cn:80/mix/76.html?name=kelvin&password=123456#first

1.プロトコルセクション

URLプロトコル部分http:ページが使用していることを示す、HTTP後ろに、プロトコルを//区切り

2.ドメイン部分

ドメイン名はwww.fishbay.cn、する必要がある、あなたがリクエストを送信するときに、DNSサーバーを解決しますIP最適化のための要求は、直接使用することができる場合IPに使用されるドメイン名の一部として、

3.ポートセクション

後者のドメイン80ポート、およびドメイン間による:パーティションは、ポートがありませんURL必要な部分。ポートがある場合80、または省略することができます

4.仮想ディレクトリセクション

以下からのドメイン名の/最後に最初/の日付は、仮想ディレクトリの一部です。ここで、仮想ディレクトリがないURL仮想ディレクトリで、本実施形態の本質的な部分であります/mix/

ファイル名の一部5.

最後からドメイン名/への開始?日は、ファイル名の一部であり、そうでない場合は?、それが最後のドメイン名で/のスタート#、日付、ファイル名の一部であり、そうでない場合?#、最後のドメインからの/開始から終了まで、すべてのファイル一部に名前を付けます。この例では、ファイル名76.html、ファイル名ではありませんURLの必要な部分、そうでない場合は、ファイル名、デフォルトのファイル名

6.アンカー部

#始まり最後に、それはアンカーの一部です。このセクションのアンカーされfirst、アンカーではありませんURL必要な部分

7.パラメータ部分

?始まりへの#一部との間の部分、これまでにも、検索クエリの一部の一部として知られているパラメータが、あります。この実施形態では、パラメータは、name=kelvin&password=123456種々のパラメータのうち、複数のパラメータがある場合、&セパレータとして。

二、リクエスト

HTTPリクエストであっ要求ライン(リクエストライン)、リクエストヘッダ(ヘッダ)、空白ライン部と4つの要求データ。

 
 
キャプチャ request は次のような構造は次のようになります。
GET /mix/76.html?name=kelvin&password=123456 HTTP / 1.1 
ホスト:www.fishbay。CNは
アップグレード -insecure-要求:1人の
ユーザー -agent:Mozillaの/ 5.0(Macintosh版、インテルのMac OS X 10_11_5)のAppleWebKit / 537.36(ヤモリのようにKHTML、)クローム/ 56.0.2924.87サファリ/ 537.36 
受け入れ:text / htmlで、アプリケーション/ XHTML + XML、アプリケーション/ XML、Q = 0.9、画像/ WEBP、* / * ; Q = 0.8 
のAccept-エンコーディング:GZIPは、SDCH、収縮
受け入れ言語:ZH-CNを、ZH; Q = 0.8、EN; Q = 0.6

1.リクエストライン

GET要求タイプ、/mix/76.html?name=kelvin&password=123456アクセスされるリソースは、HTTP/1.1プロトコルのバージョンであります

2.リクエストヘッダ

要求ヘッダーから第二行は、Hostリクエスト(ホストのドメイン名)の宛先は、User-Agentクライアントの情報であり、ブラウザによって定義されたブラウザ情報の種類を検出し、自動的に各要求を送信することが重要です。

3.空行

ヘッダ次のリクエストは、空白行を持っている必要があります

4.要求データ

また、データ要求リクエストボディと呼ばれ、他のデータを追加することができます。リクエストボディのこの例では空です。

応答

典型的には、サーバはクライアントの要求を受信した後、そこになりHTTP、応答メッセージ、HTTPレスポンスも作られている4、すなわち、部品:ステータスラインを、最初、空白行に応答して、およびその応答です。

 

次のようにデータをキャプチャ:

HTTP / 1.1 200 OK 
サーバーnginxの
 :月、2017年2月20日9時13分59秒GMTの
コンテンツ -タイプ:テキスト/平野;のcharset = UTF-8は、
ヴァリ:なAccept- エンコーディング
キャッシュ -制御:無店舗
Pragrma:NO- キャッシュが
有効期限:木、1970年1月1日午後12時00分○○秒GMT 
キャッシュ -制御:NO- キャッシュ
内容は -encoding:gzipで
転送 -Encodingを:チャンク
プロキシ -connectionを:キープアライブ

{ "コード":200、 "予告":0 、 "続く":0、 "前進":0、 "MSG":0、 "コメント":0、"pushMsg":NULL、 "友人":{ "snsCount":0、 "カウント":0、 "celebrityCount":0}、 "lastPrivateMsg":NULL、 "イベント":0、 "newProgramCount":0、 "createDJRadioCount":0、 "newTheme": }

1.ステータス行

プロトコルバージョン、ステータスコード、ステータスメッセージ用組成物によるステータス行

2.レスポンスヘッダー

クライアントへの応答の一部のヘッダ情報など、使用することができるDate(応答生成日付)、 Content-TypeMIMEタイプおよびエンコード形式)、 Connection(デフォルト長いリンク)、等

3.空行

レスポンスヘッダとその応答の間に空行が存在しなければなりません

4.レスポンスボディ

レスポンスボディ、この場合の重要な情報

第三に、ステータスコード

HTTPプロトコル・ステータス・コードによって3数字、最初の数字は、応答の種類、合計定義5カテゴリ:

1 1xx:指示情報は、 -要求が受信されたことを示し、処理は続行します

2 2xx:成功-受け入れ、理解し、要求が正常に受信されたことを示します

3 3xx:リダイレクション-要求を満たすためには、さらに操作を行わなければなりません

4 4xx:クライアントエラー-リクエストに構文エラーがありますか、要求が達成できません

5 5xx:サーバーエラー-サーバーは、正当な要求を達成するために失敗しました

ここで、共通のステータスコードは次のよう:

OK 200                         // クライアント要求が成功した 
400不正な要求                // 、クライアントは、構文エラーを要求し、サーバが理解することはできません 
401権限               // 要求が許可されていない、ステータスコードは、WWW-Authenticateヘッダフィールドを使用しなければならない 
禁断の403                  // サーバは要求を受信したが、サービスを提供することを拒否した 
404が見つかりません                  // 要求されたリソースが、例えば存在しません:間違ったURLを入力します。 
500内部サーバーエラー      // サーバー予期しないエラーが発生した 
との503本のサーバー利用できない論文         // サーバは現在のクライアントを扱うことができないという要求を一定期間後に正常に戻してもよいです

第四に、リクエストメソッド

HTTPそれは様々なニーズを満たすために、要求メソッドを複数定義しています。HTTP/1.03つの要求定義GET方法を:POST そして  HEAD、にHTTP/1.1、さらに5つのリクエストOPTIONSメソッドを:PUTDELETE、、TRACEと  CONNECT次のように各特定の機能要求の方法があります。

指定されたページ情報への要求を取得し、エンティティボディを返します。
HEAD同様のGET要求が、応答は、ヘッダ取得するために、特定のコンテンツに返されない
POSTは、指定されたリソース(例えば、ファイル送信フォームまたはアップロード)にデータ処理要求を送信します。リクエストボディに含まれるデータ。POSTリクエストは、新たな資源の創出につながる可能性 / 変更または既存のリソース。
サーバからクライアントに送信された文書データの具体的な内容を置き換えるPUT。
リクエストに指定されたページを削除するには、サーバーを削除します。
HTTP CONNECT / 1. 1つのプロトコルは、プロキシサーバパイプラインモードへの接続のために予約することができます。
OPTIONSは、クライアントがサーバーのパフォーマンスを表示することができます。
TRACEエコーサーバは、主にテストや診断のため、要求を受信します。

実際のアプリケーションプロセス、GET及びPOST複数の使用、次のように二つの違いについて説明します。

1.リクエストパラメータの違い

GET要求は、スプライシングのリクエストパラメータであるURL戻る?との間の複数のパラメータを用いて、パーティション&、それが送信されるように、それは、英数字である場合、それが有する空間または中国語である場合、;接続のBase64エンコーディング

POSTデータは、リクエストボディに提出を要求、それはしないだろうURLに表示します

前記送信データのサイズ

GET:ブラウザとサーバは制限するURL長さを、データの送信は、通常、限られています2K

POST:いないことによりデータので、URLデータの送信、それは一般的に比較的多量に送信することができます

3.データ解析

GETRequest.QueryString取得した変数の値

POSTRequest.form取得した変数の値

4.セキュリティ

GET:リクエストパラメータはにURL戻って、あなたが直接あなたは、ログオンログインインターフェイスは、ブラウザのキャッシュであれば、他の人が履歴を表示し、アカウントのパスワードを取得することができます場合は特に、見ることができます

POST:トランスミッション内部のリクエストボディでリクエストパラメータは、直接比較的得ることができないGET高い安全性を、しかし、キャプチャツールによって、まだリクエストパラメータを見ることができます

ファイブ作品

HTTP要求/応答モードを使用するプロトコル、クライアントは要求に対するサーバの応答、その後、サーバーに要求メッセージを送信します。ここで何がHTTP処理要求は:

  1. ブラウザの入力ではURL、Enterキーを押します
  2. ブラウザは、DNS解決するためにサーバに要求しURL、対応するドメイン名をIPアドレス(それがされている場合IP、要求は、このステップは必要ありません)
  3. アウトパースIPによると、後でIP確立とポート番号、およびサーバのTCPコネクション
  4. ブラウザは、のように、サーバに要求メッセージを要求を送信するTCP第3回サーバハンドシェークパケット
  5. サーバーは、ブラウザにデータを送信、応答します
  6. 通信が完了すると、切断するTCP接続を
  7. ブラウザは、受信したデータを解析し、表示されました

六、HTTPSはじめに

HTTPS安全なHTTPHTTP通信で添加チャネル、すなわちSSL層(現在のバージョンはTLS1.2次のように)、データ通信を盗難を防止するために、暗号化され、特定の通信プロセスです。

 
図3

安全性を確保し、伝送効率を向上させることで、対称暗号化と非対称暗号化機能の組み合わせを使用してHTTPS暗号。次のようにHTTPとHTTPSの違いは以下のとおりです。

合意は、証明書を申請する必要があるCA 1.https、証明書は、一般的に支払う自由少し必要です。

2.http情報は、HTTPS、平文で送信されるSSLセキュリティ伝送プロトコルを使用して暗号化されています。

3.http HTTPSポート443である、前者80と同じではありません。

4.http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全

おすすめ

転載: www.cnblogs.com/tkzc2013/p/10935301.html