2011-09-23 68 views
0

我們有一個通過HTTP獲取資源的Java進程。即使在客戶端修改後,我發現一個資源仍然無法正確提取。深入研究我發現在服務器上進程運行資源的Last-Modified日期與我在瀏覽器中查看信息時看到的不一致。然後我試着從另一臺服務器上取出它,我的筆記本電腦和這兩臺顯示的都是正確的日期。Http HEAD在不同的服務器上爲同一資源返回不同的Last-Modified日期,爲什麼?

我已經補丁過程,以允許選項忽略頭部日期的情況下,當它存在(但將不正確),但我真的很想知道爲什麼發生這種情況。

此處參考的是來自服務器的返回錯誤信息的curl響應。

HTTP/1.1 200 OK 
Server: Sun-ONE-Web-Server/6.1 
Date: Fri, 23 Sep 2011 14:16:57 GMT 
Content-length: 132 
Content-type: text/plain 
Last-modified: Wed, 15 Sep 2010 21:58:20 GMT 
Etag: "84-4c91417c" 
Accept-ranges: bytes 

然後在不同的服務器上相同的請求(也讓我的機器上的相同的結果)

HTTP/1.1 200 OK 
Server: Sun-ONE-Web-Server/6.1 
Date: Fri, 23 Sep 2011 14:18:47 GMT 
Content-length: 132 
Content-type: text/plain 
Last-modified: Fri, 23 Sep 2011 01:20:43 GMT 
Etag: "84-4e7bdeeb" 
Accept-ranges: bytes 

兩個服務器都在Fedora 10上運行

任何人都可以提供一些線索對我而言,我如何能夠解決這個長期問題?

回答

0

所以你有2個服務器,並返回不同的結果,即不一致的問題(我基本上可以從Etag頭看到這個)?

我的第一個猜測是緩存。任何緩存是否處於活動狀態?可能是緩存的無效值無法正常工作或ttl(生存時間)設置太長。

由於測試有一個嘗試和新的重啓機器陳舊的數據,並看看是否結果改變(通常在重啓系統大多數簡單的緩存設置刷新)。

資源來自哪種類型的後端(數據庫,文件系統,第三方服務)?

+0

嗨,對不起,我一直很忙,沒有檢查這個。我不熟悉在服務器上運行的任何緩存,我不得不嘗試深入瞭解。你知道Linux機器上默認運行的任何服務嗎?至於有問題的資源,它只是託管在第三方Web服務器上的文件系統上的文本文件。 –

+0

它是什麼類型的文件系統(像NFS這樣的網絡)?你如何訪問該文件?我想知道爲什麼使用Sun-ONE-Web-Server。默認情況下,大多數Linux發行版都附帶Apache。你自己安裝了嗎?也許你可以告訴更多你的需求(你是否簡單地通過HTTP「隧穿」文件內容)? –

+0

它來自Sun Web服務器,因爲我們正在提取的文件位於第三方網站上。這只是一個文本文件,存在於他們的Web服務器上。正如我所提到的,我們有一個定期讀取此文件的Java進程,但即使使用CURL從命令行中獲取文件頭信息,我也會得到相同的舊頭文件日期。所以這不能與Apache有任何關係,我不認爲它甚至不在該服務器上運行。我想也許你的意思是有一些通用的緩存過程,這是我可能不熟悉的Linux過程。 –

相關問題