指南:本文的首席执行官注释将向您介绍Django Cross -domain请求与什么相关的内容。我希望这对每个人都会有所帮助。让我们来看看。
顾名思义,Cross -domain请求是一个站点中的资源,可以访问另一个不同域名站点上的资源。这种情况非常普遍,例如通过样式加载外部样式表文件。通过IMG标签加载外部图片,通过脚本加载外部脚本文件。标签,通过WebFont加载字体文件等等。默认情况下,脚本访问文档属性之类的数据采用相同的源策略(相同的原始策略)。
那么,什么是同源策略?如果协议,域名和两个页面的端口完全相同,则它们是同源的。同源策略是防止从一个地址或脚本加载的文档的属性或设置文档从另一个地址加载。如果两个页面的主要域名是相同的,则可以通过设置文档属性来考虑它们同源。
域是Windows网络中的独立单元。域之间的相思需要信任关系(即信任关系)。信任关系是在域之间连接的桥梁。当一个域与其他域建立信任关系时,两个域不仅可以根据需要相互管理,而且可以分配设备。整个网络上的文件和打印机等资源,以使不同的域能够实现不同域之间的网络资源的共享和管理。Essencethere是一个简洁的说法,可以解释交叉域的广泛区域:以简单的术语,cross -domain访问,网站A的JavaScript代码A试图访问B网站,包括提交内容和获取内容。根据安全原因,主要浏览器禁止使用交叉域访问。
解决方案:
1. JS将请求发送到服务器,然后让服务器转到另一个域以获取数据并返回数据。(对于您无法控制另一个域),例如,请在PHP中使用Curl。
2.放置交叉域文件。
3.使用JSONP。尽管无法传达Cross -domain,cross -domain js文件。
首先定义功能
var returnata;
功能getData(obj){
returnata = json.parse(obj);
}
当我们要询问请求数据时,我们可以介绍包含返回信息的JS文件。
例如:脚本type =“ text/javascript” src =“ https://www.shouxicto.com/article/ "////
JS的内容为GetData({JSON:'format'});输出格式是文本/JavaScript(例如带标头的PHP('content-type:text/javascript');
然后,当加载文件时,解析JS时将执行函数。
以这种方式插入页面:
var脚本= document.createelement('script');
script.src ='';//通过参数ID = 12321
body.appendchild(脚本);
Cross -domain是JavaScript的“安全性”,它不允许浏览器在其他域名页面中的其他域名页面中的对象调用当前可访问域名的域名页面中的其他域名页面。
交叉域请求是解决禁止交叉域访问的问题。
使用JSONP的原因是JSON是JavaScript中的一个对象,并且有图片,CSS,JavaScript脚本文件等。在Cross -domain访问中,因此您可以在页面渲染期间在脚本标签上动态设置SRC路径,并且此路径返回。这是JSON对象。
1.当浏览器从域名网页上请求另一个域名的资源时
2.只要协议,域名和端口不同,它们就被视为不同的域,并且它们之间的请求是跨域操作。
协议http和https不同,端口80为81,并且更好地理解域名
交叉域限制主要用于安全考虑
浏览器的同源策略将导致交叉域。这里的同源策略分为以下两种圆顶同源策略:
1.禁止操作不同的源页面。这里的主要情况是iframe的情况,不同域名的iframe限制了互操作性。
2. XMLHTTPREQUEST FAMILLE策略:禁止使用XHR对象将HTTP请求启动到不同来源的服务器地址。
基本原理是动态创建脚本标签,然后将SRC属性用于交叉域。
那很含糊,让我们看看一个示例://定义一个有趣的功能
返回的JS脚本将直接执行。因此,预先执行的娱乐函数,并传递数据。
当然,这只是一个原则演示。在实际情况下,我们需要动态创建此有趣的功能并在数据返回时破坏它。因为在实际使用中,我们使用的各种AJAX库基本上包括JSONP的包装,但我们仍然需要知道该原理,否则我不喜欢知道为什么JSONP无法发送邮政请求。
浏览器中有交叉域限制,但是服务器没有交叉域问题,因此服务器的资源请求服务器的域可以返回到客户端。
对于相同的域名和不同的子域,您可以使用document.duin cross -domain of cross -domain.ine.in thice,您可以设置文档。那就是您可以通过父或窗口['iframename']获取iframe的窗口对象。
窗口。名称交叉 - 也受同源策略的限制。父帧和子帧的SRC必须指向统一的域名。窗口的优点。名称是名称的值在不同的页面上(或不同的域名),并且在加载后它仍然存在,除非您显示更改。支撑长度达到2m。
**协议,端口和域名**请求URL。其中,其中之一与当前页面URL不同。
也就是说:( http/https)协议,(分段福特)主域名,(www)子域名,(8080)端口
由于浏览器的同源策略的限制,同源策略是一种安全策略。同型物流是指域名,协议和端口,这将防止一个域的JS脚本与另一个域的内容相互作用。浏览器中的两个页面中的不安全和异常行为。
当然,如果来源不同,将会有某些限制:
[1]非本体网页的cookie,localstorage和indexedDB
[2]无法联系非本体网页的DOM
[3]无法将AJAX请求发送到非类似的源地址
document.createelement(“脚本”)生成脚本标签,然后插入体内。
JSONP的实现原则是创建一个脚本标签,然后将SRC需要的API地址放置。该请求只能由无法发布的GET方法使用(将数据传输到服务器)。
非正式传输协议,该协议允许用户将回调参数传递到服务器,然后在服务器返回数据时将回调参数用作函数名称。功能来处理返回的数据。
通常,在处理请求数据时,允许允许允许允许请求的标头信息,并且服务器设置了访问控制的信息。
窗口对象具有名称属性。在窗口下,加载在窗口中的页面是共享一个窗口。名称。
在a.html中,如何加载b.html页面并在a.html页面上获取b.html的数据,您可以获取b.html数据,然后获取数据以获取a的数据.html页面。
但是iFrame希望在b.html中获取数据,您只需要设置此iFrame as的SRC即可。如果a.html想要获取iframe获得的数据,也就是说,窗口的值。iframe的名称,您需要THIFRAME的SRC设置为与A.HTML页面相同的域,否则A.HTML将无法访问iframe中的window.name属性。
//父亲窗打开一个子窗户
var openwindow = window.open('',','title');
//将消息发送到子-Window(第一个参数表示已发送的内容,第二个参数表示接收消息窗口的URL)
OpenWindow.postMessage(“很高兴认识您!','');
致电消息事件并收听另一方发送的消息
//监视消息消息
window.addeventlistener('message',函数(e){
console.log(E.Source);// E.Source发送消息
console.log(e.origin);// e.origin消息到网站
console.log(e.data);// e.data发送消息
}, 错误的);
服务器 {
#9099端口
听9099;
#域名是Localhost
server_name localhost;
#localhost:9099/API看起来像这样,全部转发到真实的服务侧地址
位置 ^? /api {
proxy_pass;
}
}
//当请求不会越过域,然后使用nginx聆听所有localhost时,请使用域名回到前端:9099/api,都转发到真实的服务侧地址
拿来 ('', {
方法:“帖子”,
标题:{
“接受”:'application/json',
'content-type':'application/json'
},,
身体:json.stringify({{{{
味精:“ helloiframepost”
})
})
1.安装django-cors头
PIP安装django-cors头
1
2.配置设置.py文件
instasted_apps = [[[
Em
“ corsheaders”,
Em
这是给予的
mideware_classes =(
Em
'corsheaders.middleware.corsmiddleware',
'django.middleware.common.commonmiddleware',#NOTE订单
Em
治愈
#
cors_allow_credentials = true
cors_origin_allow_all = true
cors_origin_whitelist =(
'*'
治愈
cors_allow_methods =(
'删除',
'得到',
'选项',
'修补',
'邮政',
'放',
'看法',
治愈
cors_allow_headers =(
'xmlhttprequest',
'x_filename',
“接受”,
'授权',
'内容类型',
'dnt',
'起源',
'用户代理',
'x-csrftoken',
'x征求书',
“ pragma”,
治愈
好!问题解决了!
结论:以上是首席CTO注释为每个人编制的Django Cross -domain请求的所有内容。感谢您阅读本网站的内容。我希望这对您有帮助。不要忘记在此网站上找到它。