ajax跨域问题

  1. 为什么会出现跨域?
    a. 浏览器限制
    b. 跨域
    c. XHR(XMLHttpRequest)请求
  2. 解决方法
    a. 浏览器禁止检查(校验);跨域是浏览器做的校验,后台请求是正常的
    新打开浏览器,并输入参数设置:chrome --disable-web-security --user-dir =g:\temp
    b. JSONP解决跨域: 通过动态创建script
    jsonp请求的content-type跟普通的ajax不一样,type为javascript,普通的ajax为xhr;前后台约定参数,发送请求时url会带上该参数,后台在解析时会把返回的数据改成由json变成javascript
    /JSONP弊端/
    #. 服务器需要改动代码支持
    #. 只支持GET请求
    #. 发送的不是XHR请求
  3. 常用优化解决方案
    #服务器端实现
    #NGINX配置
    #APACHE配置
    a. 调用方修改 --支持跨域
    隐藏跨域,NGINX/APACHE配置反向代理
    浏览器对请求是先执行还是先判断?如何判断?
    简单请求: 请求的方法为GET, HEAD, POST; 请求头里面无自定义头, content-type为: text/plain; multipart/form-data; application/x-www-form-urlencoded
    工作中常见非简单请求: delete,put方法的ajax
    请求;发送json格式的ajax请求; 带自定义头的ajax请求
    (非简单请求在请求发送时会有options预检命令,预检通过时才会发送真正的请求;可缓存预检命令Access-Control-Max-Age: 3600;在一个小时内可缓存
    跨域请求的请求头会有Origin字段,值是域名信息; 等请求返回来会检查响应头有没有跨域信息,如果没有就会报错
    在响应头增加字段,告诉浏览器允许跨域,在filter增加字段,也可以在其他地方增加Access-Control-Allow-Origin; Access-ControlC-Allow-Methods
    带cookie的请求跨域
    在请求中设置xhrFiled: {withCredentials: true},发送请求时会带上cookie
    origin需要全匹配,Access-Control-Allow-Origin不能设置为*
    带自定义请求头的跨域
    b. 被调用方修改
    NGINX配置解决方案
    APACHE配置
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值