CORS ajax调用失败,尽管有适当的Access Control Allow-*标头



我正在执行一个从第三方托管脚本到我的端点的ajax调用。

在Chrome:中,飞行前呼叫如下所示

GENERAL
Request URL: https://my_endpoints_url
Request Method: OPTIONS
Status Code: 200 
Remote Address: 21.188.37.117:443
Referrer Policy: origin-when-cross-origin
RESPONSE HEADERS
access-control-allow-headers: *
access-control-allow-methods: *
access-control-allow-origin: *
allow: OPTIONS, TRACE, GET, HEAD, POST
content-length: 0
date: Thu, 14 Jan 2021 15:45:17 GMT
public: OPTIONS, TRACE, GET, HEAD, POST
server: Microsoft-IIS/10.0
strict-transport-security: max-age=31536000
x-powered-by: ASP.NET
REQUEST HEADERS
:authority: my_endpoints_host
:method: OPTIONS
:path: my_endpoints_path
:scheme: https
accept: */*
accept-encoding: gzip, deflate, br
accept-language: fr,en-US;q=0.9,en;q=0.8,ca;q=0.7,es;q=0.6,pt;q=0.5
access-control-request-headers: authorization,content-type
access-control-request-method: POST
origin: https://c.cs160.visual.force.com
referer: https://c.cs160.visual.force.com/
sec-fetch-dest: empty
sec-fetch-mode: cors
sec-fetch-site: cross-site
user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36

我将端点的服务器配置为允许每个标头、方法和原点在响应标头中可见。尽管如此,Chrome还是不断取消后续的POST请求。

我错过了什么?

编辑:如果我从服务器响应中删除访问控制允许标头,Chrome会在控制台中写入一条正确的错误消息"飞行前响应中的访问控制允许标头不允许请求标头字段内容类型"POST请求在网络选项卡中标记为(失败(。当添加访问控制允许标头时:"*&";,没有错误消息,POST请求被标记为(已取消(

谢谢

该解决方案根本与CORS无关,而是托管我的JS脚本的网站(SalesForce(。

实际上,SalesForce在每次ajax调用后都会重新加载页面。Chrome检测到触发ajax调用的DOM节点不见了,因此它明智地取消了请求。

我的解决方案是使ajax调用同步。

感谢@Quentin和@ssideshowbarker的想法

相关内容

  • 没有找到相关文章

最新更新