`
ayis
  • 浏览: 186190 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

我的理解:http协议中302和303的区别

 
阅读更多

http1.0协议中只有302码,没有303状态码;
http1.1,在默认情况下,很多服务端基础程序,为了兼容http1.0,在遇到本应响应303时,也给客户端响应了302。


碰到的问题:

场景: 在整个web系统使用https的情况下,在程序中使用了redirect,结果发现redirect之后的重定向请求变成了http,此时redirect的响应码为302.
 
问 题:由于整个应用嵌入的需求,在页面组合上使用了iframe,整个网站包括父页面和iframe的子应用的所有请求均使用的https协议,而在 iframe子应用的redirect请求之后出现了http请求,在ie和firefox等浏览器中,并没有问题,(因为它们把iframe子应用中的 http请求也照样上送到了服务器,接收到http请求时,服务端会强制客户端使用https重定向请求),此时,对我们的系统仍然不存在影响(只是多了 一次重定向请求,但是对用户看不到);

但是在chrome浏览器下,iframe的http请求就被拦截掉了,提示在安全的https环境下不允许使用http访问,造成页面就死在了重定向之前的页面,不能正确的重定向到目标页面去了。
  
       问题看起来很纳闷,但是严格安全限制的浏览器下,问题也很明显。在当时的情况下,也只是看到了现象,至于原因和原理一点都不明白。于是根据现象找解决办 法,我们用的spring mvc,在stackoverflow上面找到了类似的问题。通过设置viewResolver的redirectHttp10Compatible属性 为false,关闭了对http1.0协议的兼容支持,程序的redirect响应码则变为了303,之后的重定向请求则维持了一致的https协议。

     所以,最终发现一个现象,在302和303的状态码下,整个https结构的web系统下,浏览器接收到此两种不同的响应码时,分别使用了http和https去重定向请求。查找网上的理解,
  1. 302=<"HTTP/1.1 302Found(or Moved Temporarily)",
  2. 303=<"HTTP/1.1 303See Other",

也看不出区别。所以,我的理解:302 响应码是http1.0的标准,在当时还没有支持https的相应协议出现,所以现在的浏览器为了兼容http1.0,在302状态码下,碰到了 https的重定向请求,也会以http去转发;而303是http1.1的标准,浏览器就维持了一致的https的重定向请求了。

分享到:
评论

相关推荐

    TCPIP协议详解(4-1)

    解析 68 7.9 小结 69 第8章 地址发现协议(BOOTP和DHCP) 71 8.1 “引导”协议(BOOTP) 71 8.2 动态主机配置协议(DHCP) 72 8.2.1 DHCP如何工作 72 8.2.2 理解租用地址 73 8.3 管理地址池 74 ...

    TCP/IP详解

    14.3 内部网关协议和外部网关协议 147 14.3.1 网关-网关协议(GGP) 147 14.3.2 外部网关协议(EGP) 147 14.3.3 内部网关协议(IGP) 148 14.4 小结 148 第五部分 网络服务 第15章 互联网打印协议 149 15.1 IPP历史 149 ...

    TCP/IP技术大全(中文PDF非扫描版)

    本书内容十分丰富,几乎涵盖了有关TCP/IP的各个方面,包括开放式通信模型、TCP/IP通信模型、IP网络中的命名和寻址机制、地址解析及反向地址解析协议、DNS域字服务器、WINS、地址发现协议、IPv6、IP网络中的路由协议...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part4

    6.6.4 sendredirect()和forward()方法的区别 238 6.7 小结 239 第7章 web应用程序的部署 240 7.1 配置任意目录下的web应用程序 240 7.2 war文件 242 7.3 tomcat中servlet的另一种运行方式 244 7.4 与servlet...

    TCP-IP技术大全

    本书内容十分丰富,几乎涵盖了有关TCP/IP的各个方面,包括开放式通信模型、TCP/IP通信模型、IP网络中的命名和寻址机制、地址解析及反向地址解析协议、DNS域字服务器、WINS、地址发现协议、IPv6、IP网络中的路由协议...

    TCP/IP教程TCP/IP基础

    14.3 内部网关协议和外部网关协议 147 14.3.1 网关-网关协议(GGP) 147 14.3.2 外部网关协议(EGP) 147 14.3.3 内部网关协议(IGP) 148 14.4 小结 148 第五部分 网络服务 第15章 互联网打印协议 149 15.1 IPP历史 149 ...

    TCP/IP技术大全

    14.3 内部网关协议和外部网关协议 147 14.3.1 网关-网关协议(GGP) 147 14.3.2 外部网关协议(EGP) 147 14.3.3 内部网关协议(IGP) 148 14.4 小结 148 第五部分 网络服务 第15章 互联网打印协议 149 15.1 IPP历史 149 ...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part3

    6.6.4 sendredirect()和forward()方法的区别 238 6.7 小结 239 第7章 web应用程序的部署 240 7.1 配置任意目录下的web应用程序 240 7.2 war文件 242 7.3 tomcat中servlet的另一种运行方式 244 7.4 与servlet...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part2

    6.6.4 sendredirect()和forward()方法的区别 238 6.7 小结 239 第7章 web应用程序的部署 240 7.1 配置任意目录下的web应用程序 240 7.2 war文件 242 7.3 tomcat中servlet的另一种运行方式 244 7.4 与servlet...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part5

    6.6.4 sendredirect()和forward()方法的区别 238 6.7 小结 239 第7章 web应用程序的部署 240 7.1 配置任意目录下的web应用程序 240 7.2 war文件 242 7.3 tomcat中servlet的另一种运行方式 244 7.4 与servlet...

    疯狂JAVA讲义

    学生提问:为什么选择设置用户变量,用户变量和系统变量有什么区别呢? 11 1.5 第一个Java程序 12 1.5.1 编辑Java源代码 12 1.5.2 编译Java程序 13 学生提问:当我们使用编译C程序时,不仅需要指定存放目标文件...

    Python编程入门经典

    16.1 理解协议 271 16.1.1 比较协议和程序语言 271 16.1.2 Internet协议栈 272 16.1.3 Internet协议简介 273 16.2 发送电子邮件 274 16.2.1 E-mail文件格式 275 16.2.2 MIME消息 276 16.2.3 使用SMTP和smtplib发送 ...

    javaSE代码实例

    14.7.3 Hashtable类的使用 303 14.7.4 LinkedHashMap类的使用 304 14.7.5 SortedMap接口与TreeMap类 305 14.7.6 映射的遍历 308 14.8 栈在Java中的实现 309 14.8.1 Stack类的使用 309 14.8.2 Deque接口...

Global site tag (gtag.js) - Google Analytics