LoginSignup
2
1

More than 5 years have passed since last update.

RFC 7239 - Forwarded HTTP Extension を掻い摘んでみる

Last updated at Posted at 2018-09-09

何の情報?

RFC 7239でHTTPのForwardedヘッダを調べた時の記録。
日本語訳したわけではなく、情報をかいつまんで整理したもの。

Introductoin

近年、HTTPで通信する際にproxyが通信経路に含まれることが多い。
proxyが通信経路に含まれると、HTTPサーバに到達するパケットの送信元IPアドレスは、実際のリクエストを送信したクラアントではなく、proxyのものになってしまう。
そのため、以下のような機能をHTTPサーバで利用しようとした際に、期待通り動作しない可能性がある。

  • アクセス分析などを目的とした統計情報収集
  • IPアドレスによるアクセス制御
  • 不正利用の検出

Forwardedヘッダは、proxyによって隠蔽されたクライアントIPなどの情報を得るために利用される。同様の情報を提供する下記の非標準ヘッダもあるが、Forwardedヘッダはこれらのヘッダ情報が統合されたイメージ。

X-Forwarded-For
X-Forwarded-By
X-Forwarded-Proto

Forwarded HTTP Header Field

ForwardedヘッダはOPTIONALなHTTPリクエストヘッダで、forwarding proxyやreverse proxyに適用する。セキュリティを考慮して、デフォルトはOFFにすべき。
Forwardedヘッダには例えば以下の情報が含まれる。

  • リクエストの送信元IPアドレス
  • proxy上でリクエストを受け付けるIPアドレス
  • HTTP, HTTPSなどのスキーム

通信経路上にproxyが複数含まれる場合、各proxyで上記の情報を追加、削除することができる(必須ではない)。

ForwardedヘッダのABNF syntax

RFC7239から引用
Forwarded   = 1#forwarded-element

forwarded-element = [ forwarded-pair ] *( ";" [ forwarded-pair ] )

forwarded-pair = token "=" value
value          = token / quoted-string

token = <Defined in [RFC7230], Section 3.2.6>
quoted-string = <Defined in [RFC7230], Section 3.2.6>
  • 複数のforwarded-pairを含めることがでる
  • 各forwarded-pairは;区切り
  • forwarded-pairはtokenとvalueを=で連結したもの
  • パラメータ名(token)は大文字/小文字の区別なし

パラメータ名には下記4種類を指定可能。

パラメータ名 概要
by リクエストを受信したproxyのinterface
for proxyにリクエストを送信したノード
host proxyへのリクエストに含まれるHohtヘッダ値
proto リクエストのプロトコル(http, httpsなど)

Forwardedヘッダ例

RFC7239から引用
Forwarded: for="_gazonk"
Forwarded: For="[2001:db8:cafe::17]:4711"
Forwarded: for=192.0.2.60;proto=http;by=203.0.113.43
Forwarded: for=192.0.2.43, for=198.51.100.17

proxyがForwardedヘッダ値を追加する場合、下記いずれかの方法がある。

  • 新規ヘッダ:HTTPヘッダの末尾に新たなForwardedヘッダを挿入
  • 同一ヘッダ:HTTPヘッダ内の最後のForwardedヘッダに,区切りで値を挿入

前述の通り、proxyはForwardedヘッダを削除することが可能。
また、Forwardedヘッダが複数存在する場合は、更新対象のForwardedヘッダを正確に選択しなければならない。

補足

Viaヘッダとの違い

Viaヘッダも似たような用途で利用されるが、Viaヘッダはproxy自体の情報を格納するためのものであり、クライアント情報は含まれない。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1