Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
哪个是重定向的正确HTTP响应代码?_Http_Webserver_Http Status Codes - Fatal编程技术网

哪个是重定向的正确HTTP响应代码?

哪个是重定向的正确HTTP响应代码?,http,webserver,http-status-codes,Http,Webserver,Http Status Codes,当web服务器希望重定向用户的浏览器时,应将哪个状态代码(即“200OK”)放在响应头中?从我的阅读看来,答案可能是3XX代码中的任何一个,但这些代码中的每一个似乎都有不同的描述。只要“位置”在响应头中,使用哪一个就重要吗 根据: 重定向响应(格式为 3xx)表示 请求的客户端已移动,并且 服务器无法为其提供服务 直接的。这些反应中的大多数 包含一些位置信息 告诉在哪里可以找到所请求的 资源;用户代理通常是 无需更多用户即可检索它 相互作用最常见的回答 这种类型的, 指示给定的URI为否 不再有

当web服务器希望重定向用户的浏览器时,应将哪个状态代码(即“200OK”)放在响应头中?从我的阅读看来,答案可能是3XX代码中的任何一个,但这些代码中的每一个似乎都有不同的描述。只要“位置”在响应头中,使用哪一个就重要吗

根据:

重定向响应(格式为 3xx)表示 请求的客户端已移动,并且 服务器无法为其提供服务 直接的。这些反应中的大多数 包含一些位置信息 告诉在哪里可以找到所请求的 资源;用户代理通常是 无需更多用户即可检索它 相互作用最常见的回答 这种类型的, 指示给定的URI为否 不再有效,并且已移动到 另一个地方,和 这表示资源已被删除 被暂时转移到另一个地方 地点

注意:对于网站管理员,建议在以下情况下设置重定向: 将页面移动到另一个URI,在 例如,站点重组。那个 允许用户通过以下链接访问静态 接触到资源,它也会教你 搜索引擎和其他服务 资源的新位置,以便 他们可以将元数据传输到 信息技术补充一点也很重要 为响应提供足够的缓存头,以便 该信息由 并阻止它进行 对原件的不必要要求 获取资源之前的URI 本身


有关状态代码的更多详细信息,请参阅。有关不同状态代码如何影响SEO的可视化表示,请参阅。

响应代码302。或者至少,当您调用
sendRedirect()
时,Java的
HttpServletResponse
发送的就是这个消息。如果Java就是这样做的,那可能是有原因的

301和302在语义上的唯一区别是301表示“永久重定向”,302表示“临时重定向”。这在实践中是否转化为任何差异完全取决于实现协议的客户机

例如,浏览器可以决定,由于301是永久的,它只会记住它返回的重定向URL,而不再实际发送对原始URL的请求。但这完全取决于浏览器的实现


也许一个合理的经验法则是,如果要将静态内容移动到新位置,请始终使用301。但是,如果您发送重定向以响应对服务器上某个动态代码的请求,那么您应该使用代码302(或者307)以确保后续请求仍发送到原始URL,以防您决定更改/更新动态代码以执行其他操作。

这完全取决于您执行重定向的原因。我想你已经读过了

您不想使用301,除非可能用于页面重命名之类的事情。我不知道有任何CMS会自动执行此操作

具有链接编辑功能的客户端应该自动 将对请求URI的引用重新链接到一个或多个新的 服务器返回的引用(如果可能)

302对于一次又一次的临时GET来说非常好,默认情况下是不可缓存的。它不应用于GET after POST,因为它实际上是指一篇又一篇的POST(在请求用户确认后):

注意:RFC 1945和RFC 2068规定不允许使用客户端 更改重定向请求的方法。然而,大多数 现有的用户代理实现将302视为303 响应,对位置字段值执行GET,不管 原始请求方法的。状态代码303和307已被删除 已添加用于希望明确说明 客户会有什么样的反应

303是为了得到后面的职位。古老的浏览器可能不支持它,因此您可能不想将其用于GET-after-GET:

注意:许多HTTP/1.1之前的用户代理不理解303 地位当需要考虑与此类客户机的互操作性时 302由于大多数用户代理都会做出反应,因此可以使用状态代码 到302响应,如这里描述的303

307用于一次又一次的发布(与用户确认后)。它可以用于GET之后的GET,但在这种情况下,您最好使用302/303:

如果响应其他请求而接收到307状态代码 而不是GET或HEAD,用户代理不能自动重定向 请求,除非用户可以确认,因为这可能 更改发出请求的条件


至于兼容性,如果有很大比例(1%?)的用户支持不理解303或307的损坏代理,即使他们声称支持HTTP/1.1,我也不会感到惊讶。嗯。

省去了我大量的打字和打字时间


注意-并非所有3xx代码都进行重定向。但是301、302、303和307的语义是相似的。

链接不错,但它并没有真正澄清301/302之间的区别me@tc“302已弃用”源代码?301的问题是,如果转发到的URI是动态的,该怎么办?这意味着用户代理会认为URI在随后的每次访问中都是相同的,而不必麻烦进行第二次请求。它将在第一次访问时缓存URI,而不必再次查找。@Mike-如果转发到的URI是动态的,那么您就安全了。但是,如果您转发的URI是动态的,那么最好使用代码302/307,以确保浏览器仍然将后续请求定向到动态URI。您仍然没有提供源代码。谢谢。但我还是不明白你为什么说“302不推荐使用”