2010-01-13 63 views
1

目前我有一個網絡應用程序,它可以檢索外部服務器上的mp3的URL,但爲了節省數據我想首先檢查我的服務器正在檢索的頁面是實際一個重定向,而不是實際的內容(所以我可以抓住mp3的URL而不是實際的mp3本身防止下載http內容主體

外部PHP腳本要求將json數據發送給它,使得難以讓客戶端執行它本身

問題是,雖然外部PHP腳本通常重定向到一個標準的URL來GET,有時它返回實際的MP3本身,使用你p我的帶寬,而不是用戶的。

什麼是最好的解決方案來解決這個問題,讓我不浪費我的帶寬?

謝謝。

+0

假設不支持HEAD方法,並且由於大多數PHP HTTP客戶端(比如cURL)會盡職盡責地完成整個請求,所以可能會減少打開原始套接字,手動發送POST以及手動解析迴應你自己。至少這樣,您可以在擁有所有標題後強制連接關閉,而無需下載整個主體。 – 2010-01-13 13:58:05

+0

如果除了HEAD請求(並且爲了良好的度量,範圍:0-1頭部),定義了捲曲寫入回調(CURLOPT_WRITEFUNCTION),該回調簡單地返回-1,則如果服務器發送curl將發送的內容FIN,ACK並退出確認來自服務器的更多數據包。即使服務器不遵守FIN(它可能不會,因爲它已經忽略了第一個FIN),它會在幾個未確認的數據包之後放棄。不完美,但不是很多浪費的帶寬,無論是。 – GZipp 2010-01-13 19:30:49

回答

1

最好的解決方案是使用Http動詞HEAD。

RFC2616

的HEAD方法等同於GET 不同的是在響應服務器不能返回 消息正文。

但是,問題是,遠程服務器是否支持HEAD?

+1

考慮到OP的聲明,「外部PHP腳本要求將json數據發佈給它」(大概URL本身不足以識別有問題的資源),而且我所經歷的大多數PHP腳本忽略了正確的事實對HEAD的支持,這可能是不可能的。 – 2010-01-13 13:55:36

+0

你可能是對的。很遺憾,HTTP很少被使用。它正確解決了很多問題。 – 2010-01-13 14:33:00