我的浏览器正在向我的服务器发送数据缓冲区。不幸的是,我已经使用POST将requestHeader设置为xhr.setRequestHeader(“ Content-type”,'application / json')。这是因为我在浏览器代码中使用了var json = JSON.stringify(myArray)创建json缓冲区。因此,由于我使用了application / 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文件中:
标头设置了Access-Control-Allow-Origin“ *”
但是我已经拥有了,而且我没有看到在飞行前响应中设置任何内容类型。飞行前响应在哪里设置,如何删除或修复它?是否有任何文件说明如何(在哪里)配置飞行前响应?
答案 0 :(得分:0)
服务器需要在标头中做出以下响应:
Access-Control-Allow-Headers: content-type
Access-Control-Allow-Method: POST
Access-Control-Allow-Origin: *
并且响应应该是HTTP 200。 第一个标头是与您收到的错误消息相对应的标头,然后应消失...
---扩展答案---
检查OPTIONS响应的标题:
我想您需要检查OPTIONS请求是否真的发回了所有必需的标头才能成功处理预检。因此,要查看OPTION请求的标题,可以模拟:
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 api的示例:
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 \
您的OPTION REQUEST需要与RESPONSE标头匹配...更具体地说:
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
这应该可以解决问题...