vue解决跨域_java跨域解决方案

vue解决跨域_java跨域解决方案现阶段跨域方式有很多种,但是基本思想只有两种:绕过同源策略:历史遗留的产物,虽然思想很好,但是局限性太大(仅支持、因为数据是在中,所以携带数据小)。:通过反向代理绕过去,这是很完美的解决方案,加上会给服务器增加一点压力,不过这点压力问题并不大[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ddoEgRFd-1656482203293)(https://juejin.cn/)][外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4M4avsX0-1

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

前言

跨域是因为浏览器存在对不同源页面数据接收的限制。这种限制就是浏览器的同源策略

同源策略是浏览器的安全机制,跨域的原理就是通过各种方式避开浏览器的安全机制

使用

在项目开发时,对跨域的概念仅限于了解,所以没有注重过程,只注重结果。所以在开发项目时,使用的是市面上比较常用,并且能够一劳永逸的cors。虽然cors方法能够完美解决跨域问题,但是还是要秉持着对知识探索的态度,去深入理解跨域问题。

报错提示

这里我使用8080端口的客户端访问3000端口的服务器,结果报错。

原因是因为端口号不同产生跨域。

如果将服务器端口号改为8080就不会报错了。

Snipaste_2022-04-21_10-59-33.png

跨域方法

跨域的方法有corsProxy正向代理Nginx反向代理Jsonp

现阶段跨域方式有很多种,但是基本思想只有两种:

  • 绕过同源策略

    • Jsonp:历史遗留的产物,虽然思想很好,但是局限性太大(仅支持get、因为数据是在url中,所以携带数据小)。

      原理:
      	有三个标签不受同源策略影响:
      	<script src="xxx"></script>
      	<link herf="xxx"></link>
      	<img src="xxx"></img>
      实现:
          // 1.创建script
          var script = document.createElement('script')
          // 2.定义回调函数
          function getData(data) {
            // 调用函数返回的数据
            console.log(data);
          }
          // 3.设置src属性
          script.src = 'http://localhost:3000?callback=getData'
          // 4.让cript生效
          document.appendChild(script) 
      
    • Nginx:通过反向代理绕过去,这是很完美的解决方案,加上会给服务器增加一点压力,不过这点压力问题并不大

      如何理解反向代理:代理服务器代替目标服务器去接收并响应给客户端发起的请求。隐藏服务器

      ​ 发起请求:客户端向代理服务器发出请求,代理服务器再将请求转发给目标服务器

      ​ 响应数据:目标服务器向代理服务器响应数据,代理服务器再向数据响应给客户端

      很常用的方法,像网易、头条都使用nginx代理

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ddoEgRFd-1656482203293)(https://juejin.cn/)][外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4M4avsX0-1656482203293)(https://juejin.cn/)]

      这是我在chrome上看的某些文件。

      nginx使用:

      • 下载nginx

        直接到官网下载

        [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gaMNC5wi-1656482203294)(https://juejin.cn/)]

      • 修改默认配置

        • 打开conf/nginx.conf

        • 配置代理端口

Snipaste_2022-04-21_11-48-14.png – 配置监听端口

Snipaste_2022-04-21_11-49-07.png

 > 输入 start nginx.exe 没有反应表示启动成功 
  • Proxy:通过正向代理绕过去,让服务器帮我们向服务器发送请求,因为跨域均存在于浏览器与服务器之间。只能在本地开发环境使用。

    如何理解正向代理:代理服务器代替客户端向服务器发起请求。隐藏客户端

    ​ 发起请求:代理服务器从客户端发出请求,向目标服务器发起请求。

    ​ 响应数据:目标服务器响应请求,代理服务器接收请求,并转发给客户端。

    日常使用的翻墙就是基于这个原理。

    一句话概述正向代理和方向代理:正向代理客户端,反向代理服务器。

    • main.js

      axios.defaults.baseURL = '/' 
      
    • vue.config.js

      module.exports = {
        devServer: {
          proxy: {
            '/': {
              target: 'http://localhost:3000', // 目标服务器
              changeOrigin: true
            }
          }
        }
      } 
      

      这里我使用的是webpack proxy,是webpack提供的代理服务,方便易用,但是只适用于开发阶段

      原理:在代理服务器传递数据给本地浏览器的过程中,两者同源,并不存在跨域行为,这时候浏览器就能正常接收数据

    • 此时,只要浏览器访问根路径,代理服务器就会向目标服务器发起请求。

    补充:CDN(内容分发网络)

    简单来说就是,用户发起请求,请求会发送到最适合的服务器上。比如说,我在广州发送请求,请求就会发送到广州的服务器上。优点类似京东快递,发货的时候会优先选择就近的京东仓库,所以物流速度很快,同样的CDN也是加快网络请求速度。

  • cors

    • 终级解决方案(IE9 以下除外)

    • 跨域资源共享 (Cross-Origin Resource Sharing, CORS),就是在服务器端的响应中加入额外的HTTP头,使浏览器能跨域访问资源。

      响应头需要设置的字段:Access-Control-Allow-Origin: * 
      
    • 我做项目时,使用方法是添加 cors 中间件

      // 引入cors
      const cors = require('cors')
      // 使用 cors()
      app.use(cors()) 
      

说明

跨域请求产生时,服务器是能够接收到数据的,并且也响应了数据,只不过在浏览器接收数据的时候,由于不同源的原因,出发了浏览器的安全机制,所以数据就被挡在浏览器外。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/187325.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 微信开放平台开发第三方授权登陆(一):开发前期准备

    微信开放平台开发第三方授权登陆(一):开发前期准备据微信开放平台“开发资源”中网站应用微信登陆功能开发指南描述:进行授权登陆接入前,需要先注册一个开发者账号,并拥有一个已经审核通过的网站应用,并获取AppID和APPSecret,然后申请微信登陆并通过审核后,可以接入流程进行开发。据开发者资质认证处介绍:开发者资质认证通过后,微信开放平台帐号下的应用,将获得微信登录、智能接口、第三方平台开发等高级能力。所以在微信第三方授权登陆获取用户信息…

    2022年5月11日
    58
  • 设计测试用例的方法

    设计测试用例的方法如果测试的时间有限,如何保证在有限的时间内让产品上线?(1)有限的时间内测试,保证用户经常使用(使用频率比较高,主要的,核心的功能)功能的质量(2)如果有限的时间所有的功能不能完全测完,可以和产品经理开发商量,把没有通过测试的,有风险的功能把用户的入口,屏蔽掉(让用户无法使用),产生错误风险就会降低(3)本次测试,测试报告写清楚,这次上线,哪些功能测试了,哪些功能没有测试,上线风险分析清楚。百度云盘的测试用例太多了,如何去写?(1)用户经常使用的功能有哪些?文件的存储(长传,接受)下载分享

    2022年6月20日
    25
  • Xiaojie雷达之路—车载雷达信号处理流程

    Xiaojie雷达之路—车载雷达信号处理流程Hello,大家好,我是Xiaojie,欢迎大家能够和Xiaojie来一起学习毫米波雷达知识,本片文章主要是介绍车载雷达信号处理流程,从车载雷达的用途、雷达波形、调频连续波原理、测距、测速、恒虚警检测、测角、聚类、跟踪

    2022年10月8日
    4
  • 电脑蓝屏怎么解决0x0000007b,解决电脑蓝屏问题[通俗易懂]

    电脑蓝屏怎么解决0x0000007b,解决电脑蓝屏问题[通俗易懂]电脑蓝屏代码为0x0000007b到底什么意思呢?0x0000007b算是电脑蓝屏常见故障之一,导致这样情况的原因是什么呢,又要怎么解决,下面看看电脑蓝屏怎么解决0x0000007b.电脑蓝屏代码0x0000007b方法一:更改硬盘模式1,首先我们重启电脑操作,在电脑出现第一界面时快速的按下del键,进入bios界面当中,接着通过键盘上的左右键切换到在“Advanced”选项,进入到下一步。2,在页面中我们找到SATAModeSelection(硬盘模式选择)选项并打开,这时将硬盘模

    2025年8月30日
    7
  • c++输入输出流

    输入输出流类关系图iostream头文件中4种流对象1.cout流在内存中对应开辟了一个缓存区,用来存放流中的数据,当向cout流插入一个endl时,不论缓冲区是否已满,都立即输出流中的所有数据

    2021年12月19日
    63
  • Navicat 连接MySQL数据库出现错误:2059

    Navicat 连接MySQL数据库出现错误:2059Navicat连接MySQL数据库出现错误:2059-authenticationplugin’caching_sha2_password’的解决方法

    2022年8月31日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号