2010-01-13 44 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