http-301 302 303 307

来源:互联网 发布:天柱行知中学 编辑:程序博客网 时间:2024/06/06 16:41

需求:
A、B 两个网站,单独登录这两个网站都是需要输入用户名和密码的。现在登录A网站后,点击一个链接link,可以直接进入B网站内部,就需要实现免登功能。
基本实现就是点击link的时候,服务器端返回一个302状态码的response,然后浏览器去请求response中的location,实现一个跳转。(深入的验证授信访问过程,没有细问后端同学,我的focus是在302 303 状态码的含义,查了一下文档,我以为后端实现的是303。。结果是302)

301 是永久重定向。告诉客户端以后应从新地址访问.
302(found) 和303 都是临时重定向

status-code: 302

http-RFC文档说明:

302是http1.0的状态码,文档要求对于浏览器发起的非head,get请求,服务端返回302的时候,浏览器不能自动的向新的uri发起post请求,需要用户二次确认之后才能发起post请求。否则不能请求新的uri,当然对于head、get请求是可以自动去请求新的uri的。

在http1.1中,302的说明和http1.0的时候是一样的。

浏览器处理:

实际上,浏览器对于302状态码的处理与文档是不一样。浏览器对于post请求,获得302状态码时,自动将第二次的post请求变为get请求,请求的uri就是上一次请求的location。

status-code: 303、307

http-RFC文档说明:

303是http1.1新增的状态码.当浏览器收到303的时候,可以自动把第二次的post请求变为get请求,请求的uri是上一次的location。
307也是http1.1新增的状态码。当浏览器收到307的时候,需要等用户确认,如果没有确认,就不能发起第二次post请求

浏览器处理:

实际上,目前很少有303 307的响应,更多的是302,很多服务端把本该303的响应都变成了302.主要是为了兼容http1.1之前的浏览器,浏览器对302的处理也和以前一样–把第二次的post请求变为get请求。

0 0
原创粉丝点击