Thi*_*ier 41
事实上,Angular2中没有任何关于跨域请求的事情.CORS是浏览器原生支持的东西.此链接可以帮助您了解它的工作原理:
简而言之,在跨域请求的情况下,浏览器会自动Origin
在请求中添加标头.有两种情况:
text/plain
,application/x-www-form-urlencoded
和multipart/form-data
.所以实际上大多数工作必须在服务器端完成以返回CORS头.主要是Access-Control-Allow-Origin
一个.
200 OK HTTP/1.1
(...)
Access-Control-Allow-Origin: *
Run Code Online (Sandbox Code Playgroud)
要调试此类问题,您可以在浏览器中使用开发人员工具("网络"选项卡).
关于Angular2,只需Http
像任何其他请求一样使用该对象(例如,相同的域):
return this.http.get('https://angular2.apispark.net/v1/companies/')
.map(res => res.json()).subscribe(
...
);
Run Code Online (Sandbox Code Playgroud)
lar*_*z11 16
对我来说这是另一个问题.对某些人来说这可能是微不足道的,但我花了一段时间才弄明白.所以这个答案可能对某些人有所帮助.
我有我的API_BASE_URL
设置localhost:58577
.在读取错误消息第百万次后,硬币掉落了.问题在于它说它只支持HTTP
和其他一些协议的部分.我不得不改变API_BASE_URL
它,以便它包含协议.因此,改变API_BASE_URL
到http://localhost:58577
它的工作完美.
小智 8
在客户端你无能为力.我@CrossOrigin
在服务器端的控制器中添加了它的工作原理.
@RestController
@CrossOrigin(origins = "*")
public class MyController
Run Code Online (Sandbox Code Playgroud)
请参阅文档.
林
以我的经验,这些插件可用于http,但不能用于最新的httpClient。另外,在服务器上配置CORS响应标头并不是真正的选择。因此,我创建了一个proxy.conf.json文件作为代理服务器。
在此处阅读有关此内容的更多信息:https : //github.com/angular/angular-cli/blob/master/docs/documentation/stories/proxy.md
以下是我的prox.conf.json文件
{
"/posts": {
"target": "https://example.com",
"secure": true,
"pathRewrite": {
"^/posts": ""
},
"changeOrigin": true
}
}
Run Code Online (Sandbox Code Playgroud)
我在同一目录中的package.json文件旁边放置了proxy.conf.json文件
然后我修改了package.json文件中的启动命令,如下所示
"start": "ng serve --proxy-config proxy.conf.json"
Run Code Online (Sandbox Code Playgroud)
现在,来自我的应用程序组件的http调用如下
return this._http.get('/posts/pictures?method=GetPictures')
.subscribe((returnedStuff) => {
console.log(returnedStuff);
});
Run Code Online (Sandbox Code Playgroud)
最后要运行我的应用程序,我必须使用npm start或ng serve --proxy-config proxy.conf.json
归档时间: |
|
查看次数: |
94765 次 |
最近记录: |