🔖
API GatewayのHTTPプロキシ統合のURL・リクエストヘッダーを眺める
API GatewayのHTTPプロキシ統合の設定ごとのリクエストヘッダー・URLの値を眺めます。
パターン
- リソースパスが
/
(HTTP統合) - リソースパスが
/{myProxy+}
- リソースパスが
/{myProxy+}
& CORSを有効に設定
準備
API Gatewayの裏側はVPC_LINK → NLB → Flaskのアプリ@ECSの構成です。
Flaskのアプリはこちら。リクエストヘッダーを返すだけの簡単な構成です。
/
(HTTP統合)
1. リソースパスが http://example.com/
X-Amzn-Apigateway-Api-Id: fc5vwzacp2
X-Amzn-Trace-Id: Root=1-5c5fb0f2-843387cadeadbf4c9d3c9036
User-Agent: AmazonAPIGateway_fc5vwzacp2
Accept: application/json
Host: example.com
Connection: Keep-Alive
次に登場するHTTPプロキシ統合よりヘッダーの要素数が少ないです。
ちなみに /
しか指定していない状態で /hoge
にアクセスすると、↓のようなエラーで失敗します。/
≠ワイルドカードなんですね。
{"message":"Missing Authentication Token"}
{myProxy+}
2. リソースパスが http://example.com/hoge
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate, br
Accept-Language: en,en-US;q=0.9,ja;q=0.8
Cache-Control: max-age=0
Cookie: s_pers=%20s_vnum%3D1546597042049%2526vn%253D1%7C1546597042049%3B%20s_invisit%3Dtrue%7C1544007119025%3B%20s_nr%3D1544005319028-Repeat%7C1551781319028%3B
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36
X-Amzn-Trace-Id: Root=1-5c5fb581-c2979900f0d0ce0267df3340
X-Forwarded-For: 114.190.145.219
X-Forwarded-Port: 443
X-Forwarded-Proto: https
X-Amzn-Apigateway-Api-Id: fc5vwzacp2
Host: example.com
Connection: Keep-Alive
EndpoinrtURLの値が興味深いです。API Gatewayのリソースの階層構造とは無関係に、メソッドの統合リクエストの設定時に指定したURLに対してリクエストがなされなます。(他の階層構造でも試しました)
/{myProxy+}
& CORSを有効に設定
3. リソースパスが リクエストヘッダーは特に変わらないみたいですね。
http://exmaple.com/hoge
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate, br
Accept-Language: en,en-US;q=0.9,ja;q=0.8
Cookie: s_pers=%20s_vnum%3D1546597042049%2526vn%253D1%7C1546597042049%3B%20s_invisit%3Dtrue%7C1544007119025%3B%20s_nr%3D1544005319028-Repeat%7C1551781319028%3B
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36
X-Amzn-Trace-Id: Root=1-5c5fc5bd-ffb8781faee31572026e8616
X-Forwarded-For: 114.190.145.219
X-Forwarded-Port: 443
X-Forwarded-Proto: https
X-Amzn-Apigateway-Api-Id: mtwqhaxbhe
Host: exmaple.com
Connection: Keep-Alive
おまけ
EndpointURLの置換文字列は必ずしもリソース名と同じでなくて良い
Endpoint URLの置換文字列はパスパラメータからマッピングされたリクエストパラメータに過ぎないので、別途リクエストパラメータをマッピングすれば置換文字列の値を変えることが可能。
リソースの設定されていないパスにアクセス
{"message":"Missing Authentication Token"}
リソースの設定されていないパスにアクセスするとこうなります。
貪欲パスのフォーマット
{}のなかに文字列と+マークで指定したリソースをGreedy Path
というそうです。
HTTPプロキシ統合にも関わらず指定しない場合、エラーが発生。
日本語だと貪欲パス、ってところでしょうか。
貪欲パスの重複制限
貪欲パスは2個以上持てないみたいです。それはそうか。
参考
Discussion