2016-01-18 17 views
6

response.headers() dường như phân tích cú pháp phản hồi tiêu đề sai khi làm việc với CORS.các nguồn tài nguyên vue Tiêu đề từ phản hồi gốc xuất xứ không có sẵn.

việc kiểm tra này ra:

// REQUEST 
OPTIONS /mohsenin/loans HTTP/1.1 
Host: mohsenin.app 
Connection: keep-alive 
Access-Control-Request-Method: GET 
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 
Access-Control-Request-Headers: accept, authorization, crossorigin 
Accept: */* 
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: text/html; charset=UTF-8 
Transfer-Encoding: chunked 
Connection: keep-alive 
Allow: GET,HEAD 
Cache-Control: no-cache, private 
date: Mon, 18 Jan 2016 09:54:44 GMT 
access-control-allow-origin: http://mclient.app 
Vary: Origin 
access-control-allow-credentials: true 
access-control-allow-methods: GET, POST, PUT, DELETE 
access-control-allow-headers: ACCEPT, AUTHORIZATION, CROSSORIGIN 
Content-Encoding: gzip 

Cho đến nay rất tốt, và đây là yêu cầu GET đang được gọi sau khi lựa chọn:

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

lưu ý: Dữ liệu được thu thập bởi chrome dev công cụ.

Có điều là, khi tôi sử dụng response.headers() trong lời hứa .Sau đó, nó chỉ trả về đối tượng này:

Object {content-type: "application/json", cache-control: "no-cache", "": ""} 

và tôi không có cách nào khác (mà tôi biết) truy cập vào các tiêu đề phản hồi, ngay cả các văn bản thô.

Tôi đã làm gì sai?

Trả lời

3

Tôi nghĩ rằng this SO answer giải thích những gì bạn đang thấy. Trong câu trả lời đó, họ trích dẫn số HTML5 Rocks CORS page:

Trong khi yêu cầu CORS, phương thức getResponseHeader() chỉ có thể truy cập vào tiêu đề phản hồi đơn giản. tiêu đề phản ứng đơn giản được định nghĩa như sau:

  • Cache-Control
  • Content-Language
  • Content-Type
  • Expires
  • Last Modified
  • pragma

Nếu bạn muốn khách hàng có thể truy cập các tiêu đề khác, bạn phải sử dụng Access-Control-Expose-Headers tiêu đề. Giá trị của tiêu đề này là danh sách các tiêu đề phản hồi được phân tách bằng dấu phẩy mà bạn muốn hiển thị cho khách hàng.

Vì vậy, nếu bạn kiểm soát api bạn đang gọi, bạn có thể hiển thị tiêu đề bổ sung cho khách hàng bằng cách đặt tiêu đề Access-Control-Expose-Headers.

+1

Cảm ơn. Tôi đã thua. bây giờ tôi lại được tìm thấy. –

Các vấn đề liên quan