未击中任何代码,但仅在浏览器XHR请求中出现CORs问题

问题描述 投票:0回答:1

我有一个基于CakePHP的API。它在大多数情况下都有效,但浏览器偶尔会访问API一次。 XHR请求响应上的错误消息是:

'Access to XMLHttpRequest at 'http://be:8888/api/pings' from origin 'http://localhost:8080' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

但是,如果我通过POSTMAN发出完全相同的请求(或者,如果我直接浏览到URL,而不是通过XHR发出请求),那么它将毫无问题地工作。我认为这可能是预检OPTIONS问题,但请求标头未列出Request Method,而Apache访问日志显示这些是GET请求。 Apache错误日志中没有任何相关内容。

重新启动MAMP –即Apache –无法解决该问题,也无法刷新本地DNS缓存。唯一解决此问题的方法是重新启动,然后重新启动几个小时,然后最终再次闪烁。

我想不出是什么原因造成的。我认为这不是真正的CORS中间件错误,因为重新启动可以解决该错误,并且该API可以正常访问。另外,如果我在CORS中间件die方法中放入了__invoke,它不会走得太远(无论如何,应该首先击中webroot索引中的die)。

即使我通过将die('here');放在webroot index.php文件的开头来禁用应用程序,也会出现此错误。

即使删除index.php文件(在项目根目录和webroot中),以便浏览到URL都显示Apache的默认错误404 not found: The requested URL /webroot/index.php was not found on this server,当通过浏览器中的XHR尝试时,我仍然会收到CORS错误。

自升级到Mac OS X Catalina以来,我才注意到此问题。

可能是什么原因造成的?

[更新:]这证明它在系统重新启动后可以在浏览器中运行:

Summary
URL: http://be:8888/api/clients
Status: 200 OK
Source: Network
Address: ::1.8888

Request
GET /api/clients HTTP/1.1
Accept: application/vnd.api+json
Content-Type: application/vnd.api+json
Origin: http://localhost:8080
Accept-Language: en-gb
Access-Control-Allow-Origin: *
Host: be:8888
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.5 Safari/605.1.15
Referer: http://localhost:8080/
Accept-Encoding: gzip, deflate
Connection: keep-alive

但是,几个小时后,它停止工作。如果它实际上是一个CORS问题,我的理解是它将永远无法使用。

vue.js cakephp cakephp-3.0 macos-catalina mamp-pro
1个回答
0
投票

我不是Apache / PHP专业人士,但是请确保您通过HTTPS查询HTTPS,并通过http查询HTTP,换句话说,双方应该相同。另外,检查请求标头。并在请求标头中添加“ access-control-origin”。

© www.soinside.com 2019 - 2024. All rights reserved.