CORS OPTIONS请求成功,但在Safari中挂起

时间:2016-10-31 09:29:02

标签: javascript php angular cors laravel-5.3

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

我正在从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挂起。我该怎么办?

2 个答案:

答案 0 :(得分:2)

尝试返回204 No Content,这对我有用。 在一些例子中发现它没有进一步的解释。

答案 1 :(得分:2)

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

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