当我运行重定向cgi脚本(Perl)时,只需执行以下操作:
print "Location: /new/url\n\n";
这可行,但是默认情况下,它显示Status:200 OK。如果我在标题中指定302或301之类的状态,则浏览器将重定向。否则,它仍将加载新URL的内容,而不会在浏览器中更改URL。
我只想了解浏览器如何处理Location:Header,但状态为200,这样做而不使用302或301有什么利弊?
反馈或指向讨论此问题的文章的链接都很好。谢谢。
答案 0 :(得分:3)
我只想了解浏览器如何处理Location:Header,但状态为200,而不使用302或301,这样做的利弊是什么?
Location
标头仅在与某些3xx代码结合使用时才导致重定向。此行为在HTTP标准中已明确定义。来自RFC 7231 7.1.2 Location:
对于201(已创建)响应,“位置”值是指主要 请求创建的资源。 对于3xx(重定向)响应, 位置值是指首选目标资源 自动重定向请求。
换句话说:将Location
标头与响应代码200一起使用根本没有任何意义。在这种情况下,Location
标头将被浏览器忽略。
答案 1 :(得分:1)
使用redirect()
subroutine from CGI.pm使您的生活更轻松。
$ perl -MCGI=redirect -E'say redirect("https://example.com")'
Status: 302 Found
Location: https://example.com