最近看到 http response 的状态码, 说302 是 moved permanently, 301 是 moved temporarily.
想彻底搞清楚它们本质的区别, 仔细去看了它们的 Response:
访问 changchen.me 的响应(301):
HTTP/1.1 301 Moved Permanently
Server: nginx/1.10.3 (Ubuntu)
Date: Sun, 13 Aug 2017 05:37:04 GMT
Content-Type: text/html
Content-Length: 194
Connection: keep-alive
Location: https://changchen.me/
访问 www.changchen.me 的响应(302):
HTTP/1.1 302 Moved Temporarily
Server: nginx/1.10.3 (Ubuntu)
Date: Sun, 13 Aug 2017 05:38:23 GMT
Content-Type: text/html
Content-Length: 170
Connection: keep-alive
Location: https://changchen.me/
但问题来了, 它们唯一的区别只有第一行 O.O, 那他们的区别到底是什么呢?
功能上好像是完全一样的, 只是告诉客户端是永久还是临时跳转吗?
谢谢~~
ps. 还有大家要是工作了, 做 web 开发, 还会去仔细研究一下 TCP/IP, HTTP, HTTPS 等协议吗?
有什么好的学习资料或书推荐的吗?
1
mooncakejs 2017-08-13 13:57:17 +08:00 4
301 意味着客户端可以对结果进行缓存, 搜索引擎或者浏览器都可以把跳转后的地址缓存下来,下一次不必发送这个请求。
302 就是客户端必须请求原链接。 |
2
580a388da131 2017-08-13 14:01:01 +08:00
Moved Permanently
永久 移动 Moved Temporarily 临时 移动 |
3
tomczhen 2017-08-13 14:01:57 +08:00 via Android 2
返回是由服务器决定的,但是如何处理是客户端决定的,只不过按照 HTTP 协议规范规定 301 跳转是会被客户端记住。后台开发通常只要关心应用层即可,推荐图解 HTTP,足够一般工作使用了,再想继续深入就是 HTTP 权威指南了。
|
4
tomczhen 2017-08-13 14:02:34 +08:00 via Android
应该是 302 会被客户端记住。
|
5
daya0576 OP |
6
chuhemiao 2017-08-13 14:57:35 +08:00
可以看下 hsts,为何只支持 301 而不是 302。
|
7
fiht 2017-08-13 15:01:48 +08:00
哪有啥本质的区别,是 HTTP 标准制定的。
======= 存在本质区别的比如讲 啊 为什么 ElasticSearch 的全文索引比 MySQL 快那么多呢? 然后各式各样的大佬就可以开始给你讲本质区别了。 |
8
liuzhiyong 2017-08-13 15:32:22 +08:00 via iPad
楼上说的很清楚了,一个是永久性的,一个是临时性的。永久性的会被客户端记住。
|
9
pqee 2017-08-13 15:33:14 +08:00 via Android
HTTP 协议就是如此简单,理论上讲 GET POST 除了这两个词不一样之外没有任何区别。区别都是客户端的约定俗成。
|
10
carlclone 2017-08-13 15:35:30 +08:00 via Android
约定,不强制遵循
|
11
TimePPT 2017-08-13 15:41:50 +08:00 via iPhone
你做站点改版没事大量做 302 跳转看看 SEO 啥效果……
|
12
YangXiaoming 2017-08-13 16:54:47 +08:00 1
301 和 302 的区别其实对爬虫很重要。
|
13
cxbats 2017-08-13 17:20:06 +08:00 via Android
这些其实都是约定,你要是自己喜欢完全可以想怎么来怎么来
|
15
FanWall 2017-08-13 17:58:53 +08:00
这些属于约定 翻翻文档就行了
|
16
Kilerd 2017-08-13 18:14:18 +08:00 via iPhone
客户端(浏览器)会对永久的进行缓存。当访问原地址时,会直接本地 302 跳转,跟 HSTS 的 307 一样
|
17
SimonFu 2017-08-13 18:25:51 +08:00
个人理解,从 SEO 角度,302 跳转,搜索引擎仍然保留原来的地址,301 跳转,则会保留跳转后的地址。
|
18
flowfire 2017-08-13 21:20:43 +08:00 3
301:永久重定向,客户端以后不应该再次请求此地址
302:临时重定向,客户端可以(也应该)再次请求此地址 P.S. 由于 302 语义不明确,所以不推荐使用 302 重定向,应该使用 303 或者 307 代替 303:临时重定向,并使用 GET 方法请求新的 URL 307:临时重定向,并使用原方法请求新的 URL |
19
chuhemiao 2017-08-14 10:17:51 +08:00
@yatesun 我记得加的时候是要先 http 跳到 https (这里需要用 301 把),之后浏览器会在判别跳 307
|
20
1010011010 2017-08-14 20:59:09 +08:00
还会影响搜索引擎
|