response.headers()似乎解析了错误的标头响应。
检查一下:
// REQUEST
GET /mohsenin/loans HTTP/1.1
Host: mohsenin.app
Connection: keep-alive
Accept: application/json, text/plain, */*
Origin: http://mclient.app
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36
Authorization: Bearer [..OLDTOKEN..]
crossOrigin: false
Referer: http://mclient.app/
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-US,en;q=0.8,fa;q=0.6
//RESPONSE
HTTP/1.1 200 OK
Server: nginx/1.9.3 (Ubuntu)
Content-Type: application/json
Transfer-Encoding: chunked
Connection: keep-alive
Cache-Control: no-cache
Date: Mon, 18 Jan 2016 09:54:44 GMT
Authorization: Bearer [..NEWTOKEN..]
Access-Control-Allow-Origin: http://mclient.app
Vary: Origin
Access-Control-Allow-Credentials: true
到目前为止一切顺利,这是在选项之后调用的GET请求:
Object {content-type: "application/json", cache-control: "no-cache", "": ""}
注意:数据由chrome dev工具收集。
问题是,当我在.then promise中使用response.headers()时,它只返回这个对象:
{{1}}
我没有其他方式(我知道)访问响应标头,甚至是原始文本。
我做错了什么?
答案 0 :(得分:3)
我认为this SO answer解释了你所看到的。在那个答案中,他们引用了HTML5 Rocks CORS page:
在CORS请求期间,
getResponseHeader()
方法只能访问简单的响应标头。简单响应头定义如下:
- 缓存控制
- 内容的语言
- 内容类型
- 到期
- 上次修改
- 附注
如果您希望客户端能够访问其他标头,则必须使用
Access-Control-Expose-Headers
标头。此标头的值是您要向客户端公开的响应标头的逗号分隔列表。
因此,如果您控制正在调用的api,则可以通过设置Access-Control-Expose-Headers
标头向客户端公开其他标头。