我正在尝试向itunes添加一个podcast,它处理字节范围的请求。我可以通过对音频文件进行curl来确认这一点:
curl -H "Range: bytes=50-100" --head http://media.site.org/podcasts/upload/2012/08/15/audio-081512.mp3
HTTP/1.1 200 OK
Server: nginx/1.2.0
Date: Wed, 15 Aug 2012 22:28:40 GMT
Content-Type: audio/mpeg
Content-Length: 51
Connection: keep-alive
X-Powered-By: Express
Status: 206 Partial Content
Accept-Ranges: bytes
Content-Range: bytes 50-100/1441605
Access-Control-Allow-Origin: *但是,当我试图在iTunes中输入提要页面的URL时,我会得到以下错误:
“你的提要有问题。你的节目是托管在一台不支持字节范围请求的服务器上的。启用字节范围请求,然后再试一次提交。”
音频文件托管在与提要文件不同的服务器上,并且由节点服务器提供.但是,我不明白为什么只要响应头是正确的,这就应该很重要。
我有来自同一服务器的其他播客,这些播客是在iTunes开始要求字节范围支持之前添加的,它们仍然工作正常(包括在任何平台上,包括iPhone,表明字节范围请求确实正常工作)。
发布于 2012-08-16 01:01:39
如果响应头的HTTP状态为200,那么即使服务器接受字节范围的请求,iTunes也会拒绝播客。我所要做的就是强制一个206 Partial Response头。在Node中,它看起来如下(CoffeeScript):
res.writeHead 206, headersheaders是包含字节范围请求的所有适当头的散列,如:
headers:
"Accept-Ranges": "bytes"
"Content-Range": "bytes #{start}-#{end}/#{length}start和end变量是通过解析Range请求头来获得的,而length是音频文件的实际大小。我还提交了"Cache-Control": "no-cache"作为一个很好的标准。
https://stackoverflow.com/questions/11978335
复制相似问题