javaEE 初等 - HTTP プロトコルのリクエストとレスポンス

HTTPとは


フルネームはHypertext

HTTP はアプリケーション層で最も広く使用されているプロトコルの 1 つであり、ブラウザは http に基づいて Web ページを取得します。
つまり、HTTP はブラウザとサーバーの間のブリッジです。


HTTP は、多くの場合、トランスポート層でTCPプロトコルに基づいて実装されます。

私たちは通常、HTTP プロトコルを介してデータを送信し、Web サイトを開きます。


Sogou 検索の「Web アドレス」 ( URL ) をブラウザに入力すると、ブラウザは HTTP リクエストを Sogou のサーバーに送信し、
Sogou のサーバーは HTTP レスポンスを返します。

応答結果がブラウザによって解析された後、表示されるページのコンテンツとして表示されます。
(このプロセス中に、ブラウザは複数の HTTP 要求をサーバーに送信する場合があり、サーバーはそれに応じて複数の応答を返します。これらの応答には、ページの HTML、CSS、JavaScript、画像、フォントなどが含まれます。)




ブラウザに「URL」を入力すると、ブラウザは対応するサーバーに HTTP リクエストを送信します。
リクエストを受け取った相手のサーバーは、計算と処理を行った後、HTTP レスポンスを返します。


HTTP プロトコル メッセージ形式

HTTP プロトコル形式

1 パケット キャプチャ ツールの使用


パケット キャプチャ ツールは多数ありますが、ここではfiddlerを使用します。これは、http に焦点を当てているため、より便利に使用できます。

インターネットからダウンロードしてインストールでき、プロセスは非常に簡単です。



開始後、http サーバーを使用して対話する現在のコンピューター上のプログラムのプロセスをすぐに表示します。

2 パケットキャプチャツールの原理


fiddlerの本質はプロキシ プログラムであり、使用する際の注意事項が 2 つあります。

1.他のプロキシ プログラムと競合する可能性があり、使用時には他のプロキシ プログラム (一部のブラウザ プラグインを含む) を閉じる必要があります。


2.パケットを正しくキャプチャするには、https 機能も有効にする必要があります。

https は http に基づくプロトコルの進化版ですが、現在インターネット上のほとんどのサーバーは https を使用しています。
デフォルトでは、fiddler は https パッケージをキャプチャできないため、手動で https を開始して証明書をインストールする必要があります。

2.1 プロキシとは


エージェントは実際に、あなたのために仕事をしてくれる人を探しています。

例えば、食べたいけど買うのがめんどくさいので、ルームメイトに「食堂に行くときはご飯持ってきてね」と言うと、ご飯を持ってきてくれます
。彼に。



一人で食堂に行けば食べ物も買えますが、怠け者なのでルームメイトに頼んで持ってきてもらいました。
このときのルームメイトは「エージェント」、つまりルームメイトが仕事を手伝ってくれているので、都合が悪いときはエージェントを派遣する必要があります。


上記のプロセスの間、ルームメイトは私がカフェテリアのオーナーとどのような取引をしたかについて非常に明確だったので、彼は小さなノートを取り出して書き留めることができました.
fiddler はそのようなプロキシです

2.2 フォワードおよびリバース プロキシ


プロキシもフォワードプロキシとリバースプロキシに分けられ、
クライアントを代表するプロキシをフォワードプロキシ、サーバーを代表するプロキシをリバースプロキシと呼びます。



ルームメイトが食べ物を買っているとき、食堂のオーナーは忙しかったので、パートタイムの女子高生を見つけて食べ物を買いました. このとき、ルームメイトは私を代表し、彼は私のツールパーソンでした. これがポジティブエージェントです.

バイトの女子高生は、上司の道具人、つまりリバース

3 httpsを有効にする方法


1. フィドラー インターフェイスを開き、[ツール]をクリックします。


2. 表示されるインターフェイスで、[オプション...]をクリックします。


3. 表示されるインターフェイスで、[https] を選択し、表示される 4 つのオプションすべてにチェックを入れます。



初めてティックすると、次のインターフェイスが表示されます。証明書をインストールするかどうかを意味するので、必ず [はい] をクリックしてください。






ここの青い部分はhtmlページであることを意味し、緑色の部分はjsであることを意味します。
グレーと黒の部分は単純なデータを表しています。


左側のリクエスト リストのオプションをダブルクリックして、リクエストの詳細を表示します。






http リクエストには特定の形式があり、フィドラーは形式に従ってそれを解析し、さまざまな表示効果を示します。

