http - iTunes 范围请求;播客被拒绝

标签 http http-headers itunes podcast

我正在尝试将一个播客添加到 itunes 中,该播客正在处理字节范围请求。我可以通过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: *

但是,当我尝试将 feed 页面的 URL 输入 iTunes 时,出现以下错误:

"There is a problem with your feed. Your episodes are hosted on a server which doesn't support byte-range requests. Enable byte-range requests and try your submission again."

音频文件托管在与提要文件不同的服务器上,并且由节点服务器提供服务...但我不明白为什么只要响应 header 正确,这就很重要。

我还有一些其他播客从同一服务器提供,这些播客是在 iTunes 开始需要字节范围支持之前添加的,并且它们仍然可以正常工作(在任何平台上,包括 iPhone,这表明字节范围请求确实有效)。

最佳答案

如果响应 header 的 HTTP 状态为 200 ,那么即使服务器正在接受字节范围请求,iTunes 也会拒绝播客。我所要做的就是强制 206 Partial Response header 。在 Node 中,它看起来像这样(CoffeeScript):

res.writeHead 206, headers

headers是包含字节范围请求的所有正确 header 的哈希,例如:

headers:
  "Accept-Ranges": "bytes"
  "Content-Range": "bytes #{start}-#{end}/#{length}

startend变量是通过解析 Range 获取的请求 header ,以及 length是音频文件的实际大小。我还投入了"Cache-Control": "no-cache"为了更好的衡量。

关于http - iTunes 范围请求;播客被拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11978335/

相关文章:

android - 识别浏览器移动版本的最佳方法

xcode - Swift 和 scriptingbridge 对象初始化

http - Solr 中多个过滤器查询与一个过滤器查询的性能差异

http - 如何重试 HTTP POST 请求

java - apache httpget 毫无异常(exception)地中断

java - 如何使用内容类型 XML 和查询参数触发 HTTP post?

linux - .htaccess 中的安全 header 在 EasyApache4/Apache 2.4 和 PHP 7.0 中不起作用

iPhone 从内置应用程序读取音频

iphone - 如何将 iOS 无线 (OTA) 版本同步回 iTunes?

security - 计算机是否部署了预先计算的素数列表