解决前端跨域的几种方法

这篇具有很好参考价值的文章主要介绍了解决前端跨域的几种方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、跨域报错

        在我们实际开发过程中,都有遇到过跨域的问题,跨域报错如下:

解决前端跨域的几种方法

二、为什么会报跨域?

        跨域的本质是浏览器基于同源策略的一种安全手段,主要是考虑到用户的信息安全。何为同源策略呢?同源策略是一种约定,它是浏览器最核心也最基本的安全功能。所谓同源(即指在同一个域)具有以下三个相同点:协议相同、域名相同、端口相同。

        反之非同源请求,也就是协议、端口、主机其中一项不相同的时候,这时候就会产生跨域。跨域是浏览器的限制,拦截的是响应而非请求。我们用抓包工具抓取接口数据,可以看到接口已经把数据返回来了,只是由于浏览器的限制我们获取不到数据。另外,并不是所有的跨域都会有问题,只有ajax和fetch产生的跨域才会被浏览器限制。

三、如何解决跨域?

(1)JSONP

        JSONP是一种比较古老的解决方案,这种方案没有兼容性问题,基本都可以使用,但是它所解决的问题比较有限,且对服务端接口有一定的要求,只支持get请求,不支持post,请求回来的东西当做js来执行。

        原理:JSONP本质上使用的是script标签的src属性,该标签有跨域请求资源的能力,且请求的资源类型是js脚本。也就是说,我们需要在服务器给返回一段js脚本,并且把要返回给前端的数据加入到这段js脚本中。在浏览器端执行这段脚本,从而达到获取数据的目的。

解决前端跨域的几种方法

(2)CORS

        CORS是 W3C 标准,属于跨源 ajax请求的根本解决方法。CORS 规范中,清楚定义了跨域存取控制的运作方式。首先,服务端需要在响应头中加上如Access-Control-Allow-Origin、Access-Control-Request-Method、Access-Control-Request-Headers 等设定,来限制服务器所能接受的来源、请求的方法、可携带的头等等。

        当浏览器发送资源请求时,如果是简单请求便会直接送出请求;若不符合前述条件,则会通过预检请求,确认是否可以通过服务器的限制,然后才会发送正式的请求。

解决前端跨域的几种方法

        简单说,该方法只需要直接让后端设置响应头,允许资源共享就ok了,前端不需要做额外修改。

(3)Proxy

        浏览器是禁止跨域的,但是服务端不禁止。拿Vue项目说,在本地运行npm run dev等命令时实际上是用node运行了一个服务器,因此proxyTable实际上是将请求发给自己的服务器,再由服务器转发给后台服务器,做了一层代理,因此不会出现跨域问题。

解决前端跨域的几种方法

        Vue-cli脚手架, 就启动了一个webpack开发服务器, 它就能做代理转发,我们只需要修改webpack开发服务器的配置即可。

Vue.config.js:

解决前端跨域的几种方法

        总结一下就是,在前端服务和后端接口服务之间 架设一个中间代理服务,它的地址保持和前端服务一致,那么,代理服务和前端服务之间由于协议、域名、端口三者统一不存在跨域问题,可以直接发送请求;代理服务和后端服务之间由于并不经过浏览器,没有同源策略的限制,也可以直接发送请求。这样,我们就可以通过中间这台服务器做接口转发,在开发环境下解决跨域问题,看起来好像挺复杂,其实vue-cli已经为我们内置了该技术,我们只需要按照要求配置一下即可。

当然,解决跨域的方法不止这些,比如nginx反向代理等方式也可以解决跨域问题。大家可以结合实际采取最简洁方便的方式。文章来源地址https://www.toymoban.com/news/detail-484908.html

