301 和 302 有啥区别
301 Moved Permanently,永久重定向。被请求资源已永久移动到新位置,并且将来任何对该资源的引用都使用本响应返回的若干个 URI 之一。301 资源除非额外指定,否则都是可缓存的。
注意:对于某些使用 HTTP/1.0 协议的浏览器,当它们发送的 POST 请求得到了一个 301 响应的话,接下来的重定向请求将会变成 GET 方式。
302 Found 表示临时重定向 Moved Temporarily。由于这样的重定向是临时的,客户端应继续向原有地址发送以后的请求,只有在 Cache-Control 或 Expires 中进行了指定的情况下,这个响应才是可缓存的。
注意:虽然 RFC1945 和 RFC 2068 规范不允许客户端在重定向时改变请求的方法,但是很多现存的浏览器将 302 响应视作为 303 响应,并且使用 GET 方式访问在 Location 中规定的 URI,而无视原先请求的方法。因此状态码 303 和 307 被添加了进来,用以明确服务器期待客户端进行何种反应。
301 和 302 相同点
- 都表示资源重定向。
- 新的 URI 地址都是在响应的 Location 中返回。
- 如果原始请求不是 GET 或者 HEAD 请求的话,浏览器会禁止自动进行重定向,除非得到用户的确认,因为请求的条件可能因此发生变化。
301 Moved Permanently
来看一个常见的 301 状态码的演示。访问本网页的时候,由于使用 https 协议,并且设置 http 自动重定向到 https,所以假如直接使用 http 协议http://lz5z.com进行访问,会有一次 301 重定向。
浏览器获得响应结果后,根据 Location 中的值进行重定向,打开页面 https://lz5z.com。
302 Found
我们常用的短链接就是 302 跳转,比如我使用 sina 的短链接服务生成本页面的地址: http://t.cn/RdC6GHq。对其进行访问的时候就首先发生了 302 重定向。
使用时机
由于 301 重定向是永久的重定向,搜索引擎在抓取新内容的同时也将旧的网址替换为重定向之后的网址。302 重定向是临时的重定向,搜索引擎会抓取新的内容而保留旧的网址。因为服务器返回 302 代码,搜索引擎认为新的网址只是暂时的。
所以 301 是对搜索引擎更加友好的重定向,建议只要不是资源临时转移,都可以使用 301 的方式。
参考资源
- HTTP状态码#3xx重定向