解决ajax跨域的方法原理详解之Cors方法
1、神马是跨域(Cross Domain)
一句话:同一个ip、同一个网络协议、同一个端口,三者都满足就是同一个域,否则就是
跨域问题了。而为什么开发者最初不直接定为一切可跨域的呢?默认的为什么都是不可跨域呢?这就涉及到了同源策
略,为了系统的安全,由Netscape提出一个著名的安全策略。现在所有支持JavaScript的浏览器都会使用这个策略。
所谓同源是,域名,协议,端口相同。当我们在浏览器中打开百度和谷歌两个网站时,百度浏览器在执行一个脚本的
时候会检查这个脚本属于哪个页面的,即检查是否同源,只有和百度同源的脚本才会被执行,如果没有同源策略,那
随便的向百度中注入一个js脚本,弹个恶意广告,通过js窃取信息,这就很不安全了。
说白点就是post、get的url不是你当前的网站,域名不同。例如在aaa.com/a.html里面,表单的提交action是bbb.com/b.html。
不仅如此,www.aaa.com和aaa.com之间也属于跨域,因为www.aaa.com是二级域名,aaa.com是根域名。
JavaScript出于安全方面的考虑,是不允许跨域调用其他页面的对象的(同源策略 Same-Origin Policy)。
关于JavaScript能否跨域通信的详细说明,见下表:
http://www.a.com/a.js访问以下URL的结果
| URL | 说明 | 是否允许通信 |
|---|---|---|
| http://www.a.com/b.js | 同一域名下 | 允许 |
| http://www.a.com/script/b.js | 同一域名下不同文件夹 | 允许 |
| http://www.a.com:8000/b.js | 同一域名,不同端口 | 不允许 |
| https://www.a.com/b.js | 同一域名,不同协议 | 不允许 |
| http://70.32.92.74/b.js | 域名和域名对应ip | 不允许 |
| http://script.a.com/b.js | 主域相同,子域不同 | 不允许 |
| http://a.com/b.js | 同一域名,不同二级域名(同上) | 不允许 |
| http://www.b.com/b.js | 不同域名 | 不允许 |
2、为嘛要跨域
基于两个方面:
a. web应用本身是部署在不同的服务器上
b.基于开发的角度 --- 前后端分离
web应用本身是部署在不同的服务器上,对应的域名也就有所不同
比如百度。
二级域名:http://image.baidu.com/, http://music.baidu.com/,http://wenku.baidu.com/
需要在不同的域之间,通过ajax方式互相请求,是非常常见的需求。
基于开发的角度
现在提倡的前后端分离开发。
前端负责写html、css、js代码,需要向后台要数据,渲染到页面。
后台负责写业务逻辑,向前台提供数据。
后台提供的数据,作为前端如何才能拿到呢?
这就需要前后端进行协作。
后台,只负责提供API,就是一个ulr,比如,
http://m.maizuo.com/v4/api/billboard/home?__t=1489757848973
前台,需要通过ajax发起请求,去获取数据。
在开发的时候,
后台的代码部署在一个服务器上。
前端的代码部署在另外一个服务器上。
前台在向后台通过ajax去请求数据的时候,就涉及到跨域。
就比如,我们的后台已经开发好了一个功能,获取当前首页面的轮播图中的电影数据,给前台提供的url如下:
http://m.maizuo.com/v4/api/billboard/home?__t=1489757848973
我是前端开发人员,需要获取该数据,然后渲染到页面上。
此时,必须要使用ajax方式。
3、肿么跨域
关于跨域,有多达七八种方案。
其中有如下三种方案,是需要重点关注:
a. Cors
b. Jsonp(重点)
c.代理
Cors
本意:cross origin resource share,跨资源共享
场景:服务端的代码在我的控制范围之内,换言之,后台提供的api代码,我是有权限去操作的。只需要在服务端编写代码,浏览器端不用写任何代码。
这种方式最简单,只需要在服务端设置几个头信息即可。
在node中,设置如下:
res.setHeader('Access-Control-Allow-Origin', "*"); //针对哪个域名可以访问,*表示所有
res.setHeader('Access-Control-Allow-Credentials', true); //是否可以携带cookie
res.setHeader('Access-Control-Allow-Methods', 'POST, GET, PUT, DELETE, OPTIONS');
今天先给大家提供最简单的一种跨域方法,后续再为大家介绍更多及更重要的方法!
解决ajax跨域的方法原理详解之Cors方法的更多相关文章
- [转]js中几种实用的跨域方法原理详解
转自:js中几种实用的跨域方法原理详解 - 无双 - 博客园 // // 这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同 ...
- 解决ajax跨域问题的一种方法
解决ajax跨域问题的一种方法 前后端分离经常用json来传输数据,比较常见的问题就有ajax跨域请求的错误问题,这里是我的一种解决方法: 在java中加入如下的注解类: import org.spr ...
- 前端跨域问题相关知识详解(原生js和jquery两种方法实现jsonp跨域)
1.同源策略 同源策略(Same origin policy),它是由Netscape提出的一个著名的安全策略.同源策略是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正 ...
- 如何解决Ajax跨域问题-1
如何解决Ajax跨域问题 最近在做AJAX调用C的问题,出现跨域问题,学习总结如下: 在做ajax读取数据的时候,经常会遇到ajax需要跨域的问题,但由于浏览器安全方面的限制,XMLHttpReque ...
- 解决ajax跨域请求 (总结)
ajax跨域请求,目前已用几种方法实现: 1)用原生js的xhr对象实现. var url="http://freegeoip.net/json/" ...
- 如何解决ajax跨域问题(转)
由 于此前很少写前端的代码(哈哈,不合格的程序员啊),最近项目中用到json作为系统间交互的手段,自然就伴随着众多ajax请求,随之而来的就是要解决 ajax的跨域问题.本篇将讲述一个小白从遇到跨域不 ...
- 看小白如何解决ajax跨域问题
由于此前很少写前端的代码(哈哈,不合格的程序员啊),最近项目中用到json作为系统间交互的手段,自然就伴随着众多ajax请求,随之而来的就是要解决ajax的跨域问题.本篇将讲述一个小白从遇到跨域不知道 ...
- 如何解决ajax跨域问题
如何解决ajax跨域问题(转) 由 于此前很少写前端的代码(哈哈,不合格的程序员啊),最近项目中用到json作为系统间交互的手段,自然就伴随着众多ajax请求,随之而来的就是要解决 ajax的跨域问题 ...
- 【前端_js】解决ajax跨域请求数据
1.ajax发送请求必须遵循同源策略,即请求方和相应方的协议头.域名.端口全部一样.只要三者有一个不一样都视为跨域,浏览器出于安全考虑不允许跨域访问. 解决ajax跨域访问的常用方法: a.使用jso ...
随机推荐
- 遍历Arraylist的方法
package com.test; import java.util.ArrayList; import java.util.Iterator; import java.util.List; publ ...
- vmware克隆之后网卡起不来的问题
问题: 克隆一台主机之后,改主机的网卡起不来,只有一个本地的回环地址网卡. 使用如下的命令都无效. /etc/init.d/network restart ifup eth0 原因: 这一vmware ...
- git生成ssh key及github ssh key对接
首先在本地安装好git工具并配置好环境变量 创建一个文件夹,在此处打开git bash: 命令>cd ~/.ssh 查看是否已经配置ssh 命令>git config --global ...
- 深入PHP变量存储结构 标签: PHP存储
1.深入PHP变量存储结构 标签: PHP存储 分类: 编程语言(10) 首先声明,我并没有去读PHP的源码,只是对于PHP的有时候诡异的表现感兴趣,找了一下开发人员laruence的博客结合PH ...
- CSS3选择器~一看吓一跳,这么多不会
复习CSS时发现很多选择器不会,因为平时很少用到.现在干脆一不做二不修,全部温习一遍.本文参考http://css.doyoe.com/. 一.元素选择器 图片来自:http://css.doyoe. ...
- 第三人称角色移动及自由移动视野(RigidBody实现)
重点:向量的运算.在获得水平及垂直方向的速度之后,将方向进行重设,让方向与视野同步(即:相机的方向与人物方向相同) 下面以一个实例来说明如何操作: 1.如图创建一个地形(Terrain),两个正方体( ...
- Parse error: syntax error, unexpected '[' in D:\phpStudy\WWW\tp5\thinkphp\library\think\Loader.php on line 18
g刚学习tp5就遇到了这个问题 百思不得其解,看到官网说明 是基于PHP5.4 设计的 打开 phpstudy版本一看 就呵呵呵了 .还是5.3的版本.更换版本之后 就ok了.
- SQL模糊查询条件的四种匹配模式
执行数据库查询时,有完整查询和模糊查询之分. 一般模糊语句格式如下: SELECT 字段 FROM 表 WHERE 某字段 LIKE 条件 其中关于条件,SQL提供了四种匹配模式: 1.% :表示任意 ...
- 浅谈echo、print、var_dump()、print_r()的区别
1.echo 和 print 的区别 共同点:首先echo 和 print 都不是严格意义上的函数,他们都是语言结构;他们都只能输出 字符串,整型跟int型浮点型数据.不能打印复合型和资源型数据: 而 ...
- appium执行iOS测试脚本并发问题
appium1.4.X+iOS9.X+xcode7.X: appium1.4.x+iOS9.x+xcode7.x,这一整套的配置做移动端自动化测试是测试人员常用的测试框架.关于,这一套测试框架的并发问 ...