【问题标题】:CORS OPTIONS Request Successful, but Hangs in SafariCORS OPTIONS 请求成功,但在 Safari 中挂起
【发布时间】:2017-03-13 09:03:01
【问题描述】:

CORS 的 Safari (10 - OSX El Capitan) 问题

我正在做一个从 AngularJS 前端到 Laravel 后端的 CORS POST 请求。

  • 在 Chrome 和 Firefox 中,OPTIONS 和 POST 请求都返回 http 状态 200 OK
  • 在 Safari 10 (OSX) 中,OPTIONS 和 POST 请求都返回 http 状态 200 OK,但 OPTIONS 请求继续加载(http 状态 200 OK!)

请求标头

Accept:*/*
Accept-Encoding:gzip, deflate, sdch
Accept-Language:nl-NL,nl;q=0.8,en-US;q=0.6,en;q=0.4
Access-Control-Request-Headers:content-type
Access-Control-Request-Method:POST
Cache-Control:no-cache
Connection:keep-alive
Host:x.local
Origin:http://y.local
Pragma:no-cache
Referer:http://y.local/

响应标头

Access-Control-Allow-Headers:Origin, X-Requested-With, Content-Type, Accept
Access-Control-Allow-Methods:POST, GET, OPTIONS, PUT
Access-Control-Allow-Origin:*
Cache-Control:no-cache
Connection:keep-alive
Content-Length:16
Content-Type:application/json
Date:Mon, 31 Oct 2016 09:22:51 GMT
Server:nginx/1.11.1

在我获得 http 状态 200 OK(OPTIONS 请求)后,Safari 挂起。我该怎么办?

【问题讨论】:

标签: javascript php angular cors laravel-5.3


【解决方案1】:

尝试返回 204 No Content,这对我有用。 在一些例子中可以找到,没有进一步的解释。

【讨论】:

  • 这在我的情况下有效。如该线程的其他答案中所述,我已经将“接受”发送到浏览器。服务 204 工作正常,谢谢!
【解决方案2】:

确保您已将 Accept 标头添加到您的 CORS AllowedHeaders 选项中。这为我解决了。

您的请求的 Accept 标头为 /,但您的 CORS 选项根本无法处理它。像 Chrome 这样的现代浏览器可以在没有标题的情况下工作,但 Safari 并没有保持最新状态。

【讨论】:

  • 我遇到了与 OP 类似的问题。您的回答对我有所帮助,但我想澄清一下,我已经在我的 CORS Allowed-Headers 中使用了 *。这没有用。相反,我现在使用了Accept, (...more headers),它成功了。
猜你喜欢
  • 2014-09-28
  • 2014-09-07
  • 2018-03-20
  • 2017-05-24
  • 2015-06-11
  • 2018-12-22
  • 2021-02-21
  • 2014-08-02
  • 1970-01-01
相关资源
最近更新 更多