• 跨域问题-笔记


    一、什么是跨域:

    跨域指的是不同服务器之间不能相互访问各自的资源或者数据,这出于一个策略——“同源策略”,那么为什么要这么设计呢,这是因为,一些网站的数据可能涉及的用户的隐私,因此不属于当前服务器的网站是不能访问它的,就比如,我们登陆淘宝后,由不小心点进了其他的一个钓鱼网站,如果说不这么设置,那么钓鱼网站就可以获取到你的登陆账号和密码,进而可以达到使用你的账户购买东西的目的,因此跨域是出于安全的考虑而诞生的

    • 当一个请求url的协议、域名、端口三者之间任意一个与当前页面url不同即为跨域

    在这里插入图片描述

    二、跨域问题解决思路:

    1.从浏览器入手

    其实跨域只在浏览器下才会触发,那有没有办法禁用浏览器的同源策略呢?办法还真的有。

    对于IE浏览器:进入ie的网际网路选项设置,然后选择安全性,再选择自订等级,然后下拉,找到「存取跨网络的资料来源」,选择启用即可;

    对于chrome浏览器:通过在命令行,输入chrome.exe --allow-file-access-from-files --user-data-dir=“C:/Chrome dev session” --disable-web-security,这会新建一个浏览器实例,自动打开的chrome会显示一系列黄色的文字就说明成功了;

    对于FireFox浏览器:在地址栏输入about:config,然后下拉找到security.fileuri.strict_origin_policy,然后设置为false即可

    2.从域名入手

    既然域名等信息不一致导致跨域产生,那么干脆就把两个项目合并成一个项目,使用相同的协议、域名和端口。

    3.从jsonp入手

    其实认真想想,我们的系统中经常会用到外链的图片、样式文件以及插件,那这些不会导致跨域吗?是的,真的不会,因为这些是http请求,并不是前面定义的xhr(XmlHttpRequest)请求。

    既然图片和js脚本可以正常请求,那么如果把script脚本的src改成我需要跨域请求的url是不是就可以了呢?

    是可以的,当请求接口返回的数据需要稍微处理下。在平常引入script脚本时,下载完文件后自动执行,如果我们把src改成跨域url,而且返回值是一段jjs语句,比如:

    req.send(“alert(1)”); //后台返回js语句那么前台会会自动解析并执行。

    4.从代理入手

    还是回到最开始,既然浏览器认为非同源不安全,那么向同源请求不就行了?我们把请求转到同一项目下的后台,在同项目的后台进行xhr请求,然后把请求结果原样返回给前台,这就是代理(或者叫转发)。

    成功的原因是同源策略只在浏览器下才起作用,我用后台来请求其他的url,那是不受影响的。开启后台代理可以用C#、JAVA、NodeJs、甚至是python都行,只要能被前端访问的并且能转发请求就可以。

  • 相关阅读:
    3428. 放苹果
    雷达波束高度估计、折射分类、大气波导现象概念
    信号面试题
    4、QT中的网络编程
    Spring Boot自定义Namespace
    【9】c++11新特性 —>&&的特性
    几个非常有意思的javascript API
    Armbian 23.11(Ubuntu 22.04)安装glances不显示docker容器状态解决办法
    掌握Perl命令行:深入解析命令行参数的艺术
    Docker容器:docker基础
  • 原文地址:https://blog.csdn.net/qq_57828911/article/details/133779862