angular2-http – Angular2 Http Response缺少标题键/值
发布时间:2020-12-17 07:23:48 所属栏目:安全 来源:网络整理
导读:我正在对成功的REST API进行http.patch调用(状态200),但并未返回所有响应头的键/值.我对ETag键/值很感兴趣. 这是一段代码: let etag:number = 0;let headers = new Headers();headers.append('Content-Type','application/json');headers.append('If-Match'
我正在对成功的REST API进行http.patch调用(状态200),但并未返回所有响应头的键/值.我对ETag键/值很感兴趣.
这是一段代码: let etag:number = 0; let headers = new Headers(); headers.append('Content-Type','application/json'); headers.append('If-Match',String(etag)); this.http.patch( 'http://example.com:9002/api/myresource/',JSON.stringify(dto),{headers: headers} ) .subscribe( (response:Response) => { let headers:Headers = response.headers; let etag:String = headers.get('ETag'); console.log(etag); } ); 与REST客户端(邮递员)进行相同的调用时,响应头包含: Content-Type: application/hal+json;charset=UTF-8 Date: Mon,01 Feb 2016 05:21:09 GMT ETag: "1" Last-Modified: Mon,01 Feb 2016 05:15:32 GMT Server: Apache-Coyote/1.1 Transfer-Encoding: chunked X-Application-Context: application:dev:9002 丢失的响应标头键/值是否为错误?
这不是Angular问题,而是CORS问题.根据定义,CORS只返回六个“简单”标题:Cache-Control,Content-Language,Content-Type,Expires,Last-Modified和Pragma.
这就是为什么你在使用像Postman这样的REST客户端时看到完整集的原因,但是当你从Angular客户端调用时,你只会看到由CORS限制的集合. 要解决此问题,您需要在以下行中添加Access-Control-Expose-Headers标头: let headers = new Headers(); headers.append('Access-Control-Expose-Headers','etag'); let options = new RequestOptions({ headers: headers }); return this.http.get(uri,options).map(this.extractData).catch(this.catchError); 请注意,您可能需要扩充服务器端代码以支持所需的公开标头. 在我的例子中(C#),我修改了EnableCors调用(在WebApiConfig中)以在暴露的头文件列表中包含“ETAG”(EnableCorsAttribute函数的第四个参数). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |