- 追加された行はこの色です。
- 削除された行はこの色です。
- 障害メモ/Playwrightで特定のリクエストが403になってパスしない へ行く。
- 障害メモ/Playwrightで特定のリクエストが403になってパスしない の差分を削除
#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]] -