2011-06-20 30 views
6

https://app.example.com我做以下请求:力Safari浏览器,包括jQuery的Origin标GET请求

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

它工作正常,在Chrome和Firefox,但不是在Safari浏览器。 Safari不会执行预检OPTIONS请求或包含Origin: https://app.example.com标头,因此服务器不会返回Access-Control-Allow-Origin: https://app.example.com标头。

有什么方法可以强制Safari包含Origin标头或执行预检选项请求?

回答

1

您可以将标头添加到beforeSend事件中的HTTP XHR请求中。

是这样的:

$.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'是受限头和不能由JavaScript手动设置。 – abraham

+0

Safari不支持此标题,但限制手动添加它? – Variant

+0

据我所知,所有主流浏览器都限制添加Origin。 Safari支持POST/DELETE请求的Origin(也许还有其他)。理想情况下,有一些“为GET请求启用Origin = true”选项。 – abraham

相关问题