HTTP 200 OK和HTTP 304 Not modified的由來
這兩個欄位都和HTTP協議的快取控制相關。
瀏覽器快取機制是透過HTTP協議Header裡的Cache-Control(或Expires)和Last-Modified(或 Etag)等欄位來實現。
這兩個欄位的作用:
1. 接收響應時,瀏覽器決定檔案是否需要被快取;
2. 需要載入檔案時,瀏覽器決定是否需要發出請求的欄位。
看一些例子:
Cache-Control:max-age=115360000,表示快取有效期為115360000秒。如果115360000秒內需要再次請求這個檔案,瀏覽器不會發出向伺服器發出請求,而是直接使用本地的快取的檔案。這是HTTP/1.1標準中的欄位。
這總情況能在Chrome開發者工具的Network標籤頁裡看到from disk cache的提示:
從本地快取中讀取檔案非常快速,上面的例子只花費了6毫秒:
Expires: Thu, 31 Dec 2018 23:55:55 GMT,表示該檔案的過期時間是2018年12月31日晚上23點55分55秒,在這個時間之前瀏覽器都不會再次發出請求去獲取該檔案。這是HTTP/1.0中的欄位。
在Chrome開發者工具的network標籤頁裡能看到:
下面兩個欄位是發起請求時,伺服器決定檔案是否需要更新的欄位。
Last-Modified: Thu, 26 Jul 2018 05:41:21 GMT,這表示這個檔案最後的修改時間是2018年7月26日5點41分21秒。
瀏覽器會在下次請求的時候,把Last-Modified的值作為Request Header的If-Modified-Since欄位帶上。如果瀏覽器快取的檔案已經超過了Cache-Control(或者Expires),那麼需要載入這個檔案時,就會發出請求,請求的Header有一個欄位為If-Modified-Since,如下圖所示:
伺服器接收到請求後,會把檔案的Last-Modified時間和這個時間對比,如果時間沒變,那麼瀏覽器將返回304 Not Modified給瀏覽器:
如果時間有變化,那麼伺服器會返回200 OK,並返回相應的內容給瀏覽器。
下圖第9行的get_header_field方法是伺服器從瀏覽器傳送過來的HTTP請求提取頭部欄位If-Modified-Since的值。
下圖第16行的set_header_field方法是伺服器設定 Last-Modified頭部欄位的值。
下圖就是伺服器設定304 Not Modified響應的位置:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24475491/viewspace-2213495/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- HTTP狀態碼之200和304HTTP
- HTTP快取——304與200 from cacheHTTP快取
- 購物車(OK HTTP方法請求)HTTP
- 什麼是HTTP 304狀態程式碼?HTTP
- HTTP協議之:HTTP/1.1和HTTP/2HTTP協議
- HTTP1.0,HTTP1.1,HTTPS和HTTP2.0的區別HTTP
- 什麼是HTTP? HTTP 和 HTTPS 的區別?HTTP
- HTTP/3 都來了,你卻還在用 HTTP/1.1?HTTP
- 修復HTTP 304錯誤狀態碼5種方法介紹HTTP
- HTTP、HTTP1.1、HTTP/2的區別HTTP
- HTTP請求格式和HTTP響應格式HTTP
- 【轉載】CL_HTTP_CLIENT的HTTP和SOAP用法示例HTTPclient
- X-HTTP-Method-Override和Http Extension框架HTTPIDE框架
- HTTp和ftp的區別HTTPFTP
- tcp和http的區別TCPHTTP
- websocket和http的區別WebHTTP
- HTTP2和HTTPS來不來了解一下?HTTP
- HTTP 和 HTTPSHTTP
- HTTPS和HTTPHTTP
- HTTP和HTTPSHTTP
- 03 前端HTTP協議(圖解HTTP) 之 HTTP報文內的HTTP資訊前端HTTP協議圖解
- 使用 request 和 cheerio 庫來傳送 HTTP 請求HTTP
- http和https的區別?HTTP
- HTTPS和HTTP的區別HTTP
- HTTPS 和 HTTP 的區別HTTP
- HTTPS 和HTTP的介紹HTTP
- http中的cookie和session概念HTTPCookieSession
- HTTP 和 HTTPS 的異同HTTP
- HTTP和IIOP誰的效率更高。HTTP
- http和https的區別HTTP
- UDP和TCP以及HTTPUDPTCPHTTP
- 深入理解http1.x、http 2和httpsHTTP
- node.js http.get 和http.post 資料Node.jsHTTP
- 強制快取(200)和協商快取(304)快取
- HTTP發展史,HTTP1.1與HTTP2.0的區別HTTP
- 從HTTP/0.9到HTTP/2:一文讀懂HTTP協議的歷史演變和設計思路HTTP協議
- 《圖解HTTP》——簡單的HTTP協議圖解HTTP協議
- 《圖解HTTP》—簡單的HTTP協議圖解HTTP協議