使用XHR2或Jsonp实现跨域以及实现原理
我们直接使用XMLHttpRequset请求外部接口 会发现
报这个错误
其实浏览器成功发送请求并拿回了数据 只是浏览器的同源策略 禁止了获取 在xhr2 服务器端支持跨域 需要在响应头增加
Access-Control-Allow-Origin: * //*代表任何域。也可以指定地址
Access-Control-Allow-Methods: POST,GET //支持的方法
同源策略

同源策略主要针对XMLHttpRequset 保证请求url 必须跟当前站点的协议 域名 端口 一致
XHR2 CORS(跨域资源共享)实现跨域请求
Access-Control-Allow-Origin: * //*代表任何域。也可以指定地址
Access-Control-Allow-Methods: POST,GET //支持的方法
window.onload = function () {
var xhr = new XMLHttpRequest();
if (xhr.withCredentials === undefined) return false;
xhr.open("get", "http://www.baidu.com");
xhr.onreadystatechange = function () {
if (xhr.readyState !== 4) return;//忽略未完成的调用
if (xhr.status === 200) {
console.log(xhr.responseText);
}
}
xhr.send(null);
}
JsonP实现跨域请求
function GetJsonp(url, callback) {
var responseCallback = callback.name + GetJsonp.index++;//为每次调用生成一个唯一的回调名字
var scriptDom = document.createElement("script");//创建一个script标签
//生成一个随机的 服务器端回调函数
GetJsonp[responseCallback] = function (data) {
try {
//最终回调我们自己的处理函数
callback(data);
} finally {
//每次请求完成后函数
document.removeChild(scriptDom);//删除标签
delete GetJsonp[responseCallback];//删除生成的函数
}
}
if (url.indexof("?") === -1) {
//如果url没有包含参数 则添加服务器端生成回调的函数
url += "?callback=" + "GetJsonp[" + responseCallback + "]";
} else {
//仅仅是追加参数
url += "&callback=" + "GetJsonp[" + responseCallback + "]";
}
//设置script标签的请求地址
scriptDom.src = url;
//将他追加到文档
document.appendChild(scriptDom);
}
服务器端

使用XHR2或Jsonp实现跨域以及实现原理的更多相关文章
- AJAX跨域问题解决方法(2)——JSONP解决跨域
JSONP是什么?JSON全称为JSON with Padding,是JSON的一种补充的使用方式,不是官方协议. 使用JSONP服务器后台要改动吗?JSONP不同于一般的ajax请求返回json对象 ...
- 跨域解决方案二:使用JSONP实现跨域
跨域的实现方式有多种,除了 上篇文章 提到的CORS外,常见的还有JSONP.HTML5.Flash.iframe.xhr2等. 这篇文章对JSONP的跨域原理进行了探索,并将我的心得记录在这里和大家 ...
- JSONP实现跨域
首先提出:什么是跨域?如何解决跨域? 跨域可以简单的理解为从一个域名访问另一个域名,由于javascript的同源政策的限制,出于安全的考虑,不允许浏览器这么做.比如a.com 域名下的js无法操作b ...
- 转(JSONP处理跨域事件)
前言: 由于Sencha Touch 2这种开发模式的特性,基本决定了它原生的数据交互行为几乎只能通过AJAX来实现. 当然了,通过调用强大的PhoneGap插件然后打包,你可以实现100%的Soc ...
- jsonp实现跨域访问
要实现JSONP跨域访问,首先就要了解什么是跨域?然后JSONP与JSON的关系? 1.什么是跨域? 跨域简单的说就是一个域名下的程序和另一个域名下的程序做数据交互.比如说:现有一个http://ww ...
- 关于使用Jsonp做跨域请求
今天在使用Jsonp做跨域请求的练习时碰上这样一个问题 代码如下 <!DOCTYPE html> <html> <head> <meta charset=&q ...
- 使用JSONP实现跨域
什么是跨域? 简单的来说,出于安全方面的考虑,页面中的JavaScript无法访问其他服务器上的数据,即"同源策略".而跨域就是通过某些手段来绕过同源策略限制,实现不同服务器之间通 ...
- 跨域 - 自定义 jsonp实现跨域
问题:在现代浏览器中默认是不允许跨域. 办法:通过jsonp实现跨域 在js中,我们直接用XMLHttpRequest请求不同域上的数据时,是不可以的.但是,在页面上引入不同域上的js脚本文件却是 ...
- 什么是同源策略,什么是跨域,如何跨域,Jsonp/CORS跨域
同源策略 同源策略(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响. 可以说Web是构建在同源策略基础之上 ...
随机推荐
- 流程控制和循环.png
- 树莓派 Linux备忘
//更新树莓派 sudo apt-mark hold raspberrypi-bootloader sudo apt-get update sudo apt-get upgrade //配置 rasp ...
- OC多态
要点: 1.多种形态,引用的多种形态对于一个引用变量,可以指向任何类的对象.对于一个父类的引用(类与类之间有一种继承关系),可以指向子类,也可以指向本类,指向的类型不同.当通过此引用向对象发送消息,调 ...
- RMI(远程接口调用)
1. RMI的原理: RMI系统结构,在客户端和服务器端都有几层结构. 方法调用从客户对象经占位程序(Stub).远程引用层(Remote Reference Layer)和传输层(Transport ...
- 记处理线上记录垃圾日志 The view 'Error' or its master was not found
最近监控线上日志,网站是ASP.NET MVC 开发的,发现不少错误日志都记录同样的内容: The view 'Error' or its master was not found or no vie ...
- iOS系列 基础篇 07 Action动作和输出口
iOS系列 基础篇 07 Action动作和输出口 目录: 1. 前言及案例说明 2. 什么是动作? 3. 什么是输出口? 4. 实战 5. 结尾 1. 前言及案例说明 上篇内容我们学习了标签和按钮 ...
- redis-cli中那些或许我们还不知道的一些实用小功能
玩过redis的朋友都知道,redis中有一个叫做redis-cli的小工具,我们可以利用它在test和develop环境下进行高效的模拟测试,然而在现实环境中, 我们只知道直接键入redis-cli ...
- nginx反向代理+集群
1.前期准备: client:192.168.4.1 eth0 proxy:192.168.4.5 eth0 web1:192.168.4.100 eth0 内容2 web2:192.168.4.20 ...
- Dipole Antenna : 2
Characteristics of dipole antenna. %% % characteristics of dipole antenna % author : Leon % email:ya ...
- jpa+springdata
学习爱酷学习网尚硅谷springdata笔记: 1.在 Spring 配置文件 <?xml version="1.0" encoding="UTF-8"? ...