JavaRush /Java Blog /Random-JA /パート 3. HTTP/HTTPS プロトコル

パート 3. HTTP/HTTPS プロトコル

Random-JA グループに公開済み
この資料は「エンタープライズ開発入門」シリーズの一部です。以前の記事: こんにちは!今日は、HTTP プロトコルと HTTPS プロトコルについて理解します。ただし、最初に 1 つの点を明確にしておきます。これは、OSI モデルのアプリケーション層におけるネットワーク上のデータ転送プロトコルについて話しているということです。覚えているとおり、以前の記事の 1 つで OSI モデルについて説明しました。覚えていない場合は、ここにありますパート 3. HTTP/HTTPS プロトコル - 1

データ転送プロトコルとは何ですか

これは、さまざまなサービスの開発者が単一の形式で情報を送信するための、一般的に受け入れられている契約に付けられた名前です。たとえば、Google Chrome を使用すると、Facebook と Twitter の両方から情報を取得できます。これは、開発者が標準の HTTP プロトコルを使用して情報を送信し、ブラウザがそれを処理できるためです。統一ルールは、サーバー側の開発者自身にとっても非常に便利です。情報を変換し、必要なプロトコルを使用して送信できるライブラリが多数あります。HTTP は元々、HTML ページを転送するためのプロトコルとして考案されました。これは長い間そうでしたが、現在ではプログラマーは文字列とメディア ファイルの両方をそれを介して転送することがよくあります。全体として、このプロトコルは多用途かつ柔軟であり、非常に使いやすいです。では、これを行う方法を考えてみましょう。

HTTPの構造

HTTP プロトコルはテキストのみで構成されていることにすぐに注目してください。さて、私たちが最も興味があるのは、このテキストが配置されている構造です。各メッセージは次の 3 つの部分で構成されます。
  1. 開始ライン - サービス データを定義します。
  2. ヘッダー - メッセージパラメータの説明。
  3. メッセージ本文 (Body) - メッセージ データ。見出しと空白行で区切る必要があります。
HTTP プロトコルを使用すると、サーバーにリクエストを送信し (リクエスト)、サーバーから応答を受信します (レスポンス)。リクエストとレスポンスにはわずかに異なるパラメータがあります。

単純な HTTP リクエストはどのようなものですか

GET / HTTP/1.1
Host: javarush.com
User-Agent: firefox/5.0 (Linux; Debian 5.0.8; en-US; rv:1.8.1.7)
開始行には次の内容が含まれます。
  • GET - リクエストメソッド。
  • / — リクエストパス (パス);
  • HTTP/1.1 - データ転送プロトコルのバージョン。
次に、見出しに従います。
  • ホスト— リクエストの宛先となるホスト。
  • User-Agent は、リクエストを送信するクライアントです。
メッセージ本文はありません。HTTP リクエストでは、開始行と Host ヘッダーのみが必要です。それでは、すべてを順番に見てみましょう。HTTP リクエストには何らかのメソッドが含まれている必要があります。それらは合計 9 つあります: GET、POST、PUT、OPTIONS、HEAD、PATCH、DELETE、TRACE、CONNECT。最も一般的なのは GET と POST です。最初はこの 2 つの方法で十分です。 GET - サーバーからコンテンツをリクエストします。したがって、GET メソッドを使用したリクエストにはメッセージ本文がありません。ただし、必要に応じて、次の形式のパスを介してパラメータを送信できます: https://cdn.javarush.com/images/article/155cea79-acfd-4968-9361-ad585e939b82/original.pngsend?name1=value1&name2=value2 ここ: javarush .com — ホスト、 /send — リクエスト パス、 ? — リクエストパラメータが続くことを示す区切り文字。最後に、パラメーターがキー=値の形式でアンパサンドで区切られてリストされます。 POST - サーバー上に情報を公開します。POST リクエストでは、key=value 形式のパラメーター、JSON、HTML コード、さらにはファイルなど、さまざまな情報を転送できます。すべての情報はメッセージの本文で送信されます。例えば:
POST /user/create/json HTTP/1.1
Accept: application/json
Content-Type: application/json
Content-Length: 28
Host: javarush.com

{
  "Id": 12345,
  "User": "John"
}
リクエストは javarush.com/user/create/json に送信されます。プロトコルのバージョンは HTTP/1.1 です。Accept はクライアントが受信を期待する応答形式を指定し、Content-Type はメッセージ本文が送信される形式を指定します。Content-Length - 本文の文字数。HTTP リクエストにはさまざまなヘッダーを含めることができます。詳細については、プロトコル仕様を参照してください。

