Java Angular 9(HttpClient)如何修复CORS错误?
我有一个发帖请求:Java Angular 9(HttpClient)如何修复CORS错误?,java,angular,cors,httpclient,httpserver,Java,Angular,Cors,Httpclient,Httpserver,我有一个发帖请求: getLagTimestamp() { const headers = new HttpHeaders({ 'Access-Control-Allow-Origin': '*', 'Authorization': 'Basic YWRtaW46cGFzc3dvcmQ=' }); this.response = this.http.post(this.url, '{"method":"topics_lag&quo
getLagTimestamp() {
const headers = new HttpHeaders({
'Access-Control-Allow-Origin': '*', 'Authorization': 'Basic YWRtaW46cGFzc3dvcmQ='
});
this.response = this.http.post(this.url, '{"method":"topics_lag","id":"req-id-01","jsonrpc":"2.0"}', {headers:headers})
.subscribe((response) => {
this.response = response;
this.lagTimestamps = Object.setPrototypeOf(this.response, Array<LagTimestampObject>());
console.log(this.lagTimestamps);
});
}
但我对前端和后端之间的请求有一些问题:
访问位于“”的XMLHttpRequesthttp://localhost:9099/rpc"从源头上说,
'http://localhost:4200'已被CORS策略阻止:响应
飞行前请求未通过访问控制检查:否
“Access Control Allow Origin”标头出现在请求的服务器上
资源
我试着像这样使用前端代理:
{
"/rpc": {
"target": "https://localhost:9099",
"secure": true,
"pathRewrite": {
"^/rpc": ""
},
"changeOrigin": true
}
}
我已经试着解决这个问题一个星期了,但没有任何行动能帮上忙。
如何解决这个问题
谢谢
添加:
在后端更新后:
if (httpExchange.getRequestMethod().equalsIgnoreCase("OPTIONS")) {
httpExchange.getResponseHeaders().add("Access-Control-Allow-Methods", "GET, OPTIONS");
httpExchange.getResponseHeaders().add("Access-Control-Allow-Headers", "Content-Type,Authorization");
httpExchange.sendResponseHeaders(200, -1);
}
我有:
您需要飞行前响应(选项呼叫响应)来返回
“访问控制允许原点”,“*”
您正在从服务器获得401未经授权的选项呼叫。
查看允许选项调用并在此处返回标题
“Access Control Allow Origin”、“*”
。修复程序是配置http://localhost:9099/rpc
允许未经验证的选项请求的端点。目前,它似乎希望在CORS飞行前选项请求中找到授权标头,但浏览器故意在飞行前不发送授权标头或任何其他凭据。因此服务器响应401错误,因为它找不到预期的凭据。要获得更详细的解释,请参阅我添加的if(httpExchange.getRequestMethod().equalsIgnoreCase(“选项”){httpExchange.sendResponseHeaders(200,3);}上的答案,但是如果我使用Postman,它会起作用。它在浏览器中不起作用。魔法。我试图修复它,结果是除了问题。表示飞行前准备现在已成功。所以这个问题现在已经解决了。但是您有一个新的/不同的问题:POST请求失败,并带有NS\u ERROR\u DOM\u BAD\u URI。因为你已经解决了飞行前的问题,而这个新问题是一个非常不同的问题,你可能想为它发布一个新的/单独的问题。你能更详细地描述一下如何做到这一点吗?你需要确保任何选项请求都不受你的授权过滤器的约束。让它在标题中返回访问控制允许原点。
if (httpExchange.getRequestMethod().equalsIgnoreCase("OPTIONS")) {
httpExchange.getResponseHeaders().add("Access-Control-Allow-Methods", "GET, OPTIONS");
httpExchange.getResponseHeaders().add("Access-Control-Allow-Headers", "Content-Type,Authorization");
httpExchange.sendResponseHeaders(200, -1);
}