AJAX四种跨域处理方法
同源策略
同源策略
同源策略限制从一个源加载的文档或者脚本如何与来自另一个源的资源进行交互。这是一个用于隔离潜在恶意文件的关键的安全机制。
具体定义是:一段脚本向后台请求数据,只能读取属于同一协议名、同一主机名、同一端口号下的数据。因此,请求不同协议名、不同主机名、不同端口号下的文件,违背同源策略,无法请求成果,需要进行跨域处理。
同源策略限制的具体行为:
(1)Cookie、LocalStorage、IndexDB无法读取;
(2)DOM无法获得;
(3)AJAX请求不能发送。
什么是跨域?
两个页面之间的请求,协议、域名、端口都必须相同,才算在同一个域,否则就是跨域。
直接通过FORM表单提交的post/get请求不受同源策略限制,因此需要设置csrf_token防范CSRF攻击。
跨域处理方法
CORS——服务端放开跨域限制(即XHR2)
CORS,Cross-Origin Resource Sharing,跨域资源共享
CORS定义了一种浏览器和服务器交互的方式来确定是否允许跨域请求。CORS是一种网络浏览器的技术规范,它为Web服务器定义了一种方式,允许网页从不同的域访问其资源。 CORS允许一个域上的网络应用向另一个域提交跨域AJAX请求。只需服务器发送一个响应header即可。
由于有同源策略,跨域请求默认是禁止的。
CORS通过设置HTTP Header Access-Control-Allow-Origin实现:
Access-Control-Allow-Origin:* //允许所有域名的脚本访问该资源
Access-Control-Allow-Origin:http://a.b.com //允许特定域名访问该资源
Access-Control-Allow-Methods:GET, PUT, DELETE, POST //允许的跨域请求
Access-Control-Allow-Headers:content-type //允许跨域请求保护header
Access-Control-Max-Age:xxx //跨域有效期内不需要重新发送预校验(OPTIONS)请求
CORS流程:JS先发出跨域请求,再检查响应中的“Access-Control-Allow-Origin”头。如果这个头允许当前页面跨域访问,则可以读取响应,否则被禁止访问。如果不是简单的CORS,则先发送OPTIONS进行预校验,允许访问再发送跨域请求。
代理
方法一:通过后端(ASP、ASP.NET、JAVA、PHP)获取其他域名下内容,再将结果返回前端。
方法二:NGINX反向代理转发
NGINX代理,转换为同域名。CORS的致命缺点:AJAX不会把cookie中的session id也发送过去。
方法三:NGINX方向代理,通过NGINX进行CORS控制。
JSONP
jsonp只支持get请求,不支持post。
原理:动态引入script标签,而script标签的src是可以跨域的。
iframe
通过修改document.domain来跨域:只能把document.main设置成自身或者更高一级的父域,且主域必须相同。——实现不同字域的框架间的交互。
可以用隐藏的iframe做代理,让iframe载入一个与AJAX目标页面处在相同域的页面,因此,该iframe可以正常使用AJAX获取数据,再通过修改document.domain,让主页面的js可以完全控制iframe。
AJAX四种跨域处理方法的更多相关文章
- js 几种跨域解决方法
同源策略: JS只能与同一个域中的页面进行通讯,必须是协议.域名.端口都相同,相同域下才能相互通信,这可以被认为是一种通信原则,叫同源策略. 跨域: js跨域是指通过js在不同的域之间进行数据传输或通 ...
- ajax原理和跨域解决方法
ajax是异步的 JavaScript 和 XML.通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新.这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新. 1--启动 ...
- 「JavaScript」四种跨域方式详解
超详细并且带 Demo 的 JavaScript 跨域指南来了! 本文基于你了解 JavaScript 的同源策略,并且了解使用跨域跨域的理由. 1. JSONP 首先要介绍的跨域方法必然是 JSON ...
- 「JavaScript」JS四种跨域方式详解
原文地址https://segmentfault.com/a/1190000003642057 超详细并且带 Demo 的 JavaScript 跨域指南来了! 本文基于你了解 JavaScript ...
- js处理的8种跨域方法
这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同域的框架中(iframe)的数据.只要协议.域名.端口有任何一个不同,都被 ...
- JavaScript最全的10种跨域共享的方法
在客户端编程语言中,如javascript和ActionScript,同源策略是一个很重要的安全理念,它在保证数据的安全性方面有着重要的意义.同源策略规定跨域之间的脚本是隔离的,一个域的脚本不能访问和 ...
- 解决ajax跨域的方法原理详解之Cors方法
1.神马是跨域(Cross Domain) 对于端口和协议的不同,只能通过后台来解决. 一句话:同一个ip.同一个网络协议.同一个端口,三者都满足就是同一个域,否则就是 跨域问题了.而为什么开 ...
- JSONP和CORS两种跨域方式的优缺点及使用方法原理介绍
随着软件开发分工趋于精细,前后端开发分离成为趋势,前端同事负责前端页面的展示及页面逻辑处理,服务端同事负责业务逻辑处理同时通过API为前端提供数据也为前端提供数据的持久化能力,考虑到前后端同事开发工具 ...
- JQuery - Ajax和Tomcat跨域请求问题解决方法!
在JQuery里面使用Ajax和Tomcat服务器之间进行数据交互,遇到了跨域请求问题,无法成功得到想要的数据! 错误信息部分截图: 通过错误信息判断知道已经发生在Ajax跨域请求问题了! 当前Tom ...
随机推荐
- Kafka消息存储原理
kafka消息存储机制 (一)关键术语 复习一下几个基本概念,详见上面的基础知识文章. Broker:消息中间件处理结点,一个Kafka节点就是一个broker,多个broker能够组成一个Kafka ...
- jQuery WeUI实现分页功能
使用前记得先引入:weui.min.css.jquery-weui.min.css.jquery-weui.min.js 第一步:将下面的代码放在body结束标签上面(这个位置可以自己按需求放) &l ...
- 牛X的规则引擎urule2
牛X的规则引擎urule2 教程:http://wiki.bsdn.org/pages/viewpage.action?pageId=75071499
- scala-02-基本数据类型-string-分支循环
一, 基本数据类型 1, scala的数据类型和java类似, 不同的是scala中所有的类型都是引用类型的 Byte Short Int Long Char Float Double String ...
- java sendmail
http://blog.csdn.net/Guerlei/article/details/53189522
- elasticSearch6源码分析(10)SettingsModule
1.SettingsModule概述 /** * A module that binds the provided settings to the {@link Settings} interface ...
- PHP strlen()函数和strpos()函数
strlen() 函数返回字符串的长度(字符数) 代码: <?php echo strlen("Hello world!"); ?> 上面的代码将输出:12 ...
- AngularJS学习笔记(三)数据双向绑定
双向绑定 双向绑定是AngularJS最实用的功能,它节省了大量的代码,使我们专注于数据和视图,不用浪费大量的代码在Dom监听.数据同步上,关于双向更新,可看下图: 下面,我们通过代码来实现.先不要纠 ...
- 在WPF中实现平滑滚动
WPF实现滚动条还是比较方便的,只要在控件外围加上ScrollViewer即可,但美中不足的是:滚动的时候没有动画效果.在滚动的时候添加过渡动画能给我们的软件增色不少,例如Office 2013的滚动 ...
- 检测锁及死锁详细信息,及sql语句
SELECT SessionID = s.Session_id, l.request_session_id spid, a.blocked, a.start_time, a.ecid, OBJECT_ ...