上の図でRawを選択すると、最も独創的な効果が得られます。



右下隅にある[Raw]を選択して、応答を表示します。


下の赤いボックス内のボタンをクリックし、メモ帳を選択して開きます。



以下は、メモ帳を開くためのリクエストです。



上記の赤丸で囲んだ部分を1スペース

1.入手する

これがHTTPメソッド(メソッド)です


2、https://www.sogou.com/

これは、Web アドレスとも呼ばれるURL (Unique Resource Locator) であり、URL の役割は、インターネット上の一意の場所を識別すること


3、HTTP/1.1

これはバージョン番号です。

HTTP リクエスト

1 URL について




ポート番号はどのプログラムかを表し、階層ファイル パスはプログラムの管轄下にあるファイルを見つける役割を果たします。
クエリ文字列はリソースを取得する際に使用する文字列、サーバーアドレスはドメイン名、フラグメント識別子は基本的に現在は使用していません。
ログイン時にログイン用の専用ページが表示されるため、ログイン情報は使用されなくなります。



たとえば、学校のカフェテリアでパンケーキを食べたい場合、まず自分がどのカフェテリアにいるのかを判断する必要があります。また、どのウィンドウで食事をするかを知る必要があります
調味料なども選びます。

ここで、どの食堂が IP アドレスを表し、どのウィンドウがポート番号を表し、どのサイドディッシュが追加されたかがレイヤー付きのパスを表し、どのシーズニングがクエリ文字列を表すか (キーと値のペアで編成)
)


URL にはいくつかの部分があり、そのうちのいくつかは省略できます。

https://www.sogou.com/

上記はポートを省略したもので、省略後はブラウザがデフォルトのポートを提供します。
デフォルトのポートは、http の場合は 80、https の場合は 443 です。
/もパスです。ここでは、HTTP サーバーのルート ディレクトリである「ルート ディレクトリ」を表します。

2 知る方法




メソッドは、このリクエストのセマンティクスを記述します。

ここでのメソッドのほとんどは使用されません。GET と POST だけが最も一般です。


たとえば、世界には文才のための10の大会があり、曹子堅は8つの大会を独占し、私は1つの大会を所有し、世界中のすべての人が1つの大会を共有しています。
HTTPメソッドは世界に10個あり、GETメソッドが8個、POSTメソッドが1個、残りのメソッドが1個に分かれています。

2.1 GET メソッド


GET は最も一般的な HTTP メソッドであり、サーバー上のリソースを取得するためによく使用されます。URLをブラウザに直接入力すると、
ブラウザからGETリクエストが送信されますが、HTML内のlink、img、scriptなどのタグもGETリクエストをトリガーします。

Fiddler を開き、Sogou のホームページにアクセスし、メモ帳を選択して開き、パケット キャプチャの結果を観察します。




GET リクエストは、最初の行とhard の2 つの部分に分かれています。

2.2 POST メソッド


最も典型的なのは、ログインしてジャンプするときに POST が関与することであり、もう 1 つはファイルのアップロードです。

Fiddler を使用して POST メソッドを観察し、メモ帳を選択して開きます。



HTTP リクエストは、次の 4 つの部分に分けることができます。

1.最初の行

2.リクエストヘッダー (難しい)

3.空行

4.本体

GET リクエストの場合はボディがなく、POST リクエストの場合はボディがあります。

2.2.1 リクエストの「ヘッダー」(ヘッダー)を理解する


キーと値のペアの束は難しく、各行はキーと値のペアであり、キーと値は次のように区切られています: .
キーと値のペアには特別な意味があります。

Host: gitee.comここではサーバーが置かれているアドレスとポートを大まかに記述します
ここでの Host のアドレスとポートは、最も重要なアクセス先を記述するために使用されます。

Content-Length は本文のデータの長さを示し、Content-Type は要求された本文のデータの形式を示します。


GET リクエストの場合、ボディはなく、これらの 2 つのフィールドはリクエストに存在しません. POST リクエストの場合、ボディはありますが、これらの 2 つのフィールドが存在する必要があります.

User-Agent はUA と呼ばれ、ブラウザーとオペレーティング システムのバージョンを表します。

現在の User-Agent は、主に PC とモバイルを区別するために使用されます。

リファラーは、現在のページの「ソース」を示します。アドレス バーからアドレスを直接入力するか、お気に入りをクリックすると、リファラーは表示されません。

