2011-06-20 36 views
6

Từ https://app.example.com Tôi đang đưa ra yêu cầu sau đây:Force Safari để bao gồm tiêu đề xứ trong jQuery GET yêu cầu

$.get('https://api.example.com', { foo: 'bar' }) 
    .success(getSuccess) 
    .error(getError); 

Nó hoạt động tốt trong Chrome và Firefox nhưng không có trong Safari. Safari không thực hiện yêu cầu OPTIONS preflight hoặc bao gồm tiêu đề Origin: https://app.example.com để máy chủ không trả lại tiêu đề Access-Control-Allow-Origin: https://app.example.com.

Có cách nào để buộc Safari bao gồm tiêu đề Origin hoặc để thực hiện yêu cầu OPTIONS preflight không?

Trả lời

1

Bạn có thể thêm tiêu đề vào yêu cầu HTTP XHR trong sự kiện beforeSend.

Cái gì như:

$.ajax({ 
    url: 'https://api.example.com', 
    data: { foo: 'bar' }, 
    beforeSend: function(xhr) { 
    xhr.setRequestHeader("Origin", "https://app.example.com"); 
} 
}) 
.success(getSuccess) 
.error(getError); 
+4

'Origin' là một tiêu đề hạn chế và không thể được thiết lập bằng tay bởi JavaScript. – abraham

+0

Safari không hỗ trợ tiêu đề này nhưng hạn chế thêm tiêu đề theo cách thủ công? – Variant

+0

Theo như tôi biết tất cả các trình duyệt chính đều hạn chế thêm Gốc. Safari hỗ trợ Xuất xứ cho các yêu cầu POST/DELETE (và có thể là các yêu cầu khác). Lý tưởng nhất là có một số tùy chọn "enable Origin for GET requests = true". – abraham

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