[英]Enable CORS in Azure Maps Account with Angular 7
我现在正在使用带有 Angular 7 的 Azure Maps 帐户并尝试创建一个自动完成输入。
我正在调用 URL:
this.http.get('https://atlas.microsoft.com/search/address/json?subscription-key=<key>&api-version=1.0&query=Newyork').subscribe(...)
当我在邮递员中运行此链接时,它可以完美运行并响应我想要的数据。 但是当我使用 HttpClient 在 Angular 中调用时,我遇到了 CORS 问题。
我找不到可以在服务中更改 cors 的地方。 有人知道如何解决吗?
此外,如果有人复制了这个 URL 并在其他地方使用了它,他将使用该服务,但需要支付我的费用。 如何使用特定的 URL 来保护它?
CORS(跨域资源共享)是服务器表示“即使您来自不同的来源,我也会接受您的请求”的一种方式。 这需要服务器的合作——因此如果您无法修改服务器(例如,如果您使用外部 API),则此方法将不起作用。
修改服务器以添加头 Access-Control-Allow-Origin: * 以启用来自任何地方的跨域请求(或指定域而不是 *)。
或者,这些插件适用于 HTTP,但不适用于最新的 httpClient。 此外,在服务器上配置 CORS 响应标头并不是一个真正的选择。 因此,我创建了一个 proxy.conf.json 文件来充当代理服务器。
proxy.conf.json
文件:
"/posts": {
"target": "https://example.com",
"secure": true,
"pathRewrite": {
"^/posts": ""
},
"changeOrigin": true
}
}
我将proxy.conf.json
文件放在同一目录中的package.json
文件旁边。
然后我修改了package.json
文件中的start命令:
"start": "ng serve --proxy-config proxy.conf.json"
来自我的应用程序组件的 HTTP 调用:
return this._http.get('/posts/pictures?method=GetPictures')
.subscribe((returnedStuff) => {
console.log(returnedStuff);
});
最后要运行我的应用程序,我必须使用npm start or ng serve --proxy-config proxy.conf.json
您可以在此处阅读更多内容。
希望能帮助到你。
Azure Maps 现在添加了限制较少的 CORS 策略。 所有响应头现在都应该包含必要的'Access-Control-Allow-Origin': '*'
。 还在这里跟进了这个线程。
Azure REST API 使用 CORS 响应标头进行响应,但使用'Access-Control-Allow-Origin': '*'
作为响应标头。 使用fetch
调用 API credentials: include
默认发送credentials: include
,浏览器报错如下
当请求的凭据模式为“包含”时,响应中“Access-Control-Allow-Origin”标头的值不得为通配符“*”。
fetch API提供了发送credentials
模式的选项。 使用此调用 Azure API 有效
fetch('https://example.com', {
credentials: 'omit' // or 'same-origin'
})
其他选项是通过网关/服务层等代理到这个 API。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.