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

2.2Flask安装 flask_cors 扩展,官方文档

3、代理请求方式

  1. 接受客户端的`请求` 。
  2. 将 `请求` 转发给服务器。
  3. 拿到服务器 `响应的数据`。
  4. 将 `响应` 转发给客户端。

ajax跨域-CORS的更多相关文章

  1. Ajax跨域CORS

    在Ajax2.0中多了CORS允许我们跨域,但是其中有着几种的限制:Origin.Methods.Headers.Credentials 1.Origin 当浏览器用Ajax跨域请求的时候,会带上一个 ...

  2. AJAX 跨域 CORS 解决方案

    本篇文章由:http://xinpure.com/solutions-for-cross-domain-ajax-cors/ 两种跨域方法 在 Javascript 中跨域访问是比较常见的事情 就像现 ...

  3. Ajax操作如何实现跨域请求 (JSONP和CORS实现Ajax跨域的原理)

    由于浏览器存在同源策略机制,同源策略阻止ajax (XMLHttpRequest) 从一个源加载的文档或脚本获取或设置另一个源加载的文档的属性. 特别的:由于同源策略是浏览器的限制,所以请求的发送和响 ...

  4. AJAX跨域调用相关知识-CORS和JSONP(引)

    AJAX跨域调用相关知识-CORS和JSONP 1.什么是跨域 跨域问题产生的原因,是由于浏览器的安全机制,JS只能访问与所在页面同一个域(相同协议.域名.端口)的内容. 但是我们项目开发过程中,经常 ...

  5. Web Api 2(Cors)Ajax跨域访问

    支持Ajax跨域访问ASP.NET Web Api 2(Cors)的简单示例教程演示   随着深入使用ASP.NET Web Api,我们可能会在项目中考虑将前端的业务分得更细.比如前端项目使用Ang ...

  6. Vue中应用CORS实现AJAX跨域,及它在 form data 和 request payload 的小坑处理

    基本概念部分(一):理解CORS 说道Vue的跨域AJAX,我想先梳理一遍CORS跨域,"跨域资源共享"(Cross-origin resource sharing),它是一个W3 ...

  7. 解决ajax跨域的办法,代理,cors,jsonp

    1.使用php做代理去请求第三方api接口 php是可以跨域的,我们利用ajax请求本域名中的php文件,php再去请求第三方接口文件,从而达到跨域目的. php做代理请求: ajax请求本域名php ...

  8. 【PHP】Ajax跨域解决方案 、jsonp、cors

    参考文章: 1.https://blog.csdn.net/u014727260/article/details/72793459 (后台java,实际上差不多) 2. 如何解决ajax跨域传输 数据 ...

  9. Vue.js2 + Laravel5 采用 CORS 方式解决 AJAX 跨域的问题

    一.建立中间件 php artisan make:middleware CorsAjax 二.编写中间件 CorsAjax <?phpnamespace App\Http\Middleware; ...

随机推荐

  1. Centos7下nginx的安装与配置

    说明:软件安装的基础目录路径:/usr/local 所以下载软件的时候切换到此目录下下载直接解压即可 1.安装gcc gcc-c++依赖包 yum install -y gcc gcc-c++ 2.下 ...

  2. 引用js文件中的函数调用

    开发中遇到一个问题,代码demo如下: test.js文件内容: var b = getHomeCity(); Test.html文件内容: <!DOCTYPE html> <htm ...

  3. python函数知识七 闭包、装饰器一(入门)、装饰器二(进阶)

    21.闭包 闭包:在嵌套函数内,使用非全局变量(且不使用本层变量) 闭包的作用:1.保证数据的安全性(纯洁度).2.装饰器使用 .__closure__判断是否是闭包 def func(): a = ...

  4. SQL——IN操作符

    一.IN操作符基本用法 IN操作符用于在WHERE字句中规定多个值. 语法格式如下: SELECT 列名1,列名2... FROM 表名 WHERE 列名 IN(值1,值2...); 示例studen ...

  5. 第三方dll签名

    1.打开vs Tools下的工具命令 2.生成随机密钥对C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC>sn -k NonSignL ...

  6. Java File类与IO流

    File 类 java.io.File 文件和目录路径名的抽象表示形式, 对文件或目录进行操作 构造方法: File(File parent, String child) : 根据 parent 抽象 ...

  7. sourceTree 3.X免注册[学习]

    一. 在路径C:\****\AppData\Local\Atlassian\SourceTree下创建accounts.json文件 [ { "$id": "1" ...

  8. springboot学习入门简易版八---springboot2.0多环境配置、整合mybatis mysql8+(19-20)

    2.11 SpringBoot多环境配置(19)  application.properties中配置 Spring.profiles.active=prd 配置环境: Application-dev ...

  9. jenkens + github

    一  获取github accessToken 依次点击 settings----> Developer settings --->Personal access tokens  到这里如 ...

  10. WebSocket转载

    目录   概述  WebSocket 客户端  WebSocket 服务端  WebSocket 代理  FAQ  完整示例  资料 概述 WebSocket 是什么? WebSocket 是一种网络 ...