簡體   English   中英

如何獲得PHP生成的javascript文件的304響應?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM