Skip to content

CloudFront で付与したカスタムヘッダの、オリジンでの見え方

CloudFront ではカスタムヘッダを追加することも可能です。 今回は「カスタムヘッダを追加しない場合」「追加した場合」、各々のケースでどのようにリクエスト・レスポンスの見え方が異なるのか、メモしておきます。

カスタムヘッダ無し

検証環境

クライアントから CloudFront 経由でオリジンへアクセスします。 CloudFront の設定はほぼデフォルトですが、検証し易くする為、キャッシュしないようにキャッシュポリシーを変更しています。

file

クライアントからの HTTP リクエスト送信には xh を使いました。 xh の基本的な利用方法は以前に CLI の HTTP クライアントである xh の基本的な使い方 というメモを書きました。 今回、具体的には以下のように実行します。

xh --print=HBhb https://cloudfront.example.com/

クライアント側での見え方

クライアント側でのリクエスト・レスポンスの見え方は以下の通りです。

リクエスト

GET / HTTP/1.1
Accept: */*
Accept-Encoding: gzip, deflate, br, zstd
Connection: keep-alive
Host: cloudfront.example.com
User-Agent: xh/0.24.0

レスポンス

HTTP/2.0 200 OK
accept-ranges: bytes
content-length: 14
content-type: text/html; charset=UTF-8
date: Tue, 25 Feb 2025 22:32:16 GMT
etag: "e-62eb5c4a91c85"
last-modified: Sat, 22 Feb 2025 07:08:03 GMT
server: Apache/2.4.62 (Amazon Linux)
via: 1.1 af457ba15a82a147c22b94a85de74088.cloudfront.net (CloudFront)
x-amz-cf-id: -5ZWB2l9KCeESF2HRnAZ5z00N3aEQjSdGJxXYzG4wpuzotLDc_LAlg==
x-amz-cf-pop: NRT12-C5
x-cache: Miss from cloudfront

Hello, World!

オリジン側での見え方

オリジン側でのリクエスト・レスポンスの見え方は以下の通りです。

リクエスト

Hypertext Transfer Protocol
    GET / HTTP/1.1\r\n
        Request Method: GET
        Request URI: /
        Request Version: HTTP/1.1
    Host: cloudfront.example.com\r\n
    X-Forwarded-For: 217.178.129.208\r\n
    Accept-Encoding: gzip, deflate, br, zstd\r\n
    Accept: */*\r\n
    X-Amz-Cf-Id: -5ZWB2l9KCeESF2HRnAZ5z00N3aEQjSdGJxXYzG4wpuzotLDc_LAlg==\r\n
    Connection: keep-alive\r\n
    User-Agent: xh/0.24.0\r\n
    Via: 2.0 af457ba15a82a147c22b94a85de74088.cloudfront.net (CloudFront)\r\n
    \r\n
    [Full request URI: http://cloudfront.example.com/]

レスポンス

Hypertext Transfer Protocol
    HTTP/1.1 200 OK\r\n
        Response Version: HTTP/1.1
        Status Code: 200
        [Status Code Description: OK]
        Response Phrase: OK
    Date: Tue, 25 Feb 2025 22:32:16 GMT\r\n
    Server: Apache/2.4.62 (Amazon Linux)\r\n
    Last-Modified: Sat, 22 Feb 2025 07:08:03 GMT\r\n
    ETag: "e-62eb5c4a91c85"\r\n
    Accept-Ranges: bytes\r\n
    Content-Length: 14\r\n
        [Content length: 14]
    Keep-Alive: timeout=5, max=100\r\n
    Connection: Keep-Alive\r\n
    Content-Type: text/html; charset=UTF-8\r\n
    \r\n
    [Request in frame: 1]
    [Time since request: 0.000437000 seconds]
    [Request URI: /]
    [Full request URI: http://cloudfront.example.com/]
    File Data: 14 bytes
Line-based text data: text/html (1 lines)
    Hello, World!\n

カスタムヘッダ有り

検証環境

先ほど同様、クライアントから CloudFront 経由でオリジンへアクセスします。 但し、CloudFront で以下のカスタムヘッダを挿入するように設定します。

ヘッダ
amz-cf-origin-token 1234567890ABCDEF

file

CloudFront でのカスタムヘッダ設定

カスタムヘッダを挿入する為、CloudFront ディストリビューションで設定を行います。 ディストリビューションのオリジンを選択し、編集 をクリックします。

file

ヘッダーを追加 をクリックします。

file

カスタムヘッダーを追加 - オプション からヘッダを追加します。 今回は以下を設定します。

ヘッダ
amz-cf-origin-token 1234567890ABCDEF

設定が完了したら 変更を保存 をクリックします。

file

これで CloudFront を経由した際、CloudFront → オリジンへの通信にはカスタムヘッダが挿入されるようになりました。

クライアント側での見え方

クライアント側でのリクエスト・レスポンスの見え方は以下の通りです。

リクエスト

GET / HTTP/1.1
Accept: */*
Accept-Encoding: gzip, deflate, br, zstd
Connection: keep-alive
Host: cloudfront.example.com
User-Agent: xh/0.24.0

レスポンス

HTTP/2.0 200 OK
accept-ranges: bytes
content-length: 14
content-type: text/html; charset=UTF-8
date: Sat, 01 Mar 2025 03:23:37 GMT
etag: "e-62eb5c4a91c85"
last-modified: Sat, 22 Feb 2025 07:08:03 GMT
server: Apache/2.4.62 (Amazon Linux)
via: 1.1 16a35f2b2822aee977100c01186bf17c.cloudfront.net (CloudFront)
x-amz-cf-id: gq25tgHOlYi4Ovv21jUEM8BOTdCl3xQx7Wth0XR1BnRwqKCYKZwQvg==
x-amz-cf-pop: NRT12-C5
x-cache: Miss from cloudfront

Hello, World!

オリジン側での見え方

オリジン側でのリクエスト・レスポンスの見え方は以下の通りです。

リクエスト

オリジン側で受信した HTTP リクエストを確認するとカスタムヘッダが挿入されていることが分かります。

Hypertext Transfer Protocol
    GET / HTTP/1.1\r\n
        Request Method: GET
        Request URI: /
        Request Version: HTTP/1.1
    Host: cloudfront.example.com\r\n
    Connection: keep-alive\r\n
    Accept-Encoding: gzip, deflate, br, zstd\r\n
    amz-cf-origin-token: 1234567890ABCDEF\r\n
    Accept: */*\r\n
    X-Forwarded-For: 217.178.129.208\r\n
    User-Agent: xh/0.24.0\r\n
    Via: 2.0 16a35f2b2822aee977100c01186bf17c.cloudfront.net (CloudFront)\r\n
    X-Amz-Cf-Id: gq25tgHOlYi4Ovv21jUEM8BOTdCl3xQx7Wth0XR1BnRwqKCYKZwQvg==\r\n
    \r\n
    [Full request URI: http://cloudfront.example.com/]

レスポンス

Hypertext Transfer Protocol
    HTTP/1.1 200 OK\r\n
        Response Version: HTTP/1.1
        Status Code: 200
        [Status Code Description: OK]
        Response Phrase: OK
    Date: Sat, 01 Mar 2025 03:23:37 GMT\r\n
    Server: Apache/2.4.62 (Amazon Linux)\r\n
    Last-Modified: Sat, 22 Feb 2025 07:08:03 GMT\r\n
    ETag: "e-62eb5c4a91c85"\r\n
    Accept-Ranges: bytes\r\n
    Content-Length: 14\r\n
        [Content length: 14]
    Keep-Alive: timeout=5, max=100\r\n
    Connection: Keep-Alive\r\n
    Content-Type: text/html; charset=UTF-8\r\n
    \r\n
    [Request in frame: 1]
    [Time since request: 0.000461000 seconds]
    [Request URI: /]
    [Full request URI: http://cloudfront.example.com/]
    File Data: 14 bytes
Line-based text data: text/html (1 lines)
    Hello, World!\n