前回はtwitterのHTTTPヘッダを読んだので、今回はfacebookを読んでいく。前回とカブる部分は飛ばす。
ヘッダ全体
$ 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の通信には以下のサイトを参考にした。
❯ 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: nosniff
やX-Frame-Options: DENY
はどちらにも存在した。こちらのほうがセキュリティ的な重要度が高いとどちらも認識しているのだと思う。
googleはどうだろう。次はgoogleのヘッダを見てみたい。