dorapon2000’s diary

忘備録的な。セキュリティとかネットワークすきです。

facebookのHTTPヘッダを読む

前回はtwitterのHTTTPヘッダを読んだので、今回はfacebookを読んでいく。前回とカブる部分は飛ばす。

dorapon2000.hatenablog.com

ヘッダ全体

$ curl -I -XGET https://www.facebook.com/
HTTP/2 200
vary: Accept-Encoding
pragma: no-cache
cache-control: private, no-cache, no-store, must-revalidate
expires: Sat, 01 Jan 2000 00:00:00 GMT
set-cookie: fr=XXXX; expires=Tue, 02-Feb-2021 11:33:15 GMT; Max-Age=7775999; path=/; domain=.facebook.com; secure; httponly
set-cookie: sb=XXXX; expires=Fri, 04-Nov-2022 11:33:16 GMT; Max-Age=63072000; path=/; domain=.facebook.com; secure; httponly
strict-transport-security: max-age=15552000; preload
x-content-type-options: nosniff
x-xss-protection: 0
x-frame-options: DENY
content-type: text/html; charset="utf-8"
x-fb-debug: XXXX
date: Wed, 04 Nov 2020 11:33:16 GMT
alt-svc: h3-29=":443"; ma=3600,h3-27=":443"; ma=3600

Vary

vary: Accept-Encoding

同一オリジンで同一ファイルへのアクセスだとしても、Accept-Encodingヘッダが異なる場合は別のファイルとして認識してキャッシュしないという意味。ブラウザとサーバの間にキャッシュサーバがあるとき、Varyヘッダを指定されたものは異なるファイルとしてキャッシュされる。

x-fb-debug

Debugging - グラフAPI - ドキュメンテーション - Facebook for Developers

名前の通り、Facebookデバッグのために利用されると説明されている。

Alt-Svc

alt-svc: h3-29=":443"; ma=3600,h3-27=":443"; ma=3600

HTTP/3のdraft29で同じドメインの443ポートでもアクセスできるということを知らせている。同様にh3-27でも。maはmax-ageの略でalt-svcを有効にする時間。

ドメインを指定する場合は次のようになる。

Alt-Svc: h2="alt.example.com:443", h2=":443"

実際にHTTP3でも通信できるか確認してみた。HTTP3の通信には以下のサイトを参考にした。

HTTP/3 対応の curl を作る - Qiita

❯ docker run --rm keioni/curl-http3 curl -Iv --http3 https://www.facebook.com
略
HTTP/3 200
vary: Accept-Encoding
pragma: no-cache
cache-control: private, no-cache, no-store, must-revalidate
expires: Sat, 01 Jan 2000 00:00:00 GMT
set-cookie: fr=XXXX; expires=Tue, 02-Feb-2021 13:26:39 GMT; Max-Age=7775999; path=/; domain=.facebook.com; secure; httponly
set-cookie: sb=XXXX; expires=Fri, 04-Nov-2022 13:26:40 GMT; Max-Age=63072000; path=/; domain=.facebook.com; secure; httponly
strict-transport-security: max-age=15552000; preload
x-content-type-options: nosniff
x-xss-protection: 0
x-frame-options: DENY
content-type: text/html; charset="utf-8"
x-fb-debug: XXXX
date: Wed, 04 Nov 2020 13:26:40 GMT
alt-svc: h3-29=":443"; ma=3600,h3-27=":443"; ma=3600

ちゃんとできている。HTTP/3にしてもヘッダは変わっていない。alt-svcで提案されるh3の片方は消えるのかと思ったけれど、そんなことはなかった。

おわりに

twitterとは同じ部分も違う部分もあった。

twitterではCSPが書かれていたがfacebookにはヘッダすらなかった。CSPを丁寧に書くとヘッダが膨らむためケアしたのかもしれない。一方、X-Content-Type-Options: nosniffX-Frame-Options: DENYはどちらにも存在した。こちらのほうがセキュリティ的な重要度が高いとどちらも認識しているのだと思う。

googleはどうだろう。次はgoogleのヘッダを見てみたい。

参考

HTTP Varyヘッダについて | Rの技術メモ

Fastly で Varyヘッダーを活用する - Qiita