HTTPとは何ですか?
一般的なネットワークはTCP/IP
プロトコル スイートに基づいて動作し、HTTP はそのサブセットです。http は tcp プロトコルをベースにしており、ヘッダーである tcp をベースにいくつかの仕様が追加されています。http を学ぶということは、各ヘッダーが何をするのかを学ぶことです。
TCP/IP プロトコル ファミリ
簡単に言うと、プロトコルとは、通信中に誰がリクエストを開始するか、リクエストをどのように終了するか、どのように通信するかなどの通信ルールです。総称してインターネット関連プロトコルと呼ばれますTCP/IP
。
プロトコル階層化
OSI (Open System Interconnection Open System Interconnection Reference Model) は、ネットワーク相互接続の 7 層モデルを定義しています。
- 物理層: 通信デバイスとネットワーク メディア間の相互接続を管理します。
- データ リンク層: メディア アクセスとリンク管理を提供します。
- ネットワーク層: IP アドレスの選択とルーティング。
- トランスポート層:データ通信。
- セッション層: セッションを作成、管理、維持します。
- プレゼンテーション層: データのエンコード、フォーマット変換、およびデータの暗号化。
- アプリケーション層: アプリケーションまたはユーザーのリクエストに対してさまざまなリクエスト サービスを提供します。
以下に示すように:
実装すると、通常は次の 4 つの層に階層化されます。
- リンク層 (物、数字): ネットワーク接続のハードウェア部分
- ネットワーク層:IPにより伝送経路を選択(IPアドレスとMACアドレス経由)(MACアドレスとの通信にはARPプロトコルを使用)
- トランスポート層: TCP プロトコル (信頼性)、UDP プロトコル、データ送信 (HTTP -> TCP、DNS -> UDP)
- アプリケーション層(会議、テーブル、応答):HTTP、FTP、DNS(他のコンピュータと通信するアプリケーションサービス、ユーザーにアプリケーションサービスを提供する際の通信活動)
アクセスページ処理TCP/IP
通信プロトコル:
- DNS プロトコルを通じてドメイン名を解決し、対応する IP アドレスを取得します。
- HTTP プロトコルを介してデータを転送し、ターゲット Web サーバーへの HTTP 要求メッセージを生成します。
- 通信を容易にするために、HTTP リクエスト メッセージは TCP プロトコルを通じてメッセージ セグメントに分割され、シリアル番号に従って複数のメッセージ セグメントに分割され、各メッセージ セグメントが確実に相手に送信されます。
- IPプロトコルで相手のアドレスを検索し、転送しながら送信します
- TCPプロトコルを通じて相手から受信したメッセージセグメントを再組み立てした後、シーケンス番号に従って元の順序でリクエストメッセージを再組み立てする
- HTTPプロトコルを介したWebサーバーリクエストのコンテンツ処理
HTTP機能
サーバーを作成するには、特定の IP アドレス、ポート番号、クライアントからサーバーに送信される要求オブジェクト、およびサーバーからクライアントに送信される応答オブジェクトが必要です。
- デフォルトでステートレス: http は状態を保存しないプロトコルであり、Cookie を使用して状態を管理できます。
- http(1.1) はキープアライブを使用します。接続は切断されず、リンクが維持され、各リクエストによって引き起こされる TCP リンクの不必要な確立と切断を防ぎます。
- デフォルトのパイプライン: 以前は、リクエストを送信した後、次のリクエストを送信する前に応答を受信する必要がありましたが、現在はすべてパイプライン化されており、同時リクエストを行うことができます。
HTTP の欠点
- 平文でのコミュニケーション
- 通信相手の身元を確認しない
- コンテンツの完全性が検証できない(コンテンツが改ざんされている可能性がある)(httpsで扱える)
HTTPメソッド
リクエスト方法:
- GET: URLを介してデータを渡します
- POST: リクエストボディ転送データ
道具
- 郵便配達員: (ビジュアルリクエストツール)
- curl: git のインストールが必要です (コマンドライン)
RESTFULスタイル:仕様ではありませんが、さまざまなリクエストメソッドに応じたサーバーリソースの運用を実現するためのものです
- get: データをリクエストする
- 投稿: データを増やす
- 削除:データを削除します
- put: データを変更する
- オプション: プリフライト リクエスト (デフォルトでは、ドメイン間でオプション リクエストを送信できます)
単純なリクエスト: get と post は単純なリクエストです
複雑なリクエスト: get および post にカスタム ヘッダーを追加すると、複雑なリクエストになります。他のメソッドはすべて複雑なリクエストです。複雑なリクエストが送信される場合、デフォルトではオプションリクエストが最初に送信されます。
クロスドメイン: プロトコル、ドメイン名、ポート番号が等しくない場合は、クロスドメインです。
クロスドメインを解決する一般的な方法:
- cors (サーバーはクロスドメインを解決し、クロスドメイン ヘッダーを追加します)
- jsonp
- nginx(リバースプロキシ)
- ウェブソケット
クロスドメインを解決する一般的ではない方法:
- iframe
- 投稿メッセージ
- ウィンドウ名
- ドキュメント.ドメイン
- location.hash
HTTPステータスコード
- 101:ウェブソケット
- 2xx
- 200: 成功
- 204: 成功しましたが、応答本文がありません
- 206: ブレークポイント再開(データの一部を返す)
curl -v --header Range:bytes=0-1024 www.baidu.com
- 3xx
- 301: 永続的なリダイレクト
- 302: 一時的なリダイレクト
- 304: サーバーキャッシュ
- 307: リダイレクト (POST を GET に変換しません)
- 4xx
- 400: クライアントパラメータが正しくありません
- 401: 権限なし、ログインなし
- 403: 許可がありません、許可なくログインします
- 404お探しのページが見つかりませんでした
- 405: サーバーはこのメソッドをサポートしていません 許可されていないメソッド
- 5xx
- 500: サーバーの問題
- 502: 負荷分散に問題があります
- 503: サーバーがエラーを報告しました
メッセージ
要求されたメッセージ
- リクエスト行:リクエストメソッド、リクエストパス(ハッシュを除く)、httpバージョン番号(
?
パラメータを渡すことができます)が含まれます - リクエストヘッダー: データ、カスタムヘッダーを渡すこともできます
- リクエストボディ: データを配置したり、データバイナリを転送したりできます...
応答メッセージ
- 応答行: http のバージョン、ステータス コード、応答フレーズ
- 応答ヘッダー: カスタム応答情報
- レスポンスボディ: ブラウザに返されるコンテンツ