面試常問有關響應狀態碼3XX

zhangfaliang發表於2018-12-25

前端開發的小夥伴們是不經常被問到3xx響應狀態碼

一般我們們前端小夥子知道的 3xx屬於的是重定向範圍,

但是面試官一般會問到這幾個常用的301、302、303、304、307這幾個狀態碼的作用和區別。

那麼301代表什麼

301的英文是 moved permanently (永久性重定向)看下圖面試常問有關響應狀態碼3XX

永久性重定向。伺服器對你客戶端說:‘你現在請求的資源不在我這,我沒法給你,但是我可以告訴你,你可以去這個某個地址拿到這個資源,並且以後這個資源都會在我給你的地址那,你儲存一下這地址,以後不要在找我要這個資源了’。

實際上伺服器和客戶端是這麼交流的,請求的資源已被分配到新的URI(統一資源識別符號),以後應使用資源現在所指的URI。


302 代表什麼呢?

302 的英文表示是 Found,臨時性重定向,看下圖面試常問有關響應狀態碼3XX


伺服器告訴你:‘你現在所請求的資源目前不在我這,被臨時放到某個地址的伺服器了,但是以後可能還會從某個伺服器那拿過來,這次我給你一個臨時的地址你去請求吧。

303代表什麼呢?

303 SeeOther  也是臨時重定向的一種,是不是很多小夥伴都懵逼了。什麼鬼啊,來看圖

面試常問有關響應狀態碼3XX

伺服器告訴你:‘你現在所請求的資源目前不在我這,被臨時放到某個地址的伺服器了,但是以後可能還有從某個伺服器那拿過來,這次我給你一個臨時的地址你去請求吧,不過你去哪請求的時候必須使用GET方法,這點與302狀態碼有區別。

比如,當時使用post方法訪問CGI程式,其執行後的處理結果是希望處理結果是希望客戶端能以get方法重定向另一個uri上去時,返回303狀態碼。雖然302Found狀態碼也可以實現相同的功能,但是303是最合理的。

當301、302、303響應狀態碼返回時,幾乎所有的瀏覽器都會把POST改成GET,並刪除請求報文內的主體,之後請求會自動再次傳送

307代表什麼呢?

307 Temporary Rediract臨時性重定向

臨時重定向。該狀態碼與302Found有著相同的含義。儘管302標準禁止POST變成GET,但實際使用時大家並不遵守。

307 會遵照瀏覽器標準,不會從post變成get。但是對於處理響應時的行為,每種瀏覽器有可能出現不同的情況

304 Not Modidied 英文直譯 沒有發生改變

304雖然屬於3xx類別中但是和重定向沒有關係,304 是一個非常好玩的狀態,當瀏覽器拿到狀態碼是304 的時候,就會從本地資源中拿請求的資源或者代理伺服器直接返回本地的資源,304屬於走快取,這個互動機制會在以後的文章寫出來,請大家多多關顧


相關文章