浏览器在 ajax 请求上发送 Origin 标头,但不是通过简单的 HTTP Get 请求。为啥?
Posted
技术标签:
【中文标题】浏览器在 ajax 请求上发送 Origin 标头,但不是通过简单的 HTTP Get 请求。为啥?【英文标题】:Browsers send Origin header on ajax requests, but not with simple HTTP Get request. Why?浏览器在 ajax 请求上发送 Origin 标头,但不是通过简单的 HTTP Get 请求。为什么? 【发布时间】:2012-12-05 19:08:19 【问题描述】:我使用 SignalR 作为我的推送服务器(.NET 的东西),并且在这个过程中的某个地方,脚本发送了一个 ajax 请求,但不发送 cookie。
但是,当我在新选项卡中打开该请求时,所有 cookie 都会同时发送。
注意事项:
X-Requested-With
没有定义(代码是$.ajax()
,但是好像浏览器认为这个请求是跨域请求)
推送服务器在domain.com:7171
上运行
应用服务器正在domain.com
上运行
URL 使用GET
方法
当我们从地址栏向同一个 URL 发送一个简单的请求(简单的 HTTP Get)时,cookie 会被发送
为什么 cookie 在 HTTP get 请求时发送到同一个 URL,而在 ajax 请求时不发送?
【问题讨论】:
【参考方案1】:您提到这是从 domain.com 到 domain.com:7171 的跨域请求。默认情况下,跨域请求中不包含 Cookie。您需要通过设置.withCredentials = true;
in your JQuery request 明确表明您想要包含cookie。您的服务器还需要使用标题 Access-Control-Allow-Credentials: true
进行响应。你可以在这里了解更多:http://www.html5rocks.com/en/tutorials/cors/
【讨论】:
以上是关于浏览器在 ajax 请求上发送 Origin 标头,但不是通过简单的 HTTP Get 请求。为啥?的主要内容,如果未能解决你的问题,请参考以下文章
Django 向浏览器发送响应它收到此错误:请求的资源上不存在“Access-Control-Allow-Origin”标头
获取请求未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头
Jquery AJAX:请求的资源上不存在“Access-Control-Allow-Origin”标头
请求的资源上不存在“Access-Control-Allow-Origin”标头-Mollie payment ajax