我有一个从我的本地主机运行的角度应用程序,并试图通过POST访问另一个域中的REST URL。我在http请求中发送'Content-Type'和'Authorization'标头。所以我想由于Authorization标头,这个请求会得到OPTIONS检查。
这些是我的请求标题
接受: /
Accept-Encoding:gzip,deflate,sdch
接受语言:EN-US,EN; Q = 0.8
访问控制请求报头:授权,内容类型
访问控制请求-方法:POST
连接:保持活跃
主持人:tmatxx101:8080
起源:http://localhost:4200
引用者:http://localhost:4200/search
User-Agent:Mozilla / 5.0(Windows NT 6.3; Win64; x64)AppleWebKit / 537.36(KHTML,如Gecko)Chrome / 58.0.3029.110 Safari / 537.36
这些是我的响应标题
接入控制允许凭证:真
访问控制允许报头:内容类型,接受授权
访问控制允许的方法:GET,POST,PUT,DELETE,OPTIONS
访问控制允许来源:http://localhost:4200
访问控制 - 最大 - 年龄:1800
内容长度:0
日期:2017年5月18日星期四格林尼治标准时间12:49:06
Set-Cookie:JSESSIONID = 199td8fal1ak21ix0kgjljrqgp; Path = / bpm; HttpOnly
和常规部分
请求网址:http://tmatxx101:8080/bpm/rest/process/start/xxxxxx.bpm.xpdl/xxxxx/1.0.0.20170517150430523
请求方法:选项
状态代码: 401 HTTP会话中没有安全上下文
远程地址:172.16.35.84:8080
推荐人政策:no-referrer-when-downgrade
控制台也包含错误
预检的响应包含无效的HTTP状态代码401
我的疑问是,由于Response头包含Access-Control-Allow-Origin和localhost,我应该能够访问该方法,但我仍然会收到该错误
接入控制允许凭证:真
访问控制允许报头:内容类型,接受授权
访问控制允许的方法:GET,POST,PUT,DELETE,OPTIONS
Access-Control-Allow-Origin: http://localhost:4200
我是否应该在Angular代码上做任何工作,或者我应该联系服务器团队。我的Angular代码如下
const headers = new Headers({'Content-Type': 'application/xml', 'Authorization':'Basic xxxx'});
this.http.post(url, jsonRequest, {headers: headers})
.subscribe(
(response: Response) => {
console.log(response.json());
}
);
答案 0 :(得分:0)
尝试将withCredentials设置为true。例如:
this.http.post(url, jsonRequest, {headers: headers, withCredentials: true})
.subscribe(
(response: Response) => {
console.log(response.json());
}
);
BTW:请求没有Authorization
标题。
编辑:实际上我认为这不会有帮助,服务器可能会返回401.我不认为这是一个CORS问题。也许我们错过了一些代码。
答案 1 :(得分:0)
在Chrome中,网址栏的末尾有一个图标,您可以在其中取消阻止不安全的内容。我认为是因为它的https试图获取非http api调用。