我的浏览器正在向我的服务器发送数据缓冲区。不幸的是,我用POST将requestHeader设置为xhr.setRequestHeader(“Content”,'application/json')。这是因为我在浏览器代码中使用这个var json = JSON.stringify(myArray)来创建一个json缓冲区。因此,由于使用了应用程序/json,我几乎无法发送飞行前请求。现在,我在扩展窗口中得到了一个错误:
Access to XMLHttpRequest at
'https://www.xxxubstantiation.com/xxx_crud/xxxit_backend/register' from
origin 'chrome-extension://xxxgnodlhfmhghjhbkkkaaammfocdpib' has been
blocked by CORS policy: Request header field content-type is not allowed by
Access-Control-Allow-Headers in preflight response.所以我想,我需要清理飞行前的反应,但我不知道这是从哪里来的。Bitnami的支持告诉我,我可以将以下行放入https.conf文件中:
标题设置访问-控制-允许-原产地"*“
但是我已经有了,而且我没有看到在飞行前的响应中设置任何内容类型。在何处设置飞行前响应,如何删除或修复它?是否有关于如何(也就是在哪里)配置飞行前响应的文档?
发布于 2019-01-23 16:08:43
服务器需要在标题中使用以下内容进行响应:
Access-Control-Allow-Headers: content-type
Access-Control-Allow-Method: POST
Access-Control-Allow-Origin: *响应应该是HTTP 200。第一个标题对应于您收到的错误消息,然后应该消失.
-延伸的答案
检查选项响应的标题:
我猜您需要检查选项请求是否真的发送回所有所需的头,以成功地处理预飞行。因此,要查看选项请求的头部,可以使用模拟:
curl -i \
-H "Origin: http://your-calling-domain.com/" \
-H "Access-Control-Request-Method: GET" \
-H "Access-Control-Request-Headers: X-Requested-With" \
-X OPTIONS \
https://the-api-endpoint-you-want-to-call/... \这里是github的一个示例:
curl -i \
-H "Origin: http://your-calling-domain.com/" \
-H "Access-Control-Request-Method: GET" \
-H "Access-Control-Request-Headers: X-Requested-With" \
-X OPTIONS \
https://api.github.com/users/sebhildebrandt/org \您的选项请求需要与响应头匹配.更具体而言:
Access-Control-Request-Method需要匹配Access-Control-Allow-Method之一Access-Control-Request-Headers需要与Access-Control-Allow-Headers之一相匹配Origin需要与Access-Control-Allow-Origin匹配只有当三种情况都正常时,预飞行才会成功,并且您的POST请求将被发送到服务器。
在Apache上启用CORS标头:
在您的配置文件(为您的站点)或在.htaccess中,您需要添加
Header set Access-Control-Allow-Origin "*"
Header set Access-Control-Allow-Headers "Accept,Authorization,Content-Type,Origin"
Header set Access-Control-Allow-Methods "GET, POST, PATCH, PUT, DELETE"
Header set Access-Control-Max-Age: 86400在这种情况下,飞行前的有效期为一天(86400秒)。
然后,您需要确保在apache (基于linux的系统)上启用报头:
sudo a2enmod headers对于Windows,您需要:
httpd.conf上打开_apache_folder_/conf#LoadModule headers_module modules/mod_headers.so重新启动Apache
sudo service apache2 restart这应该能行..。
https://stackoverflow.com/questions/54331218
复制相似问题