88251048 2015-01-18
http1.0协议中只有302码,没有303状态码;
http1.1,在默认情况下,很多服务端基础程序,为了兼容http1.0,在遇到本应响应303时,也给客户端响应了302。
碰到的问题:
但是在chrome浏览器下,iframe的http请求就被拦截掉了,提示在安全的https环境下不允许使用http访问,造成页面就死在了重定向之前的页面,不能正确的重定向到目标页面去了。
问题看起来很纳闷,但是严格安全限制的浏览器下,问题也很明显。在当时的情况下,也只是看到了现象,至于原因和原理一点都不明白。于是根据现象找解决办 法,我们用的spring mvc,在stackoverflow上面找到了类似的问题。通过设置viewResolver的redirectHttp10Compatible属性 为false,关闭了对http1.0协议的兼容支持,程序的redirect响应码则变为了303,之后的重定向请求则维持了一致的https协议。
也看不出区别。所以,我的理解:302 响应码是http1.0的标准,在当时还没有支持https的相应协议出现,所以现在的浏览器为了兼容http1.0,在302状态码下,碰到了 https的重定向请求,也会以http去转发;而303是http1.1的标准,浏览器就维持了一致的https的重定向请求了。