HI我有一个Angular应用程序,它从NodeJS中的REST API消费,两者都部署在IIS服务器中,从Node I使用IISNode。
我只在生产版本中得到错误XMLHttpRequest cannot load http://181.49.53.186:8006/DynamicContent/form/list. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://web.procesosyservicios.info:3006' is therefore not allowed access.
,在开发人员版本中从未得到错误。奇怪的是,no总是得到错误——例如,在前面的方法中,我每10次调用只得到2到3次错误。
我的app.js文件有以下配置:
router.use(function(req, res, next) {
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Methods', 'GET, POST');
res.header('Access-Control-Allow-Headers': 'Origin, X-Requested-With, Content-Type, Authorization');
next();
});
备选方案我删除了前面的行,并在我的web.config文件中定义了相同的行,如下所示:
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Methods" value="GET,POST" />
<add name="Access-Control-Allow-Headers" value="X-Requested-With,content-type,Authorization" />
</customHeaders>
</httpProtocol>
但结果是相同的——有时只是工作。我不知道什么是错误。
感谢的帮助
解决方案
在我的案例中,解决方案是根据此配置更改我的web.config文件并添加以下行:
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Methods" value="GET,POST" />
<add name="Access-Control-Allow-Headers" value="X-Requested-With,content-type,Authorization" />
</customHeaders>
</httpProtocol>
跨域Ajax请求的问题对开发人员来说相当常见。
解决此问题的最佳方法是从服务器端向响应对象添加一个标头。
这里有一个博客,它确实详细地解释了这一点。它还包括一些服务器端代码。在c#中,添加头的方法是通过以下语句。
Response.AddHeader("Access-Control-Allow-Origin", "mydomain.com");
Response.ContentType = "application/json";
你也可以包括一个*而不是mydomain.com,但它违背了阻止此类请求的安全措施的全部目的。
希望能有所帮助。
感谢
Paras