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