home wiki.fukuchiharuki.me
Menu

#author("2025-01-29T08:09:19+00:00","default:haruki","haruki")
* キーワード [#x40a8fe4]
- Playwright
- OPTIONS
- PUT
- 403 Forbidden

* 現象 [#d603d0b3]

ブラウザで直接操作する分には問題ないがPlaywrightで同じ操作をしてパスしないケースがあった。

諸々あったので箇条書きにする:

- PUTリクエストを処理できなかった
- PUTの前にOPTIONSをリクエストしていた
- OPTIONSリクエストで403 Forbiddenになっていた
- サーバー側でOPTIONSリクエストの問題を解決したが、PUTリクエストで403 Forbiddenになった

* 原因 [#i268172c]

** PUTの前にOPTIONSをリクエストしていた [#j799b219]

[[単純リクエスト>https://developer.mozilla.org/ja/docs/Web/HTTP/CORS#%E5%8D%98%E7%B4%94%E3%83%AA%E3%82%AF%E3%82%A8%E3%82%B9%E3%83%88]]でないためにプリフライトを行っていた。

** OPTIONSリクエストで403 Forbiddenになっていた [#f8b50e0d]

サーバー側でAllowedOriginの設定を誤っていた。それに加えPlaywrightではlocalhostへのアクセスは127.0.0.1になっていた。

** PUTリクエストで403 Forbiddenになった [#ub0b7b84]

どういうわけだか分からないがログを見る限りCookieがセットされておらず必要な認証等ができていなかった。

* 対策 [#z2d30c9f]

PUTリクエストするエンドポイントはローカル環境では別サービスを模したスタブでしかないこともあり、Playwrightでレスポンスをエミュレートすることにした。

 // stub
 await page.route('**/path/to/endpoint', async (route) => {
   await route.fulfill({ status: 200 });
 });

* 備考 [#w6bc2c16]

肝心のPUTリクエストでCookieがセットされなかった理由は不明。追求していない。

* 参考 [#aeb61e33]
- [[オリジン間リソース共有 (CORS) - HTTP | MDN>https://developer.mozilla.org/ja/docs/Web/HTTP/CORS]]
-