当前位置:首页 » 《随便一记》 » 正文

一文搞懂│什么是跨域?如何解决跨域?

28 人参与  2022年07月29日 09:19  分类 : 《随便一记》  评论

点击全文阅读


✨ 目录

? 什么是跨域? 跨域场景? 解决跨域的四种方式

? 什么是跨域

域: 是指浏览器不能执行其他网站的脚本跨域: 它是由浏览器的 同源策略 造成的,是浏览器对 JavaScript 实施的安全限制,所谓同源(即指在同一个域)就是两个页面具有相同的协议 protocol,主机 host 和端口号 port 则就会造成 跨域

域名组成

? 跨域场景

场景的跨域场景有哪些,请参考下表
当前url请求url是否跨域原因
http://www.autofelix.cnhttp://www.autofelix.cn/api.php协议/域名/端口都相同
http://www.autofelix.cnhttps://www.autofelix.cn/api.php协议不同
http://www.autofelix.cnhttp://www.rabbit.cn主域名不同
http://www.autofelix.cnhttp://api.autofelix.cn子域名不同
http://www.autofelix.cn:80http://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 文件返回数据
// 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 作为案例
// 允许所有域名访问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');}

点击全文阅读


本文链接:http://m.zhangshiyu.com/post/43898.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最新文章

  • 顾奕辰的你我天涯各一方苏敏顾奕辰全书在线
  • 婆婆喂我吃骨灰剧情悬念章节分段解锁_[陈文启婆婆佳佳]反转剧情试读片段
  • 第九十九次日落节选免费试读_陆星泽方梨和霸节选高光片段速递‌
  • 你是我难愈的旧伤全书+后续+结局(傅深铭夏晚星霍泽枫)_(傅深铭夏晚星霍泽枫)你是我难愈的旧伤全书+后续+结局列表_笔趣阁(傅深铭夏晚星霍泽枫)
  • (番外)+(全书)也曾偷藏欢喜+后续+结局(乔喜商凛)全书在线_也曾偷藏欢喜+后续+结局免费列表_笔趣阁(乔喜商凛)
  • 途径一场风月全书+后续(商予淮宋泠音夏予烟)列表_途径一场风月全书+后续(商予淮宋泠音夏予烟)途径一场风月全书+后续在线
  • 淡月烟雨寄朝朝全书+后续(霍聿年祝沐雪)完结_(淡月烟雨寄朝朝全书+后续)列表_笔趣阁(霍聿年祝沐雪)
  • 无人知晓的告别必读(梁夕雾)_无人知晓的告别必读(梁夕雾)
  • (番外)+(全书)此处青兰不胜结局+番外(江映月叶青风)_(此处青兰不胜结局+番外免费全书)列表_笔趣阁(此处青兰不胜结局+番外)
  • 爱早已成空全文+后续_「沈漫依朋友向前」反转剧情试读片段
  • 途径一场风月全书+后续(商予淮宋泠音)完结_(途径一场风月全书+后续)列表_笔趣阁(商予淮宋泠音)
  • 所有爱意仅你可见(林语柔顾修远)全林语柔顾修远文结局_林语柔顾修远+结局列表_笔趣阁(所有爱意仅你可见全书+后续)

    关于我们 | 我要投稿 | 免责申明

    Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1