$Django 前后端之 跨域问题(同源策略) vue项目(axios跨域请求数据)
1 跨域问题(多个域之间的数据访问)
#同源策略(ip port 协议全部相同)
#本站的只能请求本站域名的数据
#CORS实现(跨域资源共享)
#实现CORS通信的关键是服务器。只要服务器实现了CORS接口,就可以跨源通信。
#CORS基本流程 #1_CORS请求分成两类:简单请求(simple request)和非简单请求(not-so-simple request) #2_满足一下为简单请求
(1) 请求方法是以下三种方法之一:
HEAD
GET
POST
(2)HTTP的头信息不超出以下几种字段:
Accept
Accept-Language
Content-Language
Last-Event-ID
Content-Type:只限于三个值application/x-www-form-urlencoded、multipart/form-data、text/plain #3_简单请求和非简单请求的区别? 简单请求:一次请求
非简单请求:两次请求,在发送数据之前会先发一次请求用于做“预检”,只有“预检”通过后才再发送一次请求用于数据传输。
* 关于“预检” - 预检请求方式:OPTIONS
- “预检”其实做检查,检查如果通过则允许传输数据,检查不通过则不再发送真正想要发送的消息
- 如何“预检”
=> 如果复杂请求是PUT等请求,则服务端需要设置允许某请求,否则“预检”不通过
Access-Control-Request-Method
=> 如果复杂请求设置了请求头,则服务端需要设置允许某请求头,否则“预检”不通过
Access-Control-Request-Headers
from django.utils.deprecation import MiddlewareMixin
#view局部
def test(request):
ret=HttpResponse('ok')
#允许http://127.0.0.1:8001域向我发请求
ret['Access-Control-Allow-Origin'] = 'http://127.0.0.1:8000'
if request.method == 'OPTIONS':
# 所有的头信息都允许
ret['Access-Control-Allow-Headers'] = '*'
return ret
#设置中间件(全局)
class xxx(MiddlewareMixin):
def process_response (self, request, response):
# 简单请求:
# 允许http://127.0.0.1:8001域向我发请求
# ret['Access-Control-Allow-Origin']='http://127.0.0.1:8001'
# 允许所有域向我发请求
response['Access-Control-Allow-Origin'] = '*'
if request.method == 'OPTIONS':
# 所有的头信息都允许
response['Access-Control-Allow-Headers'] = '*'
return response
django中的cors(view设置以及中间件设置)
注意点1:有个csrf跨域防伪(允许别的域访问的 域 要把csrf中间件注掉 | 视图全部继承apiview,as_view 返回了 csrf_exempt(view) )
ret['Access-Control-Request-Header']='contenttype,token'
2 vue中的(axios跨域请求数据)
vue中的ajax:
axios
安装:npm install axios
使用:
-先在main.js中配置:
import axios from 'axios'
Vue.prototype.$http=axios
-在组件中:
methods: {
btton_click: function () {
//取到对象
let cc = this
cc.$http.request({
//向其它域请求数据
url: 'http://127.0.0.1:8000/test/',
method: 'post',
data:{
//携带数据
}
}).then(function (response) {
//拿到原数据对象,更新
cc.course = response.data
}).catch(function (response) {
//请求失败
})
}
}
随机推荐
- 转载 IEnumerable和IEnumerator 详解
初学C#的时候,老是被IEnumerable.IEnumerator.ICollection等这样的接口弄的糊里糊涂,我觉得有必要切底的弄清楚IEnumerable和IEnumerator的本质. 下 ...
- SQL-数据库刷题
因是个人总结,只列出对自己有用的或较难的: 下面这道题,第一次拿到,我尝试用 开窗函数 ROW_NUMBER()OVER() 编号,但是发现不能够处理好连续的问题, 上网查找了别人的解法记录下来,其实 ...
- 细说ORM之Entity FrameWork系列(被替换)
一. 谈情怀 从第一次接触开发到现在(2018年),接近五年时间了,最初阶段连接数据库,使用的是[SQL语句+ADO.NET],那时候,什么存储过程.什么事务 统统不理解,生硬的将SQL语句传入SQL ...
- Kettle系列: Kettle并行执行Trans后的合并问题
我们在作业开发中为了处理效率, 经常需要并行执行一些trans, 等它们执行完毕后, 需要执行另外一些trans, 从流程上也就是分支+汇合. 粗看起来很简单, Kettle中对接一下这些组件就搞定了 ...
- MongoDB统计文档(Document)的数组(Array)中的各个元素出现的次数
一,问题描述 [使用 unwind 操作符 “解包” Document 里面的Array中的每个元素,然后使用 group 分组统计,最后使用 sort 对分组结果排序] 从 images.json ...
- GBK 字符集
什么是 GBK ? 中文名 汉字编码字符集 外文名 Chinese Internal Code Specification 全 称 <汉字内码扩展规范> GBK编码,是对GB2312 ...
- 23.Secondary Index
一. Secondary Index(二级索引)1.1. Secondary Index 介绍 • Clustered Index(聚集索引) ◦ 叶子节点存储所有记录(all row data) • ...
- 数据库范式:1NF,2NF,3NF,BCNF浅析
在设计与操作维护数据库时,最关键的问题就是要确保数据能够正确地分布到数据库的表中.使用正确的数据结构,不仅有助于对数据库进行相应的存取操作,还可以极大地简化应用程序中的其他内容(查询.窗体.报表.代码 ...
- 【Ubuntu】安装Java和Eclipse
1. 安装Java 1> sudo add-apt-repository ppa:webupd8team/java 2> sudo apt-get update 3> sudo ap ...
- [SYSS-2018-033]: Fujitsu Wireless Keyboard Set LX901 - Keystroke Injection Vulnerability
风险简介: [SYSS-2018-033]:富士通无线键盘组LX901 -击键注入漏洞 风险报告ID: sys - 2018 - 033 产品:无线键盘套件LX901 制造商:富士通 受影响版本:型号 ...