【问题标题】:AVPlayer fails to send a cookie for the same domain after 302 redirectAVPlayer 在 302 重定向后无法为同一个域发送 cookie
【发布时间】:2013-06-07 20:48:05
【问题描述】:

我正在使用 iOS AVPlayer 播放 HLS 流。在 HLS 会话开始时,当我收到 index.m3u8 URL 以响应创建 AVPlayerItem 时,响应还设置了基于会话的身份验证所需的 cookie。假设这个 cookie 名称是 myCookie,它是为域“.myhost.com”创建的。现在一切正常,播放器发送 myCookie 以从 xxx.myhost.com/stream 下载 ts 块。随着播放的进行,播放列表最终会更新,播放器会下载更新的播放列表。有时更新的播放列表包含一个 ts 块,可以从另一个主机的 URL 下载。因此,在尝试使用不同的主机播放块时,播放器请求 xxx.someotherhost.com 下载块。这会导致响应 302 重定向到 location:xxx-abc.myhost.com/ads。显然,AVPlayer 在从 someotherhost.com 请求块时不会发送 myCookie,因为它与 myCookie 的域不匹配。但问题是重定向到 xxx-abc.myhost.com/ads 后,即使重定向 URL 的域也是与 cookie 的域匹配的 myhost.com,AVPlayer 也不会发送 myCookie。

请注意,重定向 URL 域与原始流域相同,也与 myCookie 的域相同。由于 AVPlayer 重定向后不发送 cookie 下载块,因此 ts 块请求失败并显示 403 Forbidden (No Token)

我在这里做错了什么还是这看起来像是 iOS AVPlayer 中的一个错误?

有没有办法解决这个问题?请分享你的想法。

【问题讨论】:

  • 这可能有帮助,也可能没有帮助...我们的身份验证服务返回了一个 cookie,然后我们用它来保持用户登录。我们需要为多个域使用相同的 cookie,所以当我们得到初始作为响应,我们复制 cookie,更改副本上的域,并将其添加到共享 cookie 存储中。如果您可以检测到新主机,找到现有的 cookie,然后复制数据只是更改域,似乎您可能会做类似的事情来防止初始重定向?
  • Matt,感谢您的快速回复,但是在发布此问题之前我已经尝试过相同的操作。但是我为不同的域创建的重复 cookie 在从不同的域 URL 请求块时以某种方式没有被 AVPlayer 拾取,导致 302。这里的主要问题是 AVPlayer 被重定向到已经存在 cookie 的域但是为什么AVPlayer 重定向后不发送。原始cookie的域为.myhost.com,重定向后,请求的主机为.myhost.com,只是子域不同,但cookie没有发送出去。
  • 您是否向 Apple 提交了错误报告?听起来他们确实忘记在重定向期间检查 cookie jar。
  • vipw,还没有。我想首先确定是否有一种解决方法/黑客可以在客户端中修复它。否则最后的手段是向 Apple 提交错误报告。
  • indiantroy,我能想到的唯一解决方法是使用本地 http 代理来缓存客户端 cookie 并在重定向后重新插入它们。解决一个相当小的错误需要付出很多努力。

标签: ios objective-c avplayer http-live-streaming nshttpcookie


【解决方案1】:

制作演示问题的示例,提交错误报告。然后创建一个提及 Radar 的 DTS 事件,并且您正在为您认为是错误的问题寻找解决方法。

这开辟了两种可能性:

  • 工程师可以确认错误 - 如果未知,他们会修复它,如果是重复的,您可以请求原件的状态信息
  • DTS 知识渊博,能够询问实际的 AV 工程师如何解决问题

这样,您花更少的时间寻找可能不会得到除此之外的任何其他答案的地方。

【讨论】:

    猜你喜欢
    • 2011-06-15
    • 1970-01-01
    • 2017-04-08
    • 1970-01-01
    • 2018-02-02
    • 2017-11-18
    • 2021-08-08
    • 1970-01-01
    • 2018-09-13
    相关资源
    最近更新 更多