vue.js - 在命中任何代码之前出现 COR 问题,但仅限于浏览器 XHR 请求
问题描述
我有一个基于 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 问题,但请求标头没有列出 aRequest Method
并且 Apache 访问日志显示这些是 GET 请求。Apache 错误日志中没有任何相关内容。
重新启动 MAMP(即 Apache)并不能解决问题,也不能刷新本地 DNS 缓存。修复它的唯一方法是重新启动,之后它会再次正常工作几个小时,然后最终再次闪烁。
我想不出是什么原因造成的。我认为这不是真正的 CORS 中间件错误,因为重新启动修复了它并且 API 可以正常访问。此外,如果我die
在 CORS 中间件__invoke
方法中加入,它不会走得那么远(无论如何都应该首先击中 webroot 索引中的骰子)。
即使我通过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 问题,我的理解是它永远不会起作用。
解决方案
我不是 Apache/PHP 专业人士,但请确保您通过 HTTPS 查询 HTTPS 和通过 http 查询 http,换句话说,双方应该相同。另外,检查请求标头。并在请求标头中添加“access-control-origin”。
推荐阅读
- anaconda - sklearn 中的数据重塑(线性回归)
- c - 合并错误 + 警告
- java - 方法未覆盖或实现超类型 @override 编译错误中的方法
- python - python程序不使用JSON信息打印
- hadoop - Apache Ignite:如何在服务器节点关闭时将客户端节点的连接实例设置为“NULL”?
- r - 如何使用分类和数值数据创建层次集群是 R?
- logging - 为 Web 服务上的一种方法禁用 CXF 日志记录
- angular - 角度:模块元数据版本不匹配中的错误
- r - 如何编写一个循环来为具有栅格基础的 shapefile 的每个 id 创建裁剪栅格?
- javascript - Redux-form 没有自动接收 onChange