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=<"HTTP/1.1 302Found(or Moved Temporarily)",
- 303=<"HTTP/1.1 303See Other",
也看不出區別。所以,我的理解:302 響應碼是http1.0的標准,在當時還沒有支持https的相應協議出現,所以現在的瀏覽器為了兼容http1.0,在302狀態碼下,碰到了 https的重定向請求,也會以http去轉發;而303是http1.1的標准,瀏覽器就維持了一致的https的重定向請求了。
針對的在springmvc中的問題描述:
項目部署在websphere中,整站在https下運行,當通過spring redirect 內部跳轉時,鏈接地址有https開頭轉變為http開頭,在這樣情況下導致項目請求無法訪問。
1 <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 2 <!-- redirectHttp10Compatible:解決https環境下使用redirect重定向地址變為http的協議,無法訪問服務的問題 3 設置為false,即關閉了對http1.0協議的兼容支持 --> 4 <property name="redirectHttp10Compatible" value="false"/> 5 <!-- view是用什么顯示,這里是jsp,還可以用velocity之類的 --> 6 <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" /> 7 <property name="contentType" value="text/html;charset=UTF-8" /> 8 <property name="prefix" value="/WEB-INF/view/" /> 9 <property name="suffix" value=".jsp" /> 10 </bean>
