2016-07-27 22 views
0

假設我有兩個重定向到相同文件的URL(分別託管在2個服務器上),並且我從其中一個url下載了該文件。當我點擊另一個URL(檢查系統中,如果文件存在),是否可以避免再次下載同一個文件?有沒有什麼辦法來檢查網址,如果該文件已被下載?

主要目標是優化數據使用並消除冗餘。

我讀了關於md5檢查文件,但我可以計算互聯網上的文件的MD5校驗和,而無需下載它?

+1

你實際上不能。 – sobolevn

回答

1

無法在不下載文件的情況下計算md5散列,不。

你可以做的,雖然是什麼,是檢查是否重定向的URL是一樣的,使用方法geturl()

if urlopen(url1).geturl() == urlopen(url2).geturl(): 
    print("It's the same file") 
+0

如果同一個文件託管在兩臺不同的服務器上,並且兩臺服務器有不同的網址,但文件相同,該怎麼辦? – Stoneman2242

+0

@ Aaron2048不幸的是,沒有辦法檢測到。 –

2

您可以使用Etag HTTP頭。

一個ETag是一個不透明的標識符,由網絡服務器分配給一個URL中找到的特定的 版本的資源。如果該URL處的資源表示 發生更改,則會分配一個新的不同的ETag。以這種方式使用 ETags與指紋相似,並且它們可以快速地比較以確定資源的兩個表示是否相同。

然而

在HTTP報頭中的使用ETag的是可選的(不是強制的與所述 HTTP 1.1報頭的某些其他字段)。 HTTP規範中從未指定生成ETags 的方法。

+0

對於託管在名稱不同的兩臺獨立服務器上的文件,ETag是否會相同? – Stoneman2242

+0

@ Aaron2048你不能依賴那個。正如答案中所述,ETag生成方法是未指定的。因此,不同的服務器可能使用不同的方法 – Leon

相關問題