此问题在此处已有答案:
Cross-origin resource sharing (CORS) concept(4个答案)
11小时前关门了。
这是我的卷发线,工作完美:
curl -D- -u user:pwd -X POST -H "X-Atlassian-Token: nocheck" -F "file=@test.txt" https://domain/csbugtrack/rest/api/2/issue/584025/attachments
我尝试过发出XHR请求(获取请求也不起作用):
const xhr = new XMLHttpRequest();
xhr.withCredentials = true;
xhr.open("POST", "https://domain/csbugtrack/rest/api/2/issue/584025/attachments", true);
xhr.setRequestHeader("X-Atlassian-Token", "nocheck");
xhr.setRequestHeader("Authorization", 'Basic ' + btoa('user:pwd'));
const form = new FormData();
form.append('file', new File(['test'], 'D:\test.txt'));
xhr.send(form);
我得到:
Blocage d’une requête multiorigines (Cross-Origin Request) : la politique « Same Origin » ne permet pas de consulter la ressource distante située sur https://domain/csbugtrack/rest/api/2/issue/584025/attachments. Raison : l’en-tête CORS « Access-Control-Allow-Origin » est manquant. Code d’état : 200.
为什么curl更好,我怎么解决这个问题
(我还尝试了一个具有类似CORS问题的获取请求)
1条答案
按热度按时间carvr3hs1#
您好,curl命令正常工作而XHR/Fetch请求却因CORS错误而失败的原因是curl是一个命令行工具,不受浏览器同源策略的限制。另一方面,从浏览器发出的XHR和Fetch请求受同源策略的限制,该策略限制JavaScript代码访问来自不同来源的资源。
您尝试访问的服务器需要通过向响应添加Access-Control-Allow-Origin标头来启用CORS(跨源资源共享)。此标头告诉浏览器允许哪些域访问资源。如果没有此标头,浏览器将阻止请求并引发CORS错误。
要解决此问题,您需要修改服务器端代码以将Access-Control-Allow-Origin标头添加到响应中。如果您无权访问服务器端代码,则可以使用代理服务器绕过同源策略。代理服务器充当客户端和服务器之间的中间人,可以将必要的标头添加到响应中。
另一种选择是使用浏览器扩展,如CORS Everywhere,它会将Access-Control-Allow-Origin标头添加到每个响应中,从而绕过同源策略。但是,不建议在生产环境中使用此方法,因为它可能会使系统暴露于安全漏洞。