乐闻世界logo
搜索文章和话题

JS 代码为什么 会显示一个无访问控制的allow origin的 header ?

3个答案

1
2
3

在Web开发中,JavaScript代码尝试执行跨源HTTP请求时,可能会遇到与访问控制(CORS)相关的问题。CORS是一种由许多浏览器实现的安全功能,用来防止恶意网站读取另一个网站的数据。当JavaScript尝试从另一个源(域名、协议或端口不同)加载资源时,浏览器会执行CORS检查,看看请求的资源是否通过了相应的访问控制检查。

问题中提到的“无访问控制的allow origin的 header”通常是指后端服务器在响应中包含了一个Access-Control-Allow-Origin: *的HTTP头。这个HTTP头的存在告诉浏览器允许来自任何源的访问请求,这样做可以增加资源的可访问性,但同时也降低了安全性,因为任何网站都可以读取这些数据。

例子

假设您有一个API部署在https://api.example.com上,该API提供了用户信息。如果后端配置为发送Access-Control-Allow-Origin: *头,那么任何网站都可以向这个API发起请求并读取数据。

JavaScript代码示例:

javascript
fetch("https://api.example.com/user/data") .then(response => response.json()) .then(data => console.log(data)) .catch(error => console.error('Error:', error));

在这个例子中,如果api.example.com的响应包括Access-Control-Allow-Origin: *头,那么即使是从任何其他源(例如从不同的域名https://anotherdomain.com)发出的请求,浏览器也会允许这个跨源请求成功,并且JavaScript能够处理返回的数据。

安全考虑

虽然使用Access-Control-Allow-Origin: *可以简化开发,使得任何人都可以从任何地方访问您的资源,但这通常不适用于包含敏感数据或需要身份验证的API。在这些情况下,最好限制访问源,只允许特定的域名或使用更加严格的CORS策略。

通常,为了增强安全性,推荐的做法是在服务器端配置一个明确的白名单,列出允许访问该资源的域名,而不是使用*,这样可以有效控制哪些网站可以请求您的资源。

总之,Access-Control-Allow-Origin: *头的使用可以使资源跨域访问变得更加容易,但应谨慎使用,特别是在处理需要保护的数据时。在实际应用中,应根据具体需求和安全策略来设置适当的CORS策略。

2024年6月29日 12:07 回复

因为
$.ajax({type: "POST" - 调用OPTIONS
$.post( - 调用POST

两者是不同的。邮递员正确地调用“POST”,但当我们调用它时,它将是“OPTIONS”。

对于 C# Web 服务 - Web API

请将以下代码添加到_web.config_文件中的 <system.webServer> 标记下。这将起作用:

shell
<httpProtocol> <customHeaders> <add name="Access-Control-Allow-Origin" value="*" /> </customHeaders> </httpProtocol>

请确保您在 Ajax 调用中没有犯任何错误。

jQuery

shell
$.ajax({ url: 'http://mysite.microsoft.sample.xyz.com/api/mycall', headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, type: "POST", /* or type:"GET" or type:"PUT" */ dataType: "json", data: { }, success: function (result) { console.log(result); }, error: function () { console.log("error"); } });

注意:如果您正在寻找从第三方网站下载内容,那么这对您没有帮助。您可以尝试以下代码,但不能尝试 JavaScript。

shell
System.Net.WebClient wc = new System.Net.WebClient(); string str = wc.DownloadString("http://mysite.microsoft.sample.xyz.com/api/mycall");
2024年6月29日 12:07 回复

应用 CORS 限制是一项由服务器定义并由浏览器实现的安全功能。

浏览器查看服务器的 CORS 策略并遵守它。

然而,Postman工具并不关心服务器的CORS策略。

这就是为什么 CORS 错误出现在浏览器中,但没有出现在 Postman 中。

2024年6月29日 12:07 回复

你的答案