[英]How to get 304 response for PHP generated javascript file?
我有以下PHP文件:
<?php
Header('Content-Type: application/javascript');
echo "// Some dynamically generated JavaScript here...";
因此,它是一個.php文件,但被解釋為JavaScript文件。 我將其加載到網頁中,如下所示:
<script type='text/javascript' src='myjavascript.php'></script>
我的問題是關於訪問此文件時發送的HTTP代碼。 每當我請求此文件時(直接或通過請求該文件的網頁),Chrome開發工具都會顯示“狀態為200 OK”。 即使內容沒有更改,也永遠不會是304。
在內容未更改的情況下,是否可以為動態生成的文件獲得“ 304未修改”? 如果沒有,為什么?
我還使用了一些/js/myjavascript.js
,它們允許諸如/js/myjavascript.js
路由。 因此,我可以將上述代碼放入該路由中,以相同的方式動態生成JavaScript。 但是同樣,每次仍然是200,即使內容沒有更改並且URI是一個.js文件。
有解決方案嗎? 以我的情況,此javascript / php文件的內容每天大約更改一次。 因此,我需要訪問者的瀏覽器大部分時間來緩存文件(304未修改),但是當文件確實發生更改時,我需要他們的瀏覽器下載並緩存新版本(200 OK)。
僅當客戶端在請求中包含If-Modified-Since
標頭時,才應發送304 Not Modified
標頭。
我有一個PHP腳本,該腳本始終生成相同的一致輸出(恰好是image / png),具體取決於重寫規則將哪些選項提供給它。 對於我的腳本,我假設ANY If-Modified-Since
在瀏覽器中反映有效的緩存數據,因此我的腳本包括:
// If they've got it, they should use it.
if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) && strlen($_SERVER['HTTP_IF_MODIFIED_SINCE'])) {
header("HTTP/1.0 304 Not Modified");
exit;
}
如果您想對此變得更聰明,則可以解析變量並將其與對腳本重要的內容進行比較。 您需要考慮如何在PHP腳本的上下文中檢測內容是否已更改 ,PHP腳本在每次運行時都會動態生成內容。
有關如何在PHP中使用瀏覽器緩存的其他知識,請查看有關PHP: header
注釋 。
您可以從命令行使用cURL
測試此行為:
[ghoti@pc ~]$ curl -sL -w "%{http_code} %{url_effective}\\n" https://www.google.com/images/srpr/logo3w.png -o /dev/null
200 https://www.google.com/images/srpr/logo3w.png
[ghoti@pc ~]$ curl -H"If-Modified-Since: Sat, 31 Dec 2011 00:00:00 GMT" -sL -w "%{http_code} %{url_effective}\\n" https://www.google.com/images/srpr/logo3w.png -o /dev/null
200 https://www.google.com/images/srpr/logo3w.png
[ghoti@pc ~]$ curl -H"If-Modified-Since: Mon, 31 Dec 2012 00:00:00 GMT" -sL -w "%{http_code} %{url_effective}\\n" https://www.google.com/images/srpr/logo3w.png -o /dev/null
304 https://www.google.com/images/srpr/logo3w.png
[ghoti@pc ~]$
注意不同的日期。
如果您在使用Chrome時遇到麻煩,認為發送的標題不夠,您可以嘗試復制其他流行的網站以標題的方式提供的信息:
[ghoti@pc ~]$ curl -H"If-Modified-Since: Mon, 31 Dec 2012 00:00:00 GMT" -sLI https://www.google.com/images/srpr/logo3w.png
HTTP/1.1 304 Not Modified
Date: Wed, 05 Dec 2012 17:40:52 GMT
Expires: Thu, 13 Dec 2012 17:40:52 GMT
Age: 241012
Server: GFE/2.0
毫無疑問, Server:
可以忽略不計,但是如果包括其他三個,您對Chrome的抱怨可能會更少。 但是,正如我所說,您將不得不使用要用來確定動態生成內容的“年齡”的標准,因為由Apache檢測到的靜態文件的文件系統時間戳不再可用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.