欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

记录一个因网络同源策略引起的错误

程序员文章站 2024-02-18 23:53:28
...

记录一个因网络同源策略引起的错误

最近用.NET Core加C#写了一个REST API的web应用。将应用放在了Mircosoft Azure上。测试的时候,用Postman发送各种HTTP请求,都成功执行并得到返回数据。而后又用JS写了一个简单的客户端,利用XMLHttpRequest发送请求。用Chrome运行客户端的时候,问题出现了。在发送GET请求的时候,没有任何数据返回。
一开始以为是语法或者是同步异步的问题,不停地修改代码,折腾了几个小时。还是毫无进展。这时候心如死灰的我打开了浏览器的控制台,发现报了这个错误(为了安全,域名伪装了一下):

Failed to load https://xxxx.azurewebsites.net/api/xxx/: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access.

这才恍然大悟,Same Origin Policy!!! 这是一个网路应用安全机制。在这个机制规定下,浏览器只允许和某网页同源的另一网页来访问该网页的数据。换句话说,只有当A网页和B网页同源时,A网页才可以获取B网页的数据。这个机制主要是为了保护网站的数据安全不会被恶意获取。
那么这个“源”指的是什么呢? 引用wiki里的解释:

An origin is defined as a combination of URI scheme, host name, and port number. —WIKIPEDIA

所以我在本地访问Azure上的域名当然就会被拒绝了。

关于修复这个问题。有很多做法,可以换浏览器,可以在客户端发送CORS请求,可以在WEB端的global或者controller里设置允许CORS的origin。而由于我的web应用是托管在Azure上的,我只需要在Azure中该web应用下的CORS设置里将允许的origin设置为我客户端的域名就可以了(我直接设置成*了,就代表所有origin都被允许了)。如下图:
记录一个因网络同源策略引起的错误