ネットワークスペシャリスト試験 令和5年午後1問題1
HTTPヘッダ
ネットワークスペシャリスト試験で取り扱われそうなHTTPヘッダを紹介します。
HTTP/1.1
Host: リクエストが送られる先のサーバーのドメイン名とポート番号を指定します。HTTP/1.1でのリクエストには必須です。
例: Host: www.example.com:80
Content-Type: リソースのMIMEタイプを指定します。
例:text/htmlやapplication/jsonなどです。
User-Agent: リクエストを生成したクライアントのアプリケーションタイプ、オペレーティングシステム、ソフトウェアのバージョンなどの情報を含みます。
Accept: クライアントが理解できるコンテンツタイプを指定します。例えば、text/plain、text/htmlなどです。
Cookie: サーバーからクライアントに送られたクッキーを、クライアントがサーバーに送り返します。ネットワークスペシャリストの過去問題でSet-cookieが出題されました。
例: Cookie: sessionId=abc123; preferences=dark_mode
Cache-Control: キャッシングメカニズムを制御するために使用されます。例えば、no-cacheやmax-age=0などがあります。
Authorization: サーバーへのアクセス認証に使用されるユーザー名とパスワードなどの認証情報を含みます。
Content-Length: リクエストやレスポンスのボディのサイズをバイト単位で指定します。
Accept-Encoding: クライアントが理解できるコンテンツエンコーディング(圧縮方法)を指定します。例えば、gzipやdeflateです。
Connection: 現在のトランザクションが完了した後に、ネットワーク接続をどう扱うかを指定します。keep-aliveやcloseが一般的な値です。
Strict-Transport-Security : HSTS(HTTP Strict Transport Security)と呼ばれ、ブラウザに対して、指定された期間、現在のドメインへのアクセスをHTTPSを通じて行うように指示します。
X-Forwarded-For : HTTPリクエストをプロキシやロードバランサーを経由して送信する際に、クライアントのIPアドレス情報を保持するために使用されます
例: X-Forwarded-For: 203.0.113.195 HTTP/2
HTTP/2には「擬似ヘッダフィールド」というものが追加されます。
:method: リクエストメソッド(GET、POSTなど)
:path: リクエスト対象のパス
:scheme: 使用されているスキーム(http、https)
:status: レスポンスのステータスコード
:authority: リクエストされたホスト名とポート番号
ALPN
ALPNはTLSの上位層のプロトコルを決定するために用いられるプロトコル
令和5年の問題に「ALPNとは何を目的に使用されるか」というような問題が挙げられた。
これに関しては回答のコツがあったと思う。
問題文のなかの「ALPN(Application-Layer Protocol Negotiation)」という総称から英単語を読み解いて
「アプリケーション層のプロトコルを決定するため」と回答するだけで部分を貰えたと思う。
ALPNは、TLSハンドシェイクの一部として機能します。クライアントは接続開始時に、サポートするアプリケーション層のプロトコルのリストをサーバーに送信します。サーバーはそのリストから1つのプロトコルを選択し、その選択をクライアントに通知します。このプロセスにより、接続の初期段階で両者が使用するプロトコルに合意することができます。
ALPNは、以前に使用されていたNPN(Next Protocol Negotiation)を置き換える形で導入されました。NPNも同様の目的で使用されていましたが、ALPNはTLSの標準に組み込まれ、より広く採用されています。
ALPNの利点は、特にHTTPS接続でHTTP/2やその他のプロトコルを効率的に選択し使用できるようにすることにあります。これにより、パフォーマンスの向上、レイテンシの削減、より効率的なリソースの利用が可能になります。また、セキュリティを強化するTLSの枠組み内で動作するため、安全な通信が保証されます。
HTTPのメソッド
HTTPのメソッドとは、サーバにあるリソース(ホームページ等)に対して「何をして欲しいか」の情報を表現しています。
メソッド
GET : このページを「読み取り」
POST : このページを「アップロード」
PUT : このページを「更新して」
Delete : このページを「削除して」
上記のような動詞が例えとして挙げられると思います。
HTTP/1.1の場合は、リクエストスタートラインという場所にメソッドが含まれます。
HTTP/2の場合は、ページの最初の方で説明した「ヘッダ」の中に含まれます。
HTTPパイプライン
HTTPパイプラインの特徴
非同期リクエストの送信: HTTPパイプラインを使用すると、クライアントは複数のHTTPリクエストを連続してサーバーに送信できますが、前のリクエストに対するレスポンスを待たずに次のリクエストを送ることができます。
順序性: しかし、サーバーはリクエストを受信した順番でレスポンスを返す必要があります。これにより、クライアントは送信したリクエストの順序に対応するレスポンスを受け取ることが保証されます。
HTTPパイプラインの制約
ヘッド・オブ・ライン・ブロッキング: パイプラインの主な問題点は、ヘッド・オブ・ライン・ブロッキングです。先頭のリクエストの処理が遅れると、後続の全てのレスポンスも遅延します。これは、HTTP/1.1がリクエストとレスポンスの順序を保持する必要があるためです。
サーバーとクライアントの両方がサポートする必要: さらに、パイプラインを効果的に使用するには、サーバーとクライアントの両方がHTTPパイプラインを適切にサポートしている必要があります。不完全な実装やネットワークの問題がパイプラインの利点を相殺することがあります。
結論
HTTP/1.1のパイプラインは、理論的にはネットワーク効率を向上させることができますが、実際にはヘッド・オブ・ライン・ブロッキングの問題やサポートの不完全さにより、その利点が限定的であることが多いです。これらの問題を解決するため、HTTP/2ではストリームとマルチプレクシングが導入され、複数のリクエストとレスポンスが同一の接続上で独立して並行して処理されるようになりました。これにより、HTTP/1.1におけるパイプラインの制約を克服しています。
コメントや要望があれば、下記のツイッターにDMをください。
Tweets by wallofmind2
Tweets by wallofmind2