客户应该有不同的表现吗?如何?
当前回答
301重定向被无限缓存(至少在某些浏览器上)。
这意味着,如果您设置了一个301,访问该页面,您不仅会被重定向,而且该重定向会被缓存。
当您再次访问该页面时,您的浏览器*甚至不会费心请求该URL,它只会转到缓存的重定向目标。
在缓存中使用重定向的访问者撤消301的唯一方法是重定向回原始URL**。在这种情况下,浏览器将注意到循环,并最终真正请求输入的URL。
显然,如果你决定301到facebook或其他你不能完全控制的资源,这是不可能的。
不幸的是,许多托管提供商在他们的管理界面中提供了一个简单称为“重定向”的功能,该功能进行301重定向。如果你用这个临时重定向你的域名到facebook作为一个即将到来的页面,你基本上完蛋了。
*至少Chrome和Firefox,根据浏览器缓存HTTP 301多长时间?刚刚在Chrome 45上试过。 编辑:Mac上的Safari 7.0.6也缓存,重新启动浏览器没有帮助(Link说在Windows上的Safari 5上有帮助)。
**我尝试了javascript窗口。Location = ",因为它是在大多数情况下都可以应用的解决方案-它不起作用。它会导致一个未被检测到的无限循环。然而,php header('Location: new.url')会打破循环
底线:只使用301如果你绝对确定你永远不会再使用该URL。通常不会在根目录(example.com/)
其他回答
状态301意味着资源(页面)被永久地移动到一个新的位置。从现在开始,客户端/浏览器不应该尝试请求原始位置,而是使用新位置。
状态302意味着资源暂时位于其他地方,客户端/浏览器应该继续请求原始url。
301的主要问题是浏览器将缓存重定向,即使您从服务器级禁用了重定向。
如果要在短时间内启用重定向,那么最好使用302。
虽然已经有了很多好的答案,但没有一个能从普通浏览器的角度说明缺陷或何时使用其中一个而不是另一个。
当你需要保持对最终URL的动态服务器端控制时,使用302而不是301 HTTP状态。使用301 http状态将使您的浏览器始终从自己的缓存加载最终URL,而不获取任何之前的URL(完全跳过第一次请求)。如果您需要保持服务器端对重定向URL的控制,则可能会产生不可预测的结果。
例如,如果您需要代表用户ip-geo-position (geo-ip-switching)进行URL重定向,请使用302。如果在这种情况下使用301,最终重定向的页面总是直接来自浏览器的缓存,向用户提供不正确/错误的内容。
大多数情况下,301 vs 302对于搜索引擎的索引很重要,因为他们的爬虫会考虑这一点,并在使用301时转移PageRank。
详情见Peter Lee的回答。
301重定向被无限缓存(至少在某些浏览器上)。
这意味着,如果您设置了一个301,访问该页面,您不仅会被重定向,而且该重定向会被缓存。
当您再次访问该页面时,您的浏览器*甚至不会费心请求该URL,它只会转到缓存的重定向目标。
在缓存中使用重定向的访问者撤消301的唯一方法是重定向回原始URL**。在这种情况下,浏览器将注意到循环,并最终真正请求输入的URL。
显然,如果你决定301到facebook或其他你不能完全控制的资源,这是不可能的。
不幸的是,许多托管提供商在他们的管理界面中提供了一个简单称为“重定向”的功能,该功能进行301重定向。如果你用这个临时重定向你的域名到facebook作为一个即将到来的页面,你基本上完蛋了。
*至少Chrome和Firefox,根据浏览器缓存HTTP 301多长时间?刚刚在Chrome 45上试过。 编辑:Mac上的Safari 7.0.6也缓存,重新启动浏览器没有帮助(Link说在Windows上的Safari 5上有帮助)。
**我尝试了javascript窗口。Location = ",因为它是在大多数情况下都可以应用的解决方案-它不起作用。它会导致一个未被检测到的无限循环。然而,php header('Location: new.url')会打破循环
底线:只使用301如果你绝对确定你永远不会再使用该URL。通常不会在根目录(example.com/)
推荐文章
- 使用HTML形式的PUT方法
- 如何转义哈希字符在URL
- 有没有办法在python中做HTTP PUT
- 我能在服务器端应用程序(PHP、Ruby、Python等)上读取URL的哈希部分吗?
- 什么是http头“X-XSS-Protection”?
- 在nodejs http中body在哪里。得到回应?
- 获取PHP中的URL参数
- Apache从非WWW重定向到WWW
- Ruby:如何将散列转换为HTTP参数?
- 在用nodejs和express创建的REST API中设置响应状态和JSON内容的正确方法
- HTTP 1.1和HTTP 2.0的区别是什么?
- 什么是“升级-不安全-请求”HTTP报头?
- HTTP 301和308状态码有什么区别?
- 什么HTTP状态码应该用于错误的输入
- 如何在变量中存储标准错误