🦓

httpについて

2023/06/20に公開

はじめに

httpの仕組みについて理解していきます。

httpとは

HTTP(HyperText Transfer Protocol)は、Web上でデータを送受信するためのプロトコルです。HTTPはクライアントとサーバー間の通信を可能にし、Webページの表示やファイルの送受信など、インターネット上の様々な情報のやり取りに使用されます。

以下にHTTPの基本的な機能と動作について説明します。

1. クライアントとサーバー:

HTTPはクライアントとサーバーの間で通信が行われます。クライアントはWebブラウザのようなHTTPクライアントソフトウェアであり、ユーザーが操作する側です。一方、サーバーはWebサイトやWebアプリケーションをホストするコンピューターであり、クライアントからの要求に応答します。

2. リクエストとレスポンス:

HTTPでは、クライアントがサーバーに対してリクエストを送信し、サーバーはそれに応じてレスポンスを返します。リクエストは主に以下の要素から構成されます:

  • メソッド(GET、POST、PUT、DELETEなど):実行したい操作の種類を示します。
  • パス(URL):要求するリソースの場所を指定します。
  • ヘッダー:追加のメタデータや情報を含みます。
  • ボディ(オプション):リクエストに含めるデータやコンテンツです。

サーバーはリクエストを受け取り、処理して適切なレスポンスを生成します。レスポンスは主に以下の要素から構成されます:

  • ステータスコード:リクエストの結果を示す数値です(例: 200 OK、404 Not Found)。
  • ヘッダー:レスポンスに関する情報やメタデータを含みます。
  • ボディ(オプション):レスポンスに含まれるデータやコンテンツです(例: HTMLページのコンテンツ)。

3. ステートレス性:

HTTPはステートレスプロトコルであり、個々のリクエストとレスポンスは独立しています。これは、前のリクエストやセッションに関する情報を持たないことを意味します。したがって、各リクエストは必要な情報を完全に含んでいる必要があります。

4. セキュリティ:

HTTP自体はセキュアではなく、データが暗号化されないため、悪意のある第三者によって盗聴や改ざんされる可能性があります。このため、HTTPのセキュリティ強化版であるHTTPS(HTTP Secure)が一般的に使用されます。HTTPSでは、SSL(Secure Sockets Layer)またはTLS(Transport Layer Security)と呼ばれるプロトコルを使用して通信を暗号化し、セキュリティを向上させます。

HTTPはWebの基盤となる重要なプロトコルであり、クライアントとサーバーの間でのデータのやり取りに使用されます。Webページの表示やデータの送受信を含むさまざまなWebアプリケーションはHTTPを利用しています。

google.comにアクセスする時の手順

Google.comへのアクセス時のHTTPの仕組みを見ていきます。

1. DNSの解決(DNS lookup):

最初に、クライアント(ブラウザ)はGoogle.comのIPアドレスを知る必要があります。クライアントは自身のコンピューターに設定されたDNSサーバーに問い合わせ、ドメイン名「google.com」に対応するIPアドレスを取得します。これにより、クライアントはGoogleのサーバーのIPアドレスを特定します。

2. 接続の確立:

クライアントは取得したIPアドレスを使用して、Googleのサーバーに対してTCP/IP接続を確立します。これにより、クライアントとGoogleのサーバー間でデータの送受信が可能となります。

3. HTTPリクエストの送信:

クライアントは、確立した接続を介してHTTPリクエストをGoogleのサーバーに送信します。リクエストには、メソッド(通常はGET)、パス("/"など)、ヘッダー(オプション)、およびボディ(通常は空)が含まれます。リクエストには、Google.comの特定のページにアクセスするための情報が含まれます。

4. サーバーの処理:

Googleのサーバーは、受け取ったHTTPリクエストを解釈し、要求されたリソースを処理します。これには、WebページのHTMLコンテンツの生成や、必要に応じてデータベースや他のサービスとのやり取りが含まれます。

5. HTTPレスポンスの受信:

サーバーは処理した結果を含むHTTPレスポンスを生成し、それをクライアントに返します。レスポンスには、ステータスコード(例: 200 OK)、ヘッダー、およびレスポンスのボディ(HTMLコンテンツ)が含まれます。

6. データの表示:

クライアントは受信したHTTPレスポンスを受け取り、ブラウザなどのソフトウェアを使用して、HTMLコンテンツを表示します。ユーザーはその結果としてGoogle.comのウェブページを閲覧することができます。

これにより、クライアントとサーバー間でデータのやり取りが行われ、Webページの表示や情報の取得が可能となります。

[Client]                                              [Server]
    |                                                      |
    |   GET / HTTP/1.1                                     |
    |   Host: google.com                                   |
    |   User-Agent: Your_User_Agent                        |
    |   Accept: text/html,application/xhtml+xml,*/*        |
    |   ...other headers...                                |
    |----------------------------------------------------->|
    |                                                      |
    |                  HTTP/1.1 200 OK                     |
    |                  Content-Type: text/html             |
    |                  Content-Length: ...                 |
    |                  ...other headers...                 |
    |<-----------------------------------------------------|
    |                                                      |
    |                   HTML Content                       |
    |                                                      |
    |<-----------------------------------------------------|
    |                                                      |

HTTPリクエストとレスポンス

HTTPリクエストとレスポンスは、ヘッダーと呼ばれるメタデータのセットを含みます。HTTPリクエストヘッダーとレスポンスヘッダーの一般的な要素とその目的を説明していきます。

HTTPリクエストヘッダー:

  1. Host: リクエストが送信される対象のホスト名を指定します。例えば、"Host: google.com"となります。
  2. User-Agent: クライアントアプリケーションやブラウザの情報を提供します。サーバーはこれを使用して、要求元を識別することができます。
  3. Accept: クライアントが受け入れ可能なコンテンツタイプを示します。例えば、"Accept: text/html"はHTMLコンテンツを受け入れることを示します。
  4. Content-Type: リクエストボディに含まれるデータのメディアタイプを指定します。例えば、"Content-Type: application/json"はJSON形式のデータを送信することを示します。
  5. Authorization: 認証情報を含めるために使用されます。例えば、"Authorization: Bearer <token>"といった形式でアクセストークンを送信します。

HTTPレスポンスヘッダー:

  1. Status Code: レスポンスの結果を示す数値です。例えば、200は成功、404はページが見つからないことを示します。
  2. Content-Type: レスポンスボディのメディアタイプを示します。例えば、"Content-Type: text/html"はHTMLコンテンツを含んでいることを示します。
  3. Content-Length: レスポンスボディのサイズをバイト単位で示します。
  4. Set-Cookie: サーバーからのクッキー情報をクライアントに送信します。クライアントはこれを保存し、後続のリクエストで使用します。
  5. Location: リダイレクト時に使用され、リダイレクト先のURLを示します。

これらはHTTPリクエストとレスポンスのヘッダーの一部ですが、さまざまな目的に使用されるヘッダーがあります。ヘッダーはリクエストやレスポンスの詳細な制御や情報の伝達を可能にし、クライアントとサーバー間の通信を効果的に行うのに役立ちます。

終わりに

どこに(URL)、何を(ページ、テキスト、画像、動画など)、どうやって(HTTPメソッド)の三つの情報に対してやり取りのできる仕組みはhttpです。
Web(ブラウザ)はHTTPリクエストを送ることと、HTTPレスポンスをわかりやすく表示するためのツールとして覚えていきましょう。

https://developer.mozilla.org/ja/docs/Web/HTTP/Basics_of_HTTP
https://wa3.i-3-i.info/word1841.html

Discussion