@ledsun blog

無味の味は佳境に入らざればすなわち知れず

Response.urlの挙動を確認する

ruby.wasmのE2Eテストをデバッグする - @ledsun blog で、Response.urlにリダイレクト後のURLが入っていない現象を観測しました。

MDNには

url プロパティの値は、あらゆるリダイレクトの後に得られる最終的な URL になります。

とあります。矛盾しているように思えます。 問題への理解を深めるために、よりシンプルな環境でRespose.urlの動作を確認します。

次のようにリダイレクトレスポンスを返すサーバーを作成します。

require 'webrick'

server = WEBrick::HTTPServer.new(Port: 3000)

# リダイレクトの設定
server.mount_proc '/redirect' do |req, res|
  res.status = 302
  res['Location'] = 'anywhere'
end

trap 'INT' do
  server.shutdown
end

server.start

起動します。

ruby server.rb

ブラウザで http://localhost:3000 を開きます。

ブラウザで開いて404ページが表示されているスクリーンショット

404ページが表示されます。 今回はHTMLの内容には興味がありません。 これで十分です。

開発コンソールを開きます。 次のようにfetch APIを使って、redirectするURLにリクエストを送り、レスポンスを得ます。

response = await fetch('redirect')

開発コンソールでResposeが表示されているスクリーンショット

Response.url は "http://localhost:3000/anywhere" です。 リダイレクト後のURLが入っています。 前回観測した現象と異なります。 MDNの記述と同じ動作をします。 PlayWrightの実行環境が特殊なのでしょうか? 謎です。