到了这里,关于解决前端跨域的几种方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 探究Spring Boot 中实现跨域的几种方式

    在现代Web应用中,由于安全性和隐私的考虑,浏览器限制了从一个域向另一个域发起的跨域HTTP请求。解决这个问题的一种常见方式是实现跨域资源共享(CORS)。Spring Boot提供了多种方式来处理跨域请求,本文将介绍其中的几种方法。 Spring Boot提供了一个注解 @CrossOrigin ,可以

    2024年02月05日
    浏览(31)
  • 解决前端VUE前端框架报错Error: error:0308010C:digital envelope routines::unsupported的几种方法

    主要是因为 nodeJs V17 版本发布了 OpenSSL3.0 对算法和秘钥大小增加了更为严格的限制,nodeJs v17 之前版本没影响,但 V17 和之后版本会出现这个错误。 **方案1:**打开IDEA 终端,直接输入 **方案2:**打开IDEA 终端,直接输入(问题解决) **方案3:**卸载当前版本,安装合适的版本

    2024年02月04日
    浏览(36)
  • 【Java】Java中解决跨域问题的几种方法(建议收藏)

    我们在开发过程中经常会遇到前后端分离而导致的跨域问题,导致无法获取返回结果。跨域就像分离前端和后端的一道鸿沟,君在这边,她在那边,两两不能往来. 定义 跨域(CORS)是指不同域名之间相互访问。跨域,指的是浏览器不能执行其他网站的脚本,它是由浏览器的同

    2024年02月11日
    浏览(30)
  • vue如何解决跨域的问题,有哪几种方式?

    在使用axios发送请求之后,没有得到返回的数据,打开控制台发现如下图所示的报错: 这是提示跨域了。所有使用JavaScript的浏览器都会支持同源策略。同源策略即指域名/协议/端口号相同。只要有一个不同,就会当作跨域请求。  解决方法为: 1. CORS 后端通过 CORS 解决跨域

    2024年02月08日
    浏览(44)
  • SpringBoot解决跨域的方法详细教程

    Spring Boot提供了多种解决跨域问题的方法,以下是其中几种常用的方法: 使用@CrossOrigin注解是一种简单且快速的解决跨域问题的方法。在Spring Boot的Controller类或方法上添加@CrossOrigin注解,可以指定允许跨域访问的源、方法、头部等信息。 1. 在Controller类或方法上添加@CrossOrig

    2024年02月13日
    浏览(27)
  • Java跨域问题的几种后端解决方式

    跨域指的是:浏览器不能执行其他网站的脚本,从一个域名的网页去请求另一个域名的资源时,域名、端口、协议任一不同,都是跨域。跨域是由浏览器的同源策略造成的,是浏览器施加的安全限制。a页面想获取b页面资源,如果a、b页面的协议、域名、端口、子域名不同,所

    2024年02月08日
    浏览(32)
  • 前端生成分享海报的几种方法

    1,使用painter插件    适用于微信小程序及uniapp的小程序端 ①,引入插件painter    克隆地址:https://gitcode.net/mirrors/Kujiale-Mobile/Painter    下载的 painter 放到微信小程序的 components 目录下 ②在json文件中引入 \\\"usingComponents\\\": {         \\\"painter\\\":\\\"/components/painter/painter\\\" }, 注:在u

    2024年02月21日
    浏览(48)
  • 前端展示 PDF 预览的几种方法

    一、js实现pdf预览 HTML 内联框架元素 iframe 表示嵌套的 browsing context。它能够将另一个 HTML 页面嵌入到当前页面中。 HTML embed 元素将外部内容嵌入文档中的指定位置。此内容由外部应用程序或其他交互式内容源(如浏览器插件)提供 HTML object 元素(或者称作 HTML 嵌入对象元素)

    2024年02月09日
    浏览(30)
  • 前端开发中,定位bug的几种常用方法

    目录 第一章 前言 第二章 解决bug的方法 2.1 百度 2.2 有道翻译 2.3 debugger 2.4 console.log 日志打印 2.5 请求体是否携带参数 2.6 注释页面渲染代码 2.7 其他 第三章 尾声 备注:该文章只是本人在工作/学习中常用的几种方法,如果有不对大家“胃口”的地方,勿喷,可以在评论区提供

    2024年02月04日
    浏览(39)
  • 跨域的原因和解决

    跨域问题源于浏览器的同源策略限制。 同源策略主要是限制cookie的访问,在非同源的情况下,A网页不能够访问B网页, “同源” 即是 协议 + 域名 + 端口 同源的设计是为了防止CSRF(跨站请求伪造),举一个例子来说就是A网站是钓鱼网站,当登录银行网址存钱赚钱后,保留了

    2024年02月10日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包