聊一聊跨域,Vue向Django请求数据的一些问题

1.做前后端分离

前端使用Vue程序,后端使用Django配合rest-framework。

那么前端Vue通过API接口拿到数据会出现跨域的问题,JSONP只是在get中会用到的,所以这里使用cors来解决一下。

一个Vue程序通过ajax或者axios发送一个请求过来,这里需要做一个允许跨域请求资源的处理。

这里写一个中间件一劳永逸。

from django.middleware.common import CommonMiddleware#拿到这个中间件,这个中间件继承MiddlewareMixin
class CORSMiddleware(CommonMiddleware):   def process_response(self,request,response): 

    #添加响应头 #允许什么域名来获取我的数据     response["Access-Control-Allow-Origin"]="*" 

    #允许你携带Content-Type这个请求头     response["Access-Control-Allow-Headers"]="Content-Type" 

    #允许你发送delete请求,Put请求     response[‘Access-Control-Allow-Methods‘] = "DELETE,PUT" 

    return response

也可以直接把middlewareMixin拿过来。

class MiddlewareMixin(object):
    def __init__(self, get_response=None):
        self.get_response = get_response
        super(MiddlewareMixin, self).__init__()

    def __call__(self, request):
        response = None
        if hasattr(self, ‘process_request‘):
            response = self.process_request(request)
        if not response:
            response = self.get_response(request)
        if hasattr(self, ‘process_response‘):
            response = self.process_response(request, response)
        return response

class CORSMiddleware(MiddlewareMixin):

    def process_response(self,request,response):
        # 添加响应头

        # 允许你的域名来获取我的数据
        response[‘Access-Control-Allow-Origin‘] = "*"

        # 允许你携带Content-Type请求头
        response[‘Access-Control-Allow-Headers‘] = "Content-Type"

        # 允许你发送DELETE,PUT
        response[‘Access-Control-Allow-Methods‘] = "DELETE,PUT"

        return response

这里对在中间件就对响应信息做一个cors跨域请求。

对了记得在settings.py中加上这个中间件。

这个中间件的原理就是浏览器看到了这个请求头,做了处理

就算你在这加一个xxx=888的话,

别人通过跨域在这里也会看到这个信息。

cors的本质就是设置响应头

原文地址:https://www.cnblogs.com/geogre123/p/9786942.html

时间: 2024-10-09 21:29:13

聊一聊跨域,Vue向Django请求数据的一些问题的相关文章

利用Jsonp跨域大发888搭建请求数据(原生和Jquery的ajax请求),简单易懂!

前言 :本文示例部署大发888搭建QQ2952777280[] hxforum.com 在XAMPP建站集成软件包上,在localhost环境下进行测试 1.什么是跨域 由于浏览器同源策略,凡是发送请求url的协议.域名.端口三者之间任意一与当前页面地址不同即为跨域.存在跨域的情况 :(1)网络协议不同,如http协议访问https协议. (2)端口不同,如8080端口访问3000端口. (3)域名不同,如aaaa.com访问bbbb.com. (4)子域名不同,如java.ddd.com访问q

解决跨域问题以及Django中POST传递参数错误

一.跨域 在进行前后端开发的时候需要涉及到跨域的问题,跨域既可以在前端解决也可以在后端解决.前段解决的思路就是转换路径,将发出的请求的url地址转换成可以映射成的地址.后端的解决思路是将获取的地址转换成可以映射的地址. 1. 模型 1.1 前端跨域解决的模型 由于路由router的不同,因此在跨域请求的时候通过更换请求源为origin再对后端进行请求 1.2 后端跨域解决的模型 后端通过可接收的url来进行相同path的处理,揭示了前后端分析的关键点以及跨域解决的本质,即对相同的path进行不同

跨域GET、POST请求

跨域GET.POST请求的小结 重点:跨域POST大量数据: JQuery:$.ajax/$.getJSON支持jsonp格式的跨域,但是只支持GET方式,暂不支持POST: CORS:w3c关于跨域的新方案,res.setHeader('Access-Control-Allow-Origin','*'),兼容IE9+: so,跨域POST是个值得研究的问题啊!万能的JQuery无法跨域POST:鉴于基本国情,CORS也只是适合在移动端玩玩: 相信有同学这样做过: 1 $.ajax({ 2 ty

springboot shiro 前后端分离,解决跨域、过虑options请求、shiro管理session问题、模拟跨域请求

一.解决跨域.过虑options请求问题 1.创建过虑类 import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; import javax.servlet.*; import javax.servlet.annotation.WebFilter; import javax.servlet.http.HttpServletRequest; im

处理跨域Options预检请求

//处理跨域Options预检请求 if($_SERVER['REQUEST_METHOD'] == 'OPTIONS'){ //允许的源域名 header("Access-Control-Allow-Origin: *"); //允许的请求头信息 header("Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Authorization"); //允许的请求

axios,vue-echarts, async, vue 图表数据处理; axios 跨域代理; 异步同步请求接口;生命周期函数

1.vue-echarts 安装和组件引用 插件官网 https://github.com/ecomfe/vue-echarts 安装 npm install eacharts vue-echarts 页面引入 import ECharts from 'vue-echarts' import ECharts from 'vue-echarts' import 'echarts/lib/chart/line' // 折线图 import "echarts/lib/component/title&q

前后端分离,解决跨域问题及django的csrf跨站请求保护

1. 前后端分离解决跨域问题 解决跨域调用服务并设置headers 主要的解决方法需要通过服务器端设置响应头.正确响应options请求,正确设置 JavaScript端需要设置的headers信息 方能实现: 关于跨域,前端会先发送OPTIONS请求,进行预检,检查后端是否允许前端设置的相应的请求头,请求内容 function getCookie(name) { var cookieValue = null; if (document.cookie && document.cookie

同源、同源策略、跨域问题、django解决方案

什么是同源: URL由协议.域名.端口和路径组成,如果两个URL的协议.域名和端口相同,则表示他们同源. 注意:假如你的网站ip是123.123.123.123,网站的域名是www.abc.com. http://123.123.123.123:80与http://www.abc.com:80仍然不是同源,因为浏览器会根据字符串来判断的! 什么是同源策略 同源策略是浏览器的一个安全功能,不同源的客户端脚本在没有明确授权的情况下,不能读写对方资源.所以a.com下的js脚本采用ajax读取b.co

跨域问题和django中实现跨域

跨域问题 1.同源策略(浏览器的安全功能): 请求的url地址,必须与浏览器上的url地址处于同域上,也就是域名,端口,协议相同 2.CORS跨域资源共享 实现CORS通信的关键是服务器,只要服务器实现了CORS接口,就可以跨源通信 3.CORS请求分为简单请求和非简单请求 4.只要符合以下两个条件,就是简单请求,否则就是非简单请求 (1) 请求方法是以下三种方法之一: HEAD , GET ,POST (2)HTTP的头信息不超出以下几种字段: Accept, Accept-Language