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去重定向請求。查詢網上的理解,
也看不出區別。所以,我的理解:302 響應碼是http1.0的標準,在當時還沒有支援https的相應協議出現,所以現在的瀏覽器為了相容http1.0,在302狀態碼下,碰到了 https的重定向請求,也會以http去**;而303是http1.1的標準,瀏覽器就維持了一致的https的重定向請求了。
http協議301和302狀態碼的定義及區別
301 moved permanently 永久性重定向 該狀態碼表示請求的資源已被分配給了新的url,以後所使用的資源為現在所指的url。也就是說,如果已經把資源對應的url儲存為書籤了,這時應按照location首字母提示的url重新儲存。像下方的請求url,當指定資源路徑的最後忘記新增斜槓 就...
HTTP協議的理解
web api介面 大都是基於 http 協議的,所以,要進行介面測試 首先要了解 http 協議 的 基礎知識。http 協議 全稱是 超文字傳輸協議,英文是 hypertext transfer protocol http協議最大的特點是通訊雙方分為客服端和服務端,雙方進行資訊的互動。目前,ht...
Http狀態301和302的區別
1 什麼是301轉向?什麼是301重定向?301轉向 或叫301重定向,301跳轉 是當使用者或搜尋引擎向 伺服器發出瀏覽請求時,伺服器返回的http資料流中頭資訊 header 中的狀態碼的一種,表示本網頁永久性轉移到另乙個位址。2 什麼是302重定向?302重定向又稱之為302代表暫時性轉移 t...