什么是跨域?如何解决跨域?

2023-05-29 0 279

什么是跨域?如何解决跨域?

甚么是布吕马

域: 是指应用程序无法继续执行其它中文网站的JAVA布吕马: 它是由应用程序的 相混思路 导致的,是应用程序对 JavaScript 实行的安全可靠管制,简而言之相混(即指在同一域)是三个网页具备完全相同的协定 protocol,主机host 和freenode port 则就会导致 布吕马,搜索引擎共同组成

✨ 布吕马情景

情景的布吕马情景有甚么样,请参照附注

现阶段url

允诺url

与否布吕马

其原因

http://www.autofelix.cn

http://www.autofelix.cn/api.php

协定/搜索引擎/端口都完全相同

http://www.autofelix.cn

https://www.autofelix.cn/api.php

协定不同

http://www.autofelix.cn

http://www.rabbit.cn

主搜索引擎不同

http://www.autofelix.cn

http://api.autofelix.cn

子搜索引擎不同

http://www.autofelix.cn:80

http://www.autofelix.cn:8080

端口不同

✨ 化解布吕马的四种方式

nginx的反向代理使用 nginx 反向代理实现布吕马,是最简单的布吕马方式只需要修改nginx 的配置即可化解布吕马问题,支持所有应用程序,支持session,不需要修改任何代码,并且不会影响服务器性能// nginx配置 server { listen 81; server_name www.domain1.com; location / { proxy_pass http://www.domain2.com:8080; #反向代理 proxy_cookie_domain www.domain2.com www.domain1.com; #修改cookie里搜索引擎 index index.html index.htm; # 当用webpack-dev-server等中间件代理接口访问nignx时,此时无应用程序参与,故没有相混管制,下面的布吕马配置可不启用 add_header Access-Control-Allow-Origin http://www.domain1.com; #现阶段端只布吕马不带cookie时,可为* add_header Access-Control-Allow-Credentials true; } }jsonp允诺jsonp 是服务器与客户端跨源通信的常用方法。最大特点是简单适用,兼容性好 兼容低版本IE,缺点是只支持 get 允诺,不支持 post 允诺原理时网页通过添加一个 <script> 元素,向服务器允诺 json数据,服务器收到允诺后,将数据放在一个指定名字的回调函数的参数位置传回来//jquery实现<script> $.getJSON(http://autofelix.com/api.php&callback=?, function(res) { // 处理获得的数据 console.log(res) });</script>后端语言代理可以通过一种没有布吕马管制的语言中转一下,通过后端语言去允诺资源,然后再返回数据比如 http://www.autofelix.cn 需要调用 http://api.autofelix.cn/userinfo可以先允诺 http://www.autofelix.cn 下的 php 文件,比如 http://www.autofelix.cn/api.php,然后再通过该 php 文件返回数据<?php // api.php 文件中的代码 public function getCurl($url, $timeout = 5) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HEADER,0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_TIMEOUT, $timeout); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,FALSE); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,FALSE); $result = curl_exec($ch); curl_close($ch); return$result; } $result = getCurl(http://api.autofelix.cn/userinfo); return $result;后端语言的设置主要通过后端语言主动设置布吕马允诺,这里以php 作为案例<?php // 允许所有搜索引擎访问 header(Access-Control-Allow-Origin: *); // 允许单个搜索引擎访问 header(Access-Control-Allow-Origin: https://autofelix.com); // 允许多个自定义搜索引擎访问 static public $originarr = [ https://autofelix.com, https://baidu.com, https://csdn.net, ]; $origin = isset($_SERVER[HTTP_ORIGIN]) ? $_SERVER[HTTP_ORIGIN] : ; if (in_array($origin, self::$originarr)) { // 允许 $originarr 数组内的 搜索引擎布吕马访问 header(Access-Control-Allow-Origin: . $origin); // 响应类型 header(Access-Control-Allow-Methods:POST,GET);// 带 cookie 的布吕马访问 header(Access-Control-Allow-Credentials: true); // 响应头设置 header(Access-Control-Allow-Headers:x-requested-with,Content-Type,X-CSRF-Token); }

相关文献:

https://blog.csdn.net/fujian9544/article/details/106597778

相关文献:https://www.docsget.com/#/Cross-domain/

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务