HTTP 応答

リクエストを受信した後、サーバーはそれを処理し、クライアントに応答を送信します。
HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Content-Length: 98

<html>
  <head>
    <title>An Example Page</title>
  </head>
  <body>
    <p>Hello World</p>
  </body>
</html>
応答の開始行には、プロトコル バージョン (HTTP/1.1)、ステータス コード (200)、ステータスの説明 (OK) が含まれます。見出しはコンテンツの種類と長さを示します。応答の本文には、ブラウザが HTML ページに描画する HTML コードが含まれています。

応答ステータスコード

メッセージ本文とヘッダーを見ればすべてが明らかですが、ステータス コードについて少し述べておく価値があります。応答ステータス コードは常に 3 桁で、コードの最初の桁は応答のカテゴリを示します。
  • 1xx - 情報。リクエストは受信されており、サーバーは続行する準備ができています。
  • 2xx - 成功しました。リクエストは受信され、理解され、処理されています。
  • 3xx - リダイレクト。リクエストを処理するには、次の手順を実行する必要があります。
  • 4xx - クライアント エラー。リクエストにエラーが含まれているか、プロトコルに準拠していません。
  • 5xx - サーバーエラー。リクエストは正しく作成されましたが、サーバーはリクエストを処理できませんでした。
コードの 2 桁目と 3 桁目は、答えの詳細を示します。例えば:
  • 200 OK — リクエストは受信され、正常に処理されました。
  • 201 Created — リクエストが受信されて正常に処理され、新しいリソースまたはそのインスタンスが作成されました。
  • 301 Moved Permanently - 要求されたリソースは永久に移動されたため、それ以降の要求は新しいアドレスで行われる必要があります。
  • 307 一時リダイレクト - リソースは一時的に移動されました。現時点では、自動リダイレクトを使用してアクセスできます。
  • 403 禁止 - リクエストは明確ですが、承認が必要です。
  • 404 Not Found - サーバーはこのアドレスでリソースを見つけられませんでした。
  • 501 未実装 - サーバーは、このリクエストに応答する機能をサポートしていません。
  • 505 HTTP バージョンがサポートされていません - サーバーは、指定されたバージョンの HTTP プロトコルをサポートしていません。
応答ステータス コードに加えて、ステータスの説明も送信されるため、特定のステータスが何を意味するかを直感的に理解できます。HTTP プロトコルは非常に実用的です。HTTP プロトコルには多数のヘッダーが用意されており、これを使用してクライアントとサーバー間の柔軟な通信をセットアップできます。すべてのリクエストとレスポンスのヘッダー、リクエスト メソッド、およびレスポンス ステータス コードを 1 つの記事で考慮することはできません。必要に応じて、すべてのニュアンスが説明されている公式プロトコル仕様を読むことができます。HTTP プロトコルは通常、ポート 80 で使用されるため、ポート 80 で終わるアドレスが表示された場合は、HTTP 経由でアクセスする必要があることがわかります。テクノロジーの発展とインターネット上での個人データの活発な移動に伴い、クライアントがサーバーに送信する情報をさらに保護する方法を考える必要がありました。その結果、HTTPS プロトコルが誕生しました。

HTTPSとHTTPの違いは何ですか

HTTPS は構文的に HTTP プロトコルと同じです。つまり、同じ開始行とヘッダーを使用します。唯一の違いは、追加の暗号化とデフォルトのポート (443)です。HTTPS は、HTTP と TCP の間、つまりアプリケーション層とトランスポート層の間で暗号化されます。それが何であるかを忘れた場合は、 OSI モデルに関する記事を参照してください。最新の暗号化標準は TLS です。このトピックについては深く掘り下げませんが、情報がトランスポート層に到達する前に暗号化が行われることに注意してください。HTTPS は、リクエストの送信先となるホストとポートを除くすべての情報を完全に暗号化します。HTTP ではなく HTTPS プロトコルを使用するようにサーバーを切り替えるには、サーバー コードを変更する必要はありません。この機能はサーブレット コンテナで有効になります。これについては次の記事で説明します。それが今日のすべてです。ただし、待ってください。HTTP リクエストを検知するには、Google Chrome を開き、F12 キーを押して、[ネットワーク] タブを選択します。ブラウザによって送受信されたすべてのリクエストとレスポンスがここに表示されます。 パート 4. Maven の基本 パート 5. サーブレット。単純な Web アプリケーションの作成 パート 6. サーブレット コンテナー パート 7. MVC (Model-View-Controller) パターンの紹介 パート 8. 小さな Spring-Boot アプリケーションの作成
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION