ajax在跨域做轮询的时候,每次request请求头不是XMLHttpRequest,是什么原因?

yiqiuheng 2014-09-23 10:18:47
针对同样的服务端做ajax轮询请求,同域情况下,是请求头是XMLHttpRequest,如下:
Request URL:http://42.159.152.47/wx/scan/OA?rand=100&username=yiqiuheng&from=OA&objectid=1&t=1411480040192
Request Headers
Provisional headers are shown
Accept:*/*
Referer:http://42.159.152.47/test
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.120 Safari/537.36
X-DevTools-Emulate-Network-Conditions-Client-Id:32E60886-6F0B-47D8-BFF3-E596A5D9D475
X-Requested-With:XMLHttpRequest

但是在跨域情况下,同样的ajax请求,请求头不是XMLHttpRequest,即同步的,这个是不能理解的!!!
Request URL:http://42.159.152.47/wx/scan/OA?rand=729&username=mlsc&from=OA&objectid=1&t=1411480245969
Request Headers
Provisional headers are shown
Accept:*/*
Origin:http://localhost:8080
Referer:http://localhost:8080/Wry_wx/wx.jsp
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.120 Safari/537.36
X-DevTools-Emulate-Network-Conditions-Client-Id:AE742D3D-EEE6-48BB-90EC-46521A503DF7

请大神详解~~~


...全文
2026 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
拎干的毛巾 2014-09-28
  • 打赏
  • 举报
回复
在服务端和客户端都要加上res.header("Access-Control-Allow-Credentials", true); 并且在ajax每次轮询的时候,要加上这两段: xhrFields: { withCredentials: true }, crossDomain: true
yiqiuheng 2014-09-26
  • 打赏
  • 举报
回复
引用 6 楼 xuzuning 的回复:
set-cookie 是服务端发出的,因为他没有收到你请求时提交的 cookie 所以每次都会变化
你说的很对,是因为服务端没有请求时提交的cookie,同域情况下服务端会收到请求提交的cookie,跨域的时候收不到, 那么怎样在跨域的情况下,ajax轮询时,把请求的cookie带上。 我一直就是在纠结这个问题!!!
yiqiuheng 2014-09-26
  • 打赏
  • 举报
回复
引用 5 楼 net_lover 的回复:
所谓的ajax跨域,只是通过document.createElement("script")实现的,相当于 <script src="">这样的,根本不是XMLHttpRequest请求,所以没有什么request请求头的
在同域时,每次请求结束 X-DevTools-Emulate-Network-Conditions-Client-Id不会变,但是在跨域时,X-DevTools-Emulate-Network-Conditions-Client-Id会变。 这怎么搞的 ,怎么保证跨域也不变。
xuzuning 2014-09-25
  • 打赏
  • 举报
回复
set-cookie 是服务端发出的,因为他没有收到你请求时提交的 cookie 所以每次都会变化
孟子E章 2014-09-25
  • 打赏
  • 举报
回复
所谓的ajax跨域,只是通过document.createElement("script")实现的,相当于 <script src="">这样的,根本不是XMLHttpRequest请求,所以没有什么request请求头的
yiqiuheng 2014-09-25
  • 打赏
  • 举报
回复
我顶啊 ,快来人撒!!
yiqiuheng 2014-09-24
  • 打赏
  • 举报
回复
引用 2 楼 xuzuning 的回复:
ajax 不能跨域! 同域时使用 XMLHttpRequest 组件作为通讯手段,发出 X-Requested-With:XMLHttpRequest 是为了表示来访者身份 跨域时使用 jsonp,jquery 将 jsonp 纳入 ajax 工具箱,只是为了形式上的统一 由于 jsonp 是通过 script 标记实现的,在 js 层面也无法让 script 标记去发送自定义头信息
是可以跨域访问的,服务端加上<meta http-equiv="Access-Control-Allow-Origin" content="*">了,我已经实现跨域访问了。 现在的问题是,ajax轮询时,每次response返回404时,response header都会多一个 set-cookie:connect.sid=s%3Aq7je2-dcvQ9kL4B_amHJK-pzFTonQiy_.6B16W2OJtD9GU3S 而且轮询每次返回时,都会重新设置connect.sid的值,同域的情况下每次轮询的response header就没有set-cookie。 我想实现这样的功能,就是跨域在情况下,每次返回时,set-cookie都保证connect.sid的值不变,并且在ajax做get轮询时,把这个connect.sid值传到服务端,想了好久不知道怎么实现,不知道版主对这方面有没有经验,求指导!
xuzuning 2014-09-24
  • 打赏
  • 举报
回复
ajax 不能跨域! 同域时使用 XMLHttpRequest 组件作为通讯手段,发出 X-Requested-With:XMLHttpRequest 是为了表示来访者身份 跨域时使用 jsonp,jquery 将 jsonp 纳入 ajax 工具箱,只是为了形式上的统一 由于 jsonp 是通过 script 标记实现的,在 js 层面也无法让 script 标记去发送自定义头信息
yiqiuheng 2014-09-24
  • 打赏
  • 举报
回复
没办法自己顶一下!

5,006

社区成员

发帖
与我相关
我的任务
社区描述
解读Web 标准、分析和讨论实际问题、推动网络标准化发展和跨浏览器开发进程,解决各种兼容性问题。
社区管理员
  • 跨浏览器开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