CORS / fetch でローカルネットワークにアクセスする
UserScript とかで LAN 内のサービスにアクセスしたいことがある
Firefox ではレスポンスに Access-Control-Allow-Origin: * さえ入れておけばアクセスできるっぽい
もちろん * じゃなくてちゃんとした値を入れるべきです
しかし Chrome では専用の preflight request が飛んでくるのでちゃんと処理する必要がある
ルータとかに CSRF されるのを防ぐためっぽい、なるほど
https://developer.chrome.com/blog/private-network-access-preflight?hl=ja
飛んでくる preflight request はこんな感じ(なんか他にも UA とか Accept-xxx みたいなのいっぱい来ますが、とりあえず関係するもののみ)
code::
OPTIONS /foo HTTP/1.1
Access-Control-Request-Method: GET
Access-Control-Request-Private-Network: true
Origin: http://example.com
で、こんな感じでレスポンスする
code::
HTTP/1.1 204 No Content
Access-Control-Allow-Method: GET
Access-Control-Allow-Private-Network: true
Access-Control-Allow-Origin: http://example.com
ハマりポイントとして、 Allow-Method と Allow-Private-Network だけでなく、 Allow-Origin も返してあげないとダメだった。
記事に書いといてくださいよ、、、
ところで Chrome の Devtool は preflight request を Network タブに出さなくなったのマジで何故なんですか
→ Other で見れました、解決