假設我有兩個重定向到相同文件的URL(分別託管在2個服務器上),並且我從其中一個url下載了該文件。當我點擊另一個URL(檢查系統中,如果文件存在),是否可以避免再次下載同一個文件?有沒有什麼辦法來檢查網址,如果該文件已被下載?
主要目標是優化數據使用並消除冗餘。
我讀了關於md5檢查文件,但我可以計算互聯網上的文件的MD5校驗和,而無需下載它?
假設我有兩個重定向到相同文件的URL(分別託管在2個服務器上),並且我從其中一個url下載了該文件。當我點擊另一個URL(檢查系統中,如果文件存在),是否可以避免再次下載同一個文件?有沒有什麼辦法來檢查網址,如果該文件已被下載?
主要目標是優化數據使用並消除冗餘。
我讀了關於md5檢查文件,但我可以計算互聯網上的文件的MD5校驗和,而無需下載它?
無法在不下載文件的情況下計算md5散列,不。
你可以做的,雖然是什麼,是檢查是否重定向的URL是一樣的,使用方法geturl()
:
if urlopen(url1).geturl() == urlopen(url2).geturl():
print("It's the same file")
如果同一個文件託管在兩臺不同的服務器上,並且兩臺服務器有不同的網址,但文件相同,該怎麼辦? – Stoneman2242
@ Aaron2048不幸的是,沒有辦法檢測到。 –
您可以使用Etag HTTP頭。
一個ETag是一個不透明的標識符,由網絡服務器分配給一個URL中找到的特定的 版本的資源。如果該URL處的資源表示 發生更改,則會分配一個新的不同的ETag。以這種方式使用 ETags與指紋相似,並且它們可以快速地比較以確定資源的兩個表示是否相同。
然而
在HTTP報頭中的使用ETag的是可選的(不是強制的與所述 HTTP 1.1報頭的某些其他字段)。 HTTP規範中從未指定生成ETags 的方法。
對於託管在名稱不同的兩臺獨立服務器上的文件,ETag是否會相同? – Stoneman2242
@ Aaron2048你不能依賴那個。正如答案中所述,ETag生成方法是未指定的。因此,不同的服務器可能使用不同的方法 – Leon
你實際上不能。 – sobolevn