欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

HTTP中的301、302、303、307、308

程序员文章站 2022-07-05 11:18:05
结论 3XX开头的HTTP状态码都表示重定向的响应。 301、308是永久重定向;302、303、307是临时重定向。 301、302是http 1.0的内容,303、307、308是http1.1的内容。 301和302本来在规范中是不允许重定向时改变请求method的(将POST改为GET),实 ......

结论

  • 3xx开头的http状态码都表示重定向的响应。
  • 301、308是永久重定向;302、303、307是临时重定向。
  • 301、302是http 1.0的内容,303、307、308是http1.1的内容。
  • 301和302本来在规范中是不允许重定向时改变请求method的(将post改为get),实际许多浏览器实现的时候允许重定向时改变请求method。
  • 303的出现是允许重定向时改变请求method。此外303响应禁止被缓存。307、308则不允许重定向时改变请求method。

rfc 7231规定:

  • 301 moved permanently,永久重定向
  • 302 found
  • 303 see other
  • 307 temporary redirect

rfc 7538规定:

  • 308 permanent redirect 永久重定向

301、302搜索引擎处理区别

  • 301表示搜索引擎在抓去新内容的同时,将旧的网址替换为重定向之后的网址;
  • 302表示旧地址的资源仍存在,重定向时临时从a地址跳转到b地址,搜索引擎会抓取新的内容,并继续保存旧的网址。

临时重定向:302、303与307

结论

  • 302允许各种各样的重定向,一般都实现为get到get重定向,但是不能确保post会重定向为post。
  • 303只允许任意请求到get的重定向。
  • 307和302一样,但不允许post到get的重定向。

302 found

  • 302表示目标资源临时移动到了另一个uri上。由于重定向是临时发生的,所以客户端之后的请求中应该使用原本的uri。
  • 响应header的location会带上重定向的uri,浏览器可以使用location中的uri进行自动重定向
  • 注意:由于历史原因,用户代理可能会在重定向后的请求中把post方法改为get。如果不想这样做,应该响应307(temporary redirect)状态码。

303 see other

  • 303表示服务器要将浏览器重定向到另一个资源,这个资源的uri会写在响应header的location字段。事实上,重定向到的资源并不是请求的资源,而是对请求资源的一些描述。
  • 303 通常用于将post请求重定向到get请求。例如上传了一份个人信息,服务器返回303响应,将你导向一个上传成功页面。
  • 303 不管原请求是什么方法,重定向请求的都是get(或者head)
  • 303响应禁止被缓存。

307 temporary redirect

  • 307的定义实际上和302是一致的,唯一区别在于,307状态码不允许浏览器将原本post的请求重定向到get请求上。

永久重定向:301、308

301 moved permanently

  • 301表明目标资源被永久的移动到了一个新的uri,任何未来对这个资源的引用都应该使用新的uri。

308 permanent redirect

  • 308与301定义一致,唯一的区别在于,308状态码不允许浏览器将原本为post的请求重顶到get请求上。