這是一件危險而容易的事,我覺得我應該知道更多關於 - 但我沒有,也找不到很多。瀏覽器如何知道網頁已更改?
現在的問題是:瀏覽器如何知道網頁已更改?
直觀地說,我會說F5刷新給定頁面的緩存,並且該緩存僅用於歷史導航,並且有一個到期日期 - 這導致我認爲瀏覽器從不知道網頁是否已更改,並且它只是在緩存不存在的情況下重新加載頁面---但我確定情況並非總是如此。
任何指針讚賞!
這是一件危險而容易的事,我覺得我應該知道更多關於 - 但我沒有,也找不到很多。瀏覽器如何知道網頁已更改?
現在的問題是:瀏覽器如何知道網頁已更改?
直觀地說,我會說F5刷新給定頁面的緩存,並且該緩存僅用於歷史導航,並且有一個到期日期 - 這導致我認爲瀏覽器從不知道網頁是否已更改,並且它只是在緩存不存在的情況下重新加載頁面---但我確定情況並非總是如此。
任何指針讚賞!
瀏覽器通常會通過與頁面一起發送的HTTP頭獲取此信息。
例如,Last-Modified標頭告訴瀏覽器頁面有多大。瀏覽器可以向頁面發送一個簡單的HEAD請求以獲取最後修改的值。如果它比瀏覽器在緩存中的更新,那麼瀏覽器可以重新加載它。
還有一些與緩存相關的其他頭文件(如Cache-Control)。退房時間:http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html
+1比我的回覆更詳細,同樣的想法雖然...好的回答 – LorenVS
需要注意的一點是,現代瀏覽器幾乎從不會自行發送頭部請求。在調試應用程序並通過瀏覽器訪問它時,我從來沒有見過頭部請求 - https://stackoverflow.com/questions/33444413/do-any-modern-browsers-ever-issue-an-http-head-request –
Web瀏覽器發送HTTP請求並接收HTTP響應。然後他們顯示HTTP響應的內容。通常,HTTP響應將包含HTML。許多HTML元素可能需要新的請求來接收頁面的各個部分。例如,每個圖像通常是另一個HTTP請求。
有HTTP頭指示頁面是否是新的。例如上次修改日期。 Web瀏覽器通常使用條件GET
(條件標頭字段)或HEAD
請求來檢測更改。 HEAD
請求只接收標頭,而不是請求的實際資源。
有條件GET
如果沒有更改,HTTP請求將返回狀態304 Not Modified
。
頁可後來更改基於:
您正沿着正確的軌道前進,正如Jonathan所說,沒有比閱讀文檔更好的了。但是,如果您只需要更多信息:
有一些HTTP響應標頭可讓服務器設置頁面的可緩存性,該頁面屬於您的到期日期系統。但是,另一個重要的構造是HTTP HEAD請求,它基本上檢索給定頁面的MIME類型和內容長度(如果可用)。瀏覽器可以使用HEAD請求驗證什麼是他們的緩存...
有關於這個問題肯定更多信息的,所以我建議閱讀文檔...
喔,你問如何做了瀏覽器知道網頁是否已更新,因此它不會顯示舊網頁。那麼我的猜測是,它會在每次加載時獲得新鮮的HTML,但是如果圖像或其他內容發生更改,它將不會知道,直到緩存被強制刷新或刪除。 (只是一個猜測) –
*不要猜測* –
只是要知道,並非所有的網站都尊重'最後修改'和/或'Etag'HTTP頭...直到最近,Stackoverflow.com didn'要麼! – jldupont