【问题标题】:Angular CORS Options not working [duplicate]Angular CORS 选项不起作用 [重复]
【发布时间】:2017-10-18 09:30:20
【问题描述】:

我有一个从本地主机运行的 Angular 应用程序,并尝试通过 POST 访问另一个域中的 REST URL。我在 http 请求中发送“Content-Type”和“Authorization”标头。所以我猜由于 Authorization 标头,这个请求得到了一个 OPTIONS 检查。

这些是我的请求标头

接受:/
接受编码:gzip、deflate、sdch
接受语言:en-US,en;q=0.8
访问控制请求标头:授权、内容类型
访问控制请求方法:POST
连接:保持活动
主机:tmatxx101:8080
来源:http://localhost:4200
推荐人:http://localhost:4200/search
用户代理:Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36

这些是我的响应标头

访问控制允许凭据:true
访问控制允许标头:内容类型、接受、授权
访问控制允许方法: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
请求方法:OPTIONS
状态码:401 HTTP 会话中没有安全上下文
远程地址:172.16.35.84:8080
推荐人政策:no-referrer-when-downgrade

控制台也包含错误
预检响应包含无效的 HTTP 状态代码 401

我的疑问是,由于响应标头包含 Access-Control-Allow-Origin 和 localhost,我应该能够访问该方法,但我仍然收到该错误

访问控制允许凭据:true
访问控制允许标头:内容类型、接受、授权
访问控制允许方法:GET、POST、PUT、DELETE、OPTIONS
访问控制允许来源: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());
       }
     );

【问题讨论】:

    标签: angular cors angular-http


    【解决方案1】:

    尝试将 withCredentials 设置为 true。例如:

    this.http.post(url, jsonRequest, {headers: headers, withCredentials: true})
     .subscribe(
       (response: Response) => {
         console.log(response.json());
       }
     );
    

    顺便说一句:请求没有Authorization 标头。

    编辑:实际上我认为这不会有帮助,服务器可能会返回 401。我认为这不是 CORS 问题。也许我们遗漏了一些代码。

    【讨论】:

    • 正如你所说的 withCredentials: true 没有帮助你的请求没有授权头是什么意思?
    【解决方案2】:

    在 Chrome 的 url 地址栏末尾有一个图标,您可以在其中取消阻止不安全的内容。我认为这是因为它的 https 试图获取非 http api 调用。

    【讨论】:

      猜你喜欢
      • 2018-01-25
      • 2015-06-27
      • 2016-12-01
      • 1970-01-01
      • 2021-11-16
      • 2021-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多