vue-resource来自跨源响应的标头不完全可用。

时间:2016-01-18 10:12:20

标签: cors vue.js

在使用CORS时,

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}}

我没有其他方式(我知道)访问响应标头,甚至是原始文本。

我做错了什么?

1 个答案:

答案 0 :(得分:3)

我认为this SO answer解释了你所看到的。在那个答案中,他们引用了HTML5 Rocks CORS page

  

在CORS请求期间,getResponseHeader()方法只能访问简单的响应标头。简单响应头定义如下:

     
      
  • 缓存控制
  •   
  • 内容的语言
  •   
  • 内容类型
  •   
  • 到期
  •   
  • 上次修改
  •   
  • 附注
  •   
     

如果您希望客户端能够访问其他标头,则必须使用Access-Control-Expose-Headers标头。此标头的值是您要向客户端公开的响应标头的逗号分隔列表。

因此,如果您控制正在调用的api,则可以通过设置Access-Control-Expose-Headers标头向客户端公开其他标头。