Cookieは非常に重要なハード属性であり、基本的にはブラウザによって Web ページに提供されるローカル ストレージ データ メカニズムです。
デフォルトでは、セキュリティ上の理由から、Web ページはコンピュータのハード ドライブにアクセスできません。

Cookie には有効期限があります。有効期限は何に使用されますか?

一部の公共のコンピュータ(学校図書館の電子閲覧室)は、公共のコンピュータに自分のアカウントでログインします.
このとき、ログイン状態はCookieに保存されます.次の人がそれを使用すると、Cookieが期限切れになる可能性があります. . ログインしました。
サイトの機密性が高いほど、有効期限は短くなります。

2.2.1.1 クッキーに関する 3 つの質問


1、クッキーはどこから来ますか?

Cookie のデータはサーバーから取得され、
サーバーは HTTP 応答のヘッダー部分 (Set-Cookie フィールド) を通じて、ブラウザーの Cookie に何を保存するかを決定します。


2、クッキーはどこに保存されますか?

ブラウザ上とハードディスク上に存在すると考えられますが、クッキーを保存する際には、ブラウザ+ドメイン名の次元で細分化されます。
異なるブラウザーは独自の Cookie を保存し、同じブラウザーの異なるドメイン名は異なる Cookie に対応します。

Cookie の内容はキーと値のペアだけでなく、有効期限も含まれており、たとえば多くの Web サイトが一度ログインすると、ログイン状態が自動的に記録されます。


3、クッキーはどこに行きますか?

サーバーに戻ると、同時に多数のクライアントが存在します。

クライアント側は Cookie を使用して現在のユーザーの中間状態を保存します.
クライアントがブラウザーにアクセスすると、Cookie のコンテンツが自動的にリクエストに取り込まれ、
サーバーはクライアントが現在どのように見えるかを認識します.

2.3 GET と POST の違い

  • セマンティクスは異なります。GET は通常、データを取得するために使用され、POST は通常、データを送信するために使用されます。
  • GET の body は通常空で、送信されるデータはクエリ文字列を通じて送信されます. POST のクエリ文字列は通常
    空で、送信されるデータは body を通じて送信されます。
  • 通常、GET リクエストはべき等であり、POST リクエストは通常​​べき等ではありません。(複数のリクエストで同じ結果が得られた場合、そのリクエストは
    べき等と見なされます)。
  • GET はキャッシュできますが、POST はキャッシュできません。(これも冪等です)

例えば、牛が最初に草を食べると乳が出ますが、2回目に草を食べると乳が出ます。
最初の放牧が 2 番目の放牧と同じように絞り出されない場合、それは冪等ではありません。


実際には、GET と POST の間に本質的な違いはありません. ほとんどのシナリオでは、それらは互いに置き換えることができます.
ただし、使用習慣にはまだ違いがあります。

GET を使用して送信し、POST を使用して取得できます。POST を冪等に設定できますが、GET はそうではありません。

HTTP レスポンス




応答も4つの部分に分かれています

1.最初の行: HTTP/1.1 200 OK


2、ヘッダー


3.空行: ヘッダーの終了タグを示します


4、本体

1 「ステータスコード」を知る




ステータス コード200 OKは成功を示します。

404 Not Found は、アクセスされたリソースが存在しない、つまりサーバー上で見つからないことを意味します。

403 Forbidden は、アクセスが拒否されたことを意味します (許可なし)

302 Move temporary means redirection (similar to call tr​​ansfer)
call tr​​ansfer . たとえば、ある人が自分の携帯電話番号を変更した場合、誰かが以前の番号をダイヤルすると、新しい番号に転送されます。

500 は、内部サーバー エラー (サーバー コードが例外をスローした) を示します。

504 ゲートウェイ タイムアウトは、応答が長すぎてブラウザが待機できないことを意味します。


リダイレクトとリクエスト転送の違い





リダイレクトは外部リソースにリダイレクトできます (他の Web サイトにジャンプします)
リクエスト転送はサーバー内のリソース間でのみ転送できます. 相互作用が 1 つ少ないほど効率的です.


ステータス コードは、いくつかのカテゴリに分けることができます。

1** は待機、2** は成功、3** はリダイレクト、4** はクライアント エラー、5** はサーバー エラーを意味します。

2 レスポンス「header」(ヘッダー)を認識する


レスポンス ヘッダーの基本的な形式は、基本的にリクエスト ヘッダーと同じです。

Content-Typeと同様にContent-Lengthなどの属性の意味も、リクエストの意味と一致しています。

\

おすすめ

転載: blog.csdn.net/m0_63033419/article/details/129789613