Mr.J---重拾Ajax(四)-- 跨域

跨域

域名地址的组成

http://         www  .      abc.com   :    8080    /     script/jquery.js

协议           子域名         主域名           端口号          请求资源地址

  • 当协议,子域名,主域名,端口号中任意一个不同时,都算作不同域。
  • 不同域之间相互请求资源,就算做 “跨域"

出于安全的考虑,不允许跨域调用其它页面的对象。简单的理解就是a.com域名下的js无法操作b.com或者c.com域名下的对象。

代理

  • 通过在同域名的Web服务器端创建一个代理
  • 例如: 服务器一(域名:www.first.com) 服务器二(域名:www.second.com
  • 比如在第一个服务器后台(www.first.com/proxy-firstservice.php)来调用第二个服务器(www.second.com/service.php)的服务,再把相应结果发送给前端,这样前端调用第一个服务器同域名的服务就和调用第二个服务器的服务效果相同了。

JSONP

JSONP可用于解决主流浏览器的跨域数据访问的问题。

注意:只能对GET请求有效果!!!

同样对服务器端代码进行修改(jsonp中连接字符串使用 “ .  

可以在发送请求中清楚看见参数callback 后面的jQuery....为随机生成的参数值

再查看返回值

参数值 :jQuery1111018177324043309095_1565923075763

返回值:jQuery1111018177324043309095_1565923075763({"success":true,"msg":"找到员工:员工编号:101,员工姓名:洪七,员工性别:男,员工职位:总经理"})。

对比发现,两个参数值一样。

jsonp为什么不支持POST?

jsonp的本质是:动态创建script标签,然后通过他的src属性发送跨域请求,不同意然后服务器相应的数据格式为【函数调用foo(实参)】,所以在发送请求之前必须声明一个函数,并且函数的名字与参数中传递的名字要一致。

原理就是从服务端加载一段脚本(用script标签),然后把数据放到一个函数参数里面,再然后浏览器里定义的那个函数就能拿到那个数据了~

注意:标签里只能发GET

XHR2

HTML提供的XMLHttpRequest Level2已经实现了跨域访问以及其他的一些新功能。IE10以下的都不支持!!!

在服务器端做一点改造:

header('Access-Control-Allow-Origin:*');

header('Access-Control-Allow-Methods:*');

XHR2通信基础

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值