記事ディレクトリ
写真から始めて、犬はいません、詳細はケースの詳細に依存します、HTTPの基本的なフォーマットを覚えるのは難しいです〜
基本的なHTTP形式の概要はこの図にあります
次に、この図の周りで、さまざまなケースを通してHTTP形式の正体を探ります。。。
1. HTTPリクエスト(リクエスト)
1.1URLとは
URLの完全な英語名はUniformResourceLocatorであり、完全な中国名统一资源定位符
であり、一般にWebサイトとして知られています。インターネット上の各Webページには一意のURLがあります。これは、インターネット上のWebページやその他のリソースのアドレスを完全に記述するために使用される識別方法です。
URLの基本形式
协议方案名
:URLは多くの場所で使用されており、http
よりhttps
一般的です。省略した場合、デフォルトでhttp://になります。登录信息
:現在のID認証は通常URLによって実行されなくなるため、通常は省略されます服务器地址
:ドメイン名でもドメイン名でもかまいませんIP地址
。上記のURLは域名
、IPアドレスよりも覚えやすいです。IPアドレスは、特定のホストを見つけることができるネットワーク上のより詳細なアドレス(118.24.113.28など)です。 。2つは解析して相互に変換できます端口号
:ホスト上のさまざまなアプリケーションを区別するために使用されます。各プログラムがネットワークにアクセスすると、現在のクライアントの要求を誰に与える必要があるかを区別するために、1つ以上のポート番号に関連付けられます。带层次的文件
(PATHパス):サーバー上のアプリケーション内の特定のリソースへのアクセスを示します查询字符串(query string)
:これは、クライアントからサーバーに渡されるパラメーターです。片段标识
:ページ内をジャンプするために使用されます。これにより、ドキュメント内のさまざまな位置にジャンプできます。
補足1:ドメイン名に対応するIPアドレスを表示する
- win + R
- cmdと入力します
- ドメイン名に対応する解決結果を表示するには、pingドメイン名を入力します
CSDNWebサイトのIPアドレスを表示する
補足2:クエリ文字列について
- キーと値のペアの構造は
=
キーと値に分割され、各キーと値のペアは&
分割されます。キーと値はプログラマーによって定義されるため、このパラメーターが存在する場合と存在しない場合があります。- Webアプリケーションの開発において重要な役割を果たします
補足3:URLエンコードについて
Baiduでprotocolschemenameキーワードを検索すると、クエリ文字列の最初のキーと値のペアwdの値が検索クエリの内容であることがわかります。貼り付けてコピーした後、5つの単語が次のようになっていることがわかります。 1つの文字列になります英数字のパーセント記号で構成される文字列
これは、URL(':'、'/'、'#'、...)に特別な意味を持つ多くの記号があり、これらの特別な記号がクエリ文字列に表示されてフォーマットエラーが発生するのを防ぐためです。シンボルを変換するために必要です。つまり、エスケープのプロセスはURLエンコードと呼ばれます。
エスケープする方法は、エスケープする必要のある文字列のメモリ16進形式を直接取得し、各バイトの前に%を追加することです。ここではUTF-8エンコーディングが使用され、5つの漢字には3バイトが必要です。合計15バイト
補足4:ポート番号
Fiddlerがクロールする特定のURLケース:
GET https://www.360kan.com/dianshi/index.html?from=dongdong HTTP/1.1
ポート番号が特別でない場合は通常ポート番号が省略され、ブラウザがデフォルトのポート番号を追加するため、ここにはポート番号はありません。
HTTPリクエストの場合、ブラウザは自動的にポート番号80を追加します
HTTPSリクエストの場合、ブラウザはポート番号443を自動的に追加します
1.2さまざまな方法に精通している(方法)
最も主流のHTTPプロトコルバージョンは1.1であり、HTTP/1.1は8つのメソッドを指定します
多くの方法がありますが、最もよく使われるのはGETとPOSTなので、ここではこの2つだけを紹介します。
1.2.1GETメソッドについて
GETメソッドは、HTTPメソッドで最も一般的に使用されるメソッドであり、サーバー上のリソースを取得するために使用されます。
トリガー方法:
- ブラウザのアドレスバーにURLを直接入力し、Enterキーを押します
- ブラウザのお気に入りのリンクをクリックしてください。意味は上記と同じですが、入力URLがマウスをクリックするように変更されているため、本質に違いはありません。
- HTMLの一部のタグには、link、img、script、a、その他のタグなど、URLを入力する必要のある場所があり、ブラウザは対応するGETリクエストを自動的に作成します
- JSを使用して、ブラウザのフロントエンドで直接HTTPGETリクエストを作成します
- …
場合:
このGETメソッドのリクエストから、次のことがわかります。
- GETは最初の行の最初の部分に書かれています
- URLのクエリ文字列は空でも空でも構いません
- 体の部分は通常空です
- ヘッダーセクションには多くのキーと値のペアがあり、コロンとスペースはキーと値を区切るために使用され、キーと値のペアは空白行で区切られます
1.2.2POSTメソッドについて
POSTメソッドはHTTPで最も一般的なメソッドであり、主にログインページに使用されます。
Giteeにログインするとき、Fiddlerを介してパッケージをキャプチャすると、左側にログイン要求が表示されます。
特定のPOSTメソッドのリクエストを確認すると、次のことがわかります。
- POSTは最初の行の最初の部分に書き込まれます
- URLのクエリ文字列は通常空です
- 本体部分は通常空ではなく、ここでの特定の形式はヘッダーのContent-Typeで記述され、特定の長さはヘッダーのContent-Lengthで記述されます。
- ヘッダーセクションには多くのキーと値のペアがあります。キーと値を区切るにはコロンとスペースが使用され、キーと値のペアは空白行で区切られます。
インタビューの質問:GETとPOSTの違いについて
GETとPOSTは基本的にyes没有区别
です。
GETを使用するシナリオは完全にPOSTに置き換えることができ、POSTを使用するシナリオもGETに置き換えることができます。
使用法の具体的な違いは次のとおりです。
- 一般的に、GETの本文部分は空であり、クエリ文字列を介してクライアントデータを送信するのが通例です。POSTのクエリ文字列部分は空であり、本文を介してクライアントデータを送信するのが通例です。
- セマンティックディファレンス、GETはサーバーからデータを取得するために使用され、POSTはクライアントからサーバーにデータを送信するために使用されます
- 通常の状況では、プログラマーはGET要求の処理を「べき等」として実装し、POST要求の処理は「べき等」である必要はありません(複数の要求によって得られた結果が同じである場合、悪影響はありません。要求はべき等と見なされます)
- GETリクエストはキャッシュできますが、POSTはキャッシュできません
1.3「ヘッダー」を理解する(ヘッダー)
前述のように、ヘッダーの形式はキーと値のペアの構造であり、各キーと値のペアは1行を占め、キーと値はコロンとスペースで区切られます。
1.3.1ホスト
サーバーホストのアドレスとポートを示します。
値は、IPアドレス、ドメイン名、または指定されたポート番号にすることができます。ホストはURLと同じにすることも、異なる場合もあります。Webサイトに直接アクセスすると、2つは同じになります。「プロキシ「Webサイトにアクセスするには、2つが異なります。さらに、ホストは実際には同じサーバーに対して3つ以上のサイトサービスを提供します。
1.3.2コンテンツの長さ
本文のデータの長さをバイト単位で表すために使用されます
1.3.3コンテンツタイプ
本文のデータを表すために使用される形式
スタイル1:
application/x-www-form-urlencoded
現時点では、本文のデータスタイルは、キーと値のペアの形式でクエリ文字列に似ています。キーと値のペアは&で区切られ、キーと値は=で区切られます。HTMLでは、フォームタグを使用して、このような形式を作成できます
スタイル2:
multipart/form-data
通常、ファイルや写真を送信するために使用されますが、比較的少数です
スタイル3:
application/json
これはより頻繁に使用されるスタイルであり、キーと値のペアの構造でもあります。{}を使用して、すべてのキーと値のペアをラップします。内部のキーと値のペアはコンマで区切られ、キーと値はコロンで区切られます。、値の文字列は二重引用符で囲まれます
1.3.4ユーザーエージェント
オペレーティングシステムとブラウザのプロパティを表すために使用されます
このフィールドはブラウザの互換性を向上させます。これまでブラウザの機能レベルが不均一だった場合、Webサイト開発者はこのフィールドを使用して、ユーザーのブラウザ/オペレーティングシステムのさまざまな属性を判別し、バージョン情報に基づいて関連する決定を行う必要がありました。互換性デザイン(たとえば、ブラウザに再生機能がある場合は、ビデオ付きのWebページに戻り、ビデオ再生機能がない場合は、テキストページにのみ戻ります)。現在、このフィールドを使用して、PC側とモバイル側を判別できます。
1.3.5リファラー
ページがそのページからジャンプしたことを示すために使用されます
次の場合、WebページはCSDNのメインWebサイトからジャンプします。
したがって、ブラウザに直接URLを入力するか、お気に入りをクリックしてWebサイトにアクセスすると、そのようなフィールドはありません。
1.3.6クッキー
Cookie
はい浏览器提供的方便程序员在客户端持久化存储数据的一种机制
。
たとえば、CSDN Webサイトにログインするためにコンピューターにユーザー情報を入力すると、ログイン後、後でWebページを閉じても、再度ログインすると、直接ログインしていることがわかります。状態であり、ユーザー情報を入力する必要はありません。これは実際にはcookie。効果が生成されます。
クッキーの操作メカニズムをより直感的に理解するために、SogouのWebサイトを例として取り上げます。
- 図に示す手順に従って、Sogouが以前に保存したCookieデータをクリアします。
- Sogou Webサイトを更新し、Fiddlerがパケットをキャプチャします
リクエスト(現時点でのリクエストにはCookieは含まれていません):
応答(応答に多くのSet-Cookieがあることがはっきりとわかります):
- 捜狗のウェブサイトをもう一度更新する
リクエスト(この時点でのリクエストにはCookie、キーと値のペアの構造があり、キーと値のペアはセミコロンで区切られ、キーと値は=で区切られていることがわかります。また、値が応答のSet-Cookieの最後の値ではありません):
応答(この時点では、Set-Cookieはそれほど多くないことがわかります):
このことからCookie
、この過程で、用法
- Cookieの意味は、プログラマーがクライアント側でプログラマー定義のデータを永続的に保存できるようにすることです。
- Cookieは、いくつかのキーと値のペアを格納します。キーと値のペアはセミコロンで区切られ、キーと値は等号で区切られます。
- ブラウザのCookieは、サーバーの応答ヘッダー(Set-Cookie)から取得されます。各Set-Cookieには、Cookieのキーと値のペアがあります。ブラウザがこれらのCookieのコンテンツを取得すると、ローカルに保存されます。
- 次のリクエストの後、ブラウザは保存されたCookieをサーバーに送信します
1.4ボディ〜(ボディ)
空白行の後のコンテンツは本文であり、空の文字列にすることができます。存在する場合、その長さはContent-Lengthで識別され、タイプはContent-Typeで識別されます。サーバーがHTMLページを返す場合、本文にはHTMLページのコンテンツが含まれます
2. HTTP応答(応答)
2.1ステータスコードとその説明
ステータスコードは、ページへのアクセスの結果を示します。これは、成功または失敗の可能性があります。失敗の場合、多くの状況に分けられます...
- 200 OK
これは最も一般的なステータスコードです。Fiddlerはパケットをキャプチャするために使用されます。ほとんどのパケットは200OKであり、アクセスが成功したことを示します。
- 404お探しのページが見つかりませんでした
このステータスコードは、リソースが見つからず、ステーションBに123.htmlがないことを示しているため、エラーが表示され、404応答が生成されます。
- 403禁止します
アクセスが拒否されました、許可のパフォーマンスはありません
ログインせずにGiteeのプライベートリポジトリにアクセスしようとしても、権限がないため拒否されません
- 405メソッドは許可されていません
一部のサーバーは必ずしもすべてのHTTPメソッドをサポートしているわけではありません。使用できないメソッドがある場合、405エラーが報告されます。
- 500内部サーバーエラー
サーバー内のコードにエラーがあり、クラッシュすることを意味します
- 504ゲートウェイのタイムアウト
サーバーの負荷が高すぎ、待機時間が長すぎ、タイムアウトが発生します
- 302一時的に移動
一時的なリダイレクトとは、リソースが元々存在しているが、その場所が一時的に変更されていることを意味します。ページにログインする場合によく見られます。ログインが成功すると、自動的にホームページにジャンプします。
応答ヘッダーには、ジャンプ先のページを示すLocationフィールドが含まれます
転送電話サービスを比較したほうがいいです。携帯電話番号を変更してサービスを処理すると、誰かが前の番号にダイヤルすると、新しい番号に直接転送されます。
- 301永久に移動
永続的なリダイレクトでは、[場所]フィールドを使用して、ジャンプ先の新しいアドレスを示します。一時的なリダイレクトとは異なり、後続のリクエストは新しいアドレスに変更されます。
ステータスコードの概要:
- 1XX:受信したリクエストは処理中です(後で続行)
- 2XX:リクエストは正常に処理されました(成功)
- 3XX:リクエストを完了するために必要な追加のアクション(リダイレクト)
- 4XX:サーバーはリクエストを処理できませんでした(クライアントリクエストに問題がありました)
- 5XX:サーバーでリクエストの処理中にエラーが発生しました(サーバーに問題があります)
2.2応答「ヘッダー」(ヘッダー)
基本的な形式は、リクエストのヘッダーに似ています
コンテンツ-応答に入力します。
- text / html(本文のデータはHTML形式です)
- text / css(本文のデータはCSSです)
- application / javascript(本文のデータはJS形式です)
- application / json(本文のデータはJSON形式です)
2.3応答の本文(本文)
空白行の後のコンテンツは本文であり、空の文字列にすることができます。存在する場合、その長さはContent-Lengthで識別され、タイプはContent-Typeで識別されます。
終了!