django之同源策略

Posted weidaijie

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了django之同源策略相关的知识,希望对你有一定的参考价值。

什么是同源策略

同源策略,它是由Netscape提出的一个著名的安全策略。现在所有支持javascript 的浏览器都会使用这个策略。所谓同源是指,域名,协议,端口相同。当一个浏览器的两个tab页中分别打开来 百度和谷歌的页面,当浏览器的百度tab页执行一个脚本的时候会检查这个脚本是属于哪个页面的,即检查是否同源,只有和百度同源的脚本才会被执行。如果非同源,那么在请求数据时,浏览器会在控制台中报一个异常,提示拒绝访问。

简单来说,端口不同或者域名不同,就会有庭院策略问题

什么是JSONP

首先提一下JSON这个概念,JSON是一种轻量级的数据传输格式,被广泛应用于当前Web应用中。JSON格式数据的编码和解析基本在所有主流语言中都被实现,所以现在大部分前后端分离的架构都以JSON格式进行数据的传输。

那么JSONP是什么呢? 
首先抛出浏览器同源策略这个概念,为了保证用户访问的安全,现代浏览器使用了同源策略,即不允许访问非同源的页面,详细的概念大家可以自行百度。这里大家只要知道,在ajax中,不允许请求非同源的URL就可以了,比如www.a.com下的一个页面,其中的ajax请求是不允许访问www.b.com/c.php这样一个页面的。

JSONP就是用来解决跨域请求问题的,那么具体是怎么实现的呢?

JSONP原理

ajax请求受同源策略影响,不允许进行跨域请求,而script标签src属性中的链接却可以访问跨域的js脚本,利用这个特性,服务端不再返回JSON格式的数据,而是返回一段调用某个函数的js代码,在src中进行了调用,这样实现了跨域。

JSONP的具体实现

技术图片
<!DOCTYPE html>
<html>
<head>
    <title>GoJSONP</title>
</head>
<body>
 $(".jsonp_test").click(function () {
    $.ajax({
        url:"http://127.0.0.1:8008/service/",
        type:"get",
        dataType:"jsonp",     // 伪造ajax  基于script
        jsonp: callbacks,    //相当于?callbacks=alex
        //jsonpCallback:"alex",
        success:function (data) {
            console.log(data)
        }
    })
})
<button class=jsop_test>测试</button>
</body> </html>
127.0.0.1:8000中的index.html
技术图片
import json
def jsonp_test(request):
    func=request.GET.get("callbacks") #获取请求的callbacks参数
    info={"name":"fuyong","age":18} #定义数据
    return HttpResponse(" (‘%s‘)"%(fun

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 



以上是关于django之同源策略的主要内容,如果未能解决你的问题,请参考以下文章

Django框架 之 跨域请求伪造

Django框架基础之跨域

django中同源策略和跨域解决方案

Django之跨域请求同源策略

Django - - 同源策略和跨域解决方案

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