ajax跨域-CORS
CORS:跨域资源共享,是一种跨域访问的W3C标准,它允许浏览器可以跨源服务器进行请求,可以让ajax实现跨域访问。出现跨域问题的原因是浏览器同源策略导致的,协议+域名+端口三者一致被认为是同源。网站出现同源策略问题,即:出现了未经允许的跨域请求。
同源策略下的限制:
- 无法获取非同源的Cookie、LocalStorage、SessionStorage等
 - 无法获取非同源的dom
 - 无法向非同源的服务器发送ajax请求
 
CORS原理: 浏览器与服务器通过一些HTTP协议头来做一些约定和限制,使用了额外的 HTTP 头来告诉浏览器,允许 Web 应用服务器进行跨域访问。从而使跨域数据传输得以安全进行。当一个资源从与该资源本身所在的服务器不同的域、协议或端口请求一个资源时,资源会发起一个跨域 HTTP 请求。本质原理是在服务器的response header中加入“Access-Control-Allow-Origin: *”即可实现跨域访问。但注意并不一定是浏览器限制了发起跨站请求,也可能是跨站请求可以正常发起,但是返回结果被浏览器拦截了。
解决方式:
- JSONP方式
 - CORS方式
 - 代理请求方式
 
1、通过Ajax获取json数据时,存在跨域的限制。但是在Web页面上调用js的script脚本文件时却不受跨域的影响,所以可以使用JSONP来实现跨域的传输。因此,我们需要将Ajax调用中的dataType从JSON改为JSONP(相应的API也需要支持JSONP)格式。注意:JSONP只能用于GET请求。
2.1、Django
- 直接修改Django中的views.py文件,修改views.py中对应API的实现函数,添加响应头以此允许其他域通过Ajax请求数据:
 
def myview(_request):
response = HttpResponse(json.dumps({"key": "value", "key2": "value"}))
response["Access-Control-Allow-Origin"] = "*"
response["Access-Control-Allow-Methods"] = "POST, GET, OPTIONS"
response["Access-Control-Max-Age"] = ""
response["Access-Control-Allow-Headers"] = "*"
return response
- 安装 django-cors-headers中间件:官方文档
 
2.2、Flask:安装 flask_cors 扩展,官方文档
3、代理请求方式
- 接受客户端的`请求` 。
 - 将 `请求` 转发给服务器。
 - 拿到服务器 `响应的数据`。
 - 将 `响应` 转发给客户端。
 
ajax跨域-CORS的更多相关文章
- Ajax跨域CORS
		
在Ajax2.0中多了CORS允许我们跨域,但是其中有着几种的限制:Origin.Methods.Headers.Credentials 1.Origin 当浏览器用Ajax跨域请求的时候,会带上一个 ...
 - AJAX 跨域 CORS 解决方案
		
本篇文章由:http://xinpure.com/solutions-for-cross-domain-ajax-cors/ 两种跨域方法 在 Javascript 中跨域访问是比较常见的事情 就像现 ...
 - Ajax操作如何实现跨域请求 (JSONP和CORS实现Ajax跨域的原理)
		
由于浏览器存在同源策略机制,同源策略阻止ajax (XMLHttpRequest) 从一个源加载的文档或脚本获取或设置另一个源加载的文档的属性. 特别的:由于同源策略是浏览器的限制,所以请求的发送和响 ...
 - AJAX跨域调用相关知识-CORS和JSONP(引)
		
AJAX跨域调用相关知识-CORS和JSONP 1.什么是跨域 跨域问题产生的原因,是由于浏览器的安全机制,JS只能访问与所在页面同一个域(相同协议.域名.端口)的内容. 但是我们项目开发过程中,经常 ...
 - Web Api 2(Cors)Ajax跨域访问
		
支持Ajax跨域访问ASP.NET Web Api 2(Cors)的简单示例教程演示 随着深入使用ASP.NET Web Api,我们可能会在项目中考虑将前端的业务分得更细.比如前端项目使用Ang ...
 - Vue中应用CORS实现AJAX跨域,及它在 form data 和 request payload 的小坑处理
		
基本概念部分(一):理解CORS 说道Vue的跨域AJAX,我想先梳理一遍CORS跨域,"跨域资源共享"(Cross-origin resource sharing),它是一个W3 ...
 - 解决ajax跨域的办法,代理,cors,jsonp
		
1.使用php做代理去请求第三方api接口 php是可以跨域的,我们利用ajax请求本域名中的php文件,php再去请求第三方接口文件,从而达到跨域目的. php做代理请求: ajax请求本域名php ...
 - 【PHP】Ajax跨域解决方案 、jsonp、cors
		
参考文章: 1.https://blog.csdn.net/u014727260/article/details/72793459 (后台java,实际上差不多) 2. 如何解决ajax跨域传输 数据 ...
 - Vue.js2 + Laravel5 采用 CORS 方式解决 AJAX 跨域的问题
		
一.建立中间件 php artisan make:middleware CorsAjax 二.编写中间件 CorsAjax <?phpnamespace App\Http\Middleware; ...
 
随机推荐
- djngo未整理
			
Django Django基础命令 - runserver 本地建议运行Django - shell 进入Django项目得python shell环境 - test 执行Django 用列测试 数据 ...
 - 【C++札记】内联函数
			
概述 函数的使用使得相同代码不必多次重写,但会带来额外的开销,函数调用的过程中会有入栈和出栈,这些都会消耗时间. 如果一个函数在程序运行过程中被成千上万次调用,那么这个开销也是不容忽视的,C++中引入 ...
 - SpringCloud之Zuul网关简介、映射vs过滤配置使用
			
目的: Zuul路由网关简介及基本使用 Zuul路由映射配置 Zuul请求过滤配置 Zuul路由网关简介及基本使用 Zuul简介: Zuul是从设备和网站到Netflix流应用程序后端的所有请求的前门 ...
 - 使用 SetParent 跨进程设置父子窗口时的一些问题(小心卡死)
			
原文:使用 SetParent 跨进程设置父子窗口时的一些问题(小心卡死) 在微软的官方文档中,说 SetParent 可以在进程内设置,也可以跨进程设置.当使用跨进程设置窗口的父子关系时,你需要注意 ...
 - php操作表格(写)
			
一,转载:http://www.thinkphp.cn/extend/832.html 二,转载:http://m.blog.csdn.net/article/details?id=7827038
 - 装饰器带类参数 & 一个函数应用多个装饰器
			
装饰器:不改变原函数的基础上,给函数增加功能的方式,称为装饰器 即:为已经存在的对象添加额外的功能 装饰器其实就是一个闭包,把一个函数当做参数后返回一个替代版的函数 decos.py:(装饰器的参数类 ...
 - 过渡属性transition
			
过渡属性:使元素变化过程可见 transition: all 1s;元素所有变化过程都可见 transition: 1s;元素所有变化过程都可见 transition: 指定属性 2s 1s;指定属性 ...
 - springMVC + mybatis 下出现JDBC Connection *** will not be managed by Spring错误
			
仔细查看配置中是否有如下类似的配置 execution(* com.ciguo.service.*.*(..)) <aop:config> <aop:pointcut id=&quo ...
 - python 标准库subprocess
			
作者:Vamei 出处:http://www.cnblogs.com/vamei subprocess包主要功能是执行外部的命令和程序.subprocess的功能与shell类似.subprocess ...
 - Vue中v-model解析、sync修饰符解析
			
上善若水,水善利萬物而不爭.——<道德經> 简介 在平时开发是经常用到一些父子组件通信,经常用到props.vuex等等,这里面记录另外的三种方式v-model.sync是怎么使用,再说是 ...