来自 iOS 的 OPTIONS 请求
OPTIONS requests from iOS
我在 Django 上有一个 Web 应用程序,它对服务器进行大量异步调用。
它在除 Safari 之外的所有浏览器中运行良好,特别是在 iOS 用户报告至少间歇性问题的地方。
看来问题可能源于 Safari 发送 OPTIONS
请求。这是来自 Apache 日志的片段(为匿名而编辑):
172.31.34.143 - - [20/Jun/2017:14:12:46 +0100] "OPTIONS /asyncservice/ HTTP/1.1" 500 245 "http://www.example.com/app/" "Mozilla/5.0 (iPhone;
CPU iPhone OS 10_3_2 like Mac OS X) AppleWebKit/603.2.4 (KHTML, like
Gecko) Version/10.0 Mobile/14F89 Safari/602.1"
有没有人遇到过这种情况,有解决办法吗?
我可能已经解决了这个问题。
有一个请求 header 由 JavaScript 设置,发送 Django CRSF(跨站请求伪造)保护 header。
Safari 看到此 header,无法识别它并发送所谓的预检请求,OPTIONS 请求。
Apache 拒绝此请求,理由是 Safari 没有通过 OPTIONS 请求发送正确的来源(为什么它不模糊 - 在我看来它真的像是 Safari 中的一个错误。)
Safari 得到 500 分并断定 POST 请求具有欺诈性并拒绝执行。
鉴于发出请求的原因是 Safari 无法识别 Django CRSF header,允许 Apache 从任何来源接收并信任 Django 处理带有 CRSF 的错误请求似乎是合理的。
因此,我已将 Apache 配置为允许来自任何来源,如下所示:
Header add Access-Control-Allow-Origin "*"
Header add Access-Control-Allow-Headers "origin, x-requested-with, content-type"
Header add Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS"
到目前为止,这 500 人中有 none 人,但还处于早期阶段。
我在 Django 上有一个 Web 应用程序,它对服务器进行大量异步调用。
它在除 Safari 之外的所有浏览器中运行良好,特别是在 iOS 用户报告至少间歇性问题的地方。
看来问题可能源于 Safari 发送 OPTIONS
请求。这是来自 Apache 日志的片段(为匿名而编辑):
172.31.34.143 - - [20/Jun/2017:14:12:46 +0100] "OPTIONS /asyncservice/ HTTP/1.1" 500 245 "http://www.example.com/app/" "Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_2 like Mac OS X) AppleWebKit/603.2.4 (KHTML, like Gecko) Version/10.0 Mobile/14F89 Safari/602.1"
有没有人遇到过这种情况,有解决办法吗?
我可能已经解决了这个问题。
有一个请求 header 由 JavaScript 设置,发送 Django CRSF(跨站请求伪造)保护 header。
Safari 看到此 header,无法识别它并发送所谓的预检请求,OPTIONS 请求。
Apache 拒绝此请求,理由是 Safari 没有通过 OPTIONS 请求发送正确的来源(为什么它不模糊 - 在我看来它真的像是 Safari 中的一个错误。)
Safari 得到 500 分并断定 POST 请求具有欺诈性并拒绝执行。
鉴于发出请求的原因是 Safari 无法识别 Django CRSF header,允许 Apache 从任何来源接收并信任 Django 处理带有 CRSF 的错误请求似乎是合理的。
因此,我已将 Apache 配置为允许来自任何来源,如下所示:
Header add Access-Control-Allow-Origin "*" Header add Access-Control-Allow-Headers "origin, x-requested-with, content-type" Header add Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS"
到目前为止,这 500 人中有 none 人,但还处于早期阶段。