我在http://localhost:4200/myfrontend
上有一个Angular应用程序,它从http://localhost:8080/mybackend
上的Java REST API获取数据。但是在Angular应用程序中,每次我联系REST api时都会创建一个新会话。
我创建了一个测试,我将前端和后端放在http://localhost:8080
上,并且会话没有丢失。
我为Java REST后端设置的设置是:
response.getHeaders().add("Access-Control-Allow-Origin", "*");
response.getHeaders().add("Access-Control-Allow-Headers", "origin, content-type, accept, authorization");
response.getHeaders().add("Access-Control-Allow-Credentials", "true");
response.getHeaders().add("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS, HEAD");
我为Angular 6.0.5前端设置的设置是:
const httpOptions = {
headers: new HttpHeaders({
'Content-Type': 'application/json'
})
};
当前端和后端网址不同时,我必须做些什么来保持会话?这是缺少的CORS设置吗?
答案 0 :(得分:0)
目前,这两个网址都有自己的会话。您实际需要的是“后端到后端”通信。您可以使用开发服务器代理来实现此目的。
dev-server proxy是一个软件,位于执行Ajax请求的JavaScript / Angular应用程序和后端API之间。
所以,假设没有这样做 -
this.http.get('http://you-server-hostame:8080/mybackend/...')
.map(res => res.json());
使用
this.http.get('/mybackend/')
.map(res => res.json());
在角度CLI项目的根目录下创建proxy.conf.json文件。
{
"/mybackend/*": {
"target": "http://8080:<your service port>",
"secure": false,
"logLevel": "debug",
"changeOrigin": true
}
}
我们的申请中向/ mybackend / ...发出的所有请求都将转发到http://8080:/ ....
现在还要启动服务器,你需要使用
ng serve --proxy-config proxy.config.json
注意:changeOrigin属性。当您在后端使用某些虚拟代理(例如使用Apache2配置)时,您肯定必须将其设置为true。
它的作用是简单地将浏览器请求放在您运行应用程序运行的同一域+端口,然后将该请求转发到后端API服务器。
免责声明:不建议用于制作