移动 Chrome 上的 CORS Allow-Access-Control-Origin
Posted
技术标签:
【中文标题】移动 Chrome 上的 CORS Allow-Access-Control-Origin【英文标题】:CORS Allow-Access-Control-Origin on Mobile Chrome 【发布时间】:2018-04-03 06:20:50 【问题描述】:当我使用 Chrome 试用我的新响应式网络应用时,我在移动设备上遇到错误。从以几种不同的方式添加 php 标头到在我的 ajax 请求中传递标头,我已经完成了所有工作。在网络上,我使用了 CORS 切换,这是一个 Chrome 扩展程序,可让您打开和关闭 CORS,从而解决了网络上的问题。然而,我似乎无法为移动设备找到这样的解决方案。无论如何,我可以在移动 Chrome 上绕过 CORS??
我已经尝试了所有这些方法,但似乎没有任何效果..
php 选项 1:
<?php
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Headers: Cache-Control, Pragma, Origin, Authorization, Content-Type, X-Requested-With');
header('Access-Control-Allow-Methods: GET, PUT, POST');
?>
php选项2:
<?php
// Allow from any origin
if (isset($_SERVER['HTTP_ORIGIN']))
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Credentials: true ");
header("Access-Control-Allow-Methods: OPTIONS, GET, POST");
header("Access-Control-Allow-Headers: Content-Type, Depth, User-Agent, X-File-Size, X-Requested-With, If-Modified-Since, X-File-Name, Cache-Control");
// Access-Control headers are received during OPTIONS requests
if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS')
if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD']))
header("Access-Control-Allow-Methods: GET, POST, OPTIONS");
if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']))
header("Access-Control-Allow-Headers: $_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']");
exit(0);
echo "You have CORS!";
?>
jQuery AJAX:
$.ajax(
url: '<MY API ENDPOINT>',
method: 'POST',
headers:
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Headers': "Cache-Control, Pragma, Origin, Authorization, Content-Type, X-Requested-With",
'Access-Control-Allow-Methods': "GET, PUT, POST",
'Authorization':
'Bearer <MY TOKEN>',
'Cache-Control': 'no-cache'
,
data: formData,
processData: false,
contentType: false
).done(function(res)
【问题讨论】:
Access-Control-Allow-*
标头由服务器而不是客户端设置,因此将它们添加到您的 ajax 调用中没有任何作用。 "MY API ENDPOINT" 是否在您自己的服务器上?如果没有,那么在您的 php 中设置标头也不会执行任何操作。
我正在使用 salesforces 的 api.einstein.ai/v2/vision/predict
【参考方案1】:
从您的 ajax 请求中删除访问控制标头。访问控制标头由浏览器自动设置,如 W3C CORS 规范中所定义。
无论您在 ajax 请求中包含什么标头,都需要在服务器响应中允许。在您的情况下,它是 Authorization
和 Cache-Control
。将它们添加到Access-Control-Allow-Headers
。
使用 php 代码的选项 2。它包括对 cors preflight OPTIONS 请求的响应。出于这个原因,选项 1 将不起作用。
【讨论】:
以上是关于移动 Chrome 上的 CORS Allow-Access-Control-Origin的主要内容,如果未能解决你的问题,请参考以下文章
画布上的 CORS 在 Chrome 和 Safari 上不起作用
chrome devtools扩展:Windows上的CORS问题
在本地部署在影响 javascript 游戏引擎中编码的 webapp,导致 Chrome 上的 CORS
Firefox 上的 ASP.NET Core Web API CORS 错误,但在 Chrome 上没问题
JSON REST Get-Request 正在等待用于 Chrome/Firefox 的 Tomcat 上的 CORS
Chrome 上的 NotFound net::ERR_TOO_MANY_REDIRECTS,SEC7127:针对 IE 上的 CORS 请求阻止重定向