我收到 CORS 错误但实际上不是 CORS 错误(更像是 504)的原因可能是什么?
What can be reason I got CORS error but it was actually NOT a CORS error (more like a 504)?
我收到 CORS 错误但实际上不是 CORS 错误的原因是什么?请参考以下图片了解我的意思:
控制台输出请求已被 CORS 阻止的错误 policy:No 'Access-Control-Allow-Origin' header 存在于请求的资源上。
但实际上并非如此。 'Access-Control-Allow-Origin' header 是响应 header.
这是因为 php 代码写道,
$response->header('Access-Control-Allow-Origin', $request->server('HTTP_ORIGIN'));
与 Access-Control-Allow-Origin:*
基本相同
但是对于那个错误请求,响应是,即没有响应。
原因实际上是 php 进程被 PHP Fatal error: Allowed memory exhausted
挂起
我假设在这种情况下我会得到 504 网关超时,即上游没有响应。但为什么控制台反而输出 CORS 错误?
您正在查看来自服务器的成功响应,其中确实包含正确的 CORS header。
检查 header 次失败的请求。由于它是内部 PHP 错误(达到内存限制),因此永远不会达到添加 CORS 的代码。
所以最后:
- 服务器无法添加 CORS headers,出现 5XX 错误
- 浏览器由于缺少 CORS 而阻止响应处理
我收到 CORS 错误但实际上不是 CORS 错误的原因是什么?请参考以下图片了解我的意思:
控制台输出请求已被 CORS 阻止的错误 policy:No 'Access-Control-Allow-Origin' header 存在于请求的资源上。
但实际上并非如此。 'Access-Control-Allow-Origin' header 是响应 header.
这是因为 php 代码写道,
$response->header('Access-Control-Allow-Origin', $request->server('HTTP_ORIGIN'));
与 Access-Control-Allow-Origin:*
但是对于那个错误请求,响应是,即没有响应。
原因实际上是 php 进程被 PHP Fatal error: Allowed memory exhausted
我假设在这种情况下我会得到 504 网关超时,即上游没有响应。但为什么控制台反而输出 CORS 错误?
您正在查看来自服务器的成功响应,其中确实包含正确的 CORS header。
检查 header 次失败的请求。由于它是内部 PHP 错误(达到内存限制),因此永远不会达到添加 CORS 的代码。
所以最后:
- 服务器无法添加 CORS headers,出现 5XX 错误
- 浏览器由于缺少 CORS 而阻止响应处理