data: スキームと Location: ヘッダ
ふと気になって Location: ヘッダに data: スキームを指定した場合ブラウザがどういう挙動を示すのか試してみた。
慣れているので WEBrick で。
require 'webrick' require 'uri' s = WEBrick::HTTPServer.new(:Port => 8080) class MyServlet < WEBrick::HTTPServlet::AbstractServlet def do_GET(req, res) res.status = 302; res['Location'] = 'data:text/html,' + URI.escape(%{<html><body><s>oops</s></body></html>}) res.body = 'Okie-dokie!' end end s.mount("/", MyServlet) trap("INT") { s.shutdown } s.start
結果。IE 6, 7はもちろん未対応なのでいいとして、FireFox は完全スルーで何も起こらず。Opera と Safari だけがスキームに指定されたコンテンツを解釈した。Javascript は両者ともにインラインのコンテキストで実行するようなので特にセキュリティ上の脅威になるわけではなさそうだけど、ちょっと気持ちが悪いのは事実。(Safari は javascript: スキームへのリダイレクトを明示的にエラーとする)