美文网首页
三分钟,解决前端跨域

三分钟,解决前端跨域

作者: 麦西的西 | 来源:发表于2023-07-05 17:51 被阅读0次

为什么会跨域

一般情况下,当浏览器向不同 源(协议、IP、端口)的资源发出请求时,会报错误如下:

这就是 跨域 问题。

跨域是因为浏览器的同源策略所导致的。

什么是同源策略

浏览器出于安全的考虑做了同源策略的限制。源指的是协议、IP、端口。 协议、IP、端口 必须全都相同才是同源。

解决方案

1. JSONP

只支持 Get 请求,并且只能接收 json 格式的数据,还容易收到 XSS 攻击。不推荐。

<script>
    function handleResponse(res) {
      console.log(res);
    }

    var script = document.createElement('script');
    script.src = 'https://10.2.2.25/api?callback=handleResponse';
    document.head.appendChild(script);
</script>

其实就是动态创建一个 script 标签,并在标签里加入 callback 参数, 然后在回调函数里处理后端返回的数据。

2. CORS

官方推荐,后端处理,推荐。

CORS(Cross-Origin Resource Sharing)是一种官方推荐的跨域解决方案。它通过在服务器端设置响应头来允许跨域访问。具体而言,服务器在响应中添加 Access-Control-Allow-Origin 头,并设置允许访问的源地址。浏览器在收到这个响应头后,就会允许跨域访问并将响应数据返回给前端页面。CORS 支持各种类型的 HTTP 请求,包括 GET、POST 等,并且具有较好的安全性。

3. proxy

既然跨域是浏览器导致的,那我们绕开浏览器就行了。使用代理也是常用的解决跨域的方案。

请求的资源跨域,我们可以请求自己同源的服务(代理),然后通过代理去请求跨域的资源。常用的解决方案一般是两种:

本地代理

开发环境,前端处理,推荐。

无论是 webpack 还是 vite 都内置了本地代理。这让我们能够在不依赖后端的前提下解决跨域的问题(仅仅是本地开发环境下, 线上环境需要 nginx 配置反向代理)

webpack 的处理方式如下(官方文档看这里):

module.exports = {
  //...
  devServer: {
    proxy: {
      '/api': 'http://localhost:3000'
    }
  }
};

vite 的处理方式(官方文档看这里):

export default defineConfig({
  // ...
  server: {
    proxy: {
      '/api': {
        target: 'http://jsonplaceholder.typicode.com',
        changeOrigin: true,
        rewrite: (path) => path.replace(/^\/api/, '')
      }
    }
  }
});

nginx 反向代理

生产环境,运维处理,推荐。

生产环境一般用 nginx 托管部署我们的前端代码包。处理跨域问题需要 nginx 配置反向代理。

server {
    listen: 8001;
    server_name 10.2.2.25;

    location ~ /api/ {
        proxy_pass http://127.0.0.1:8081;
    }
}

参考文档

Web 安全开篇:浏览器为什么会有同源策略?

相关文章

  • 跨域解决方案(史上最易懂)

    跨域总结 1.跨域思路 跨域解决方案一般分为两种:前端解决,后端解决 1.1 前端解决方案 通过前端解决的思想就是...

  • 浏览器跨域的那些事

    整理中 目标: 了解跨域 解决跨域 服务器配置跨域(java, nginx) 前端调试时配置解决跨域 一、什么是跨...

  • 跨域访问

    参考文献:jsonp解决跨域问题 . cors解决跨域问题 . (java+前端小白)第一次碰到跨域问题,小伙伴们...

  • Day 100/100 Vue3.0 & Vue-cli4.5

    写在前端的话 除了后端解决跨域问题前端可以解决吗?答案是可以~~~ (一)问题 遇到了跨域问题,本地的URL是 h...

  • koa2解决跨域请求和options请求

    跨域 使用koa-cors解决跨域问题 添加一个中间件 解决options请求 由于做了跨域,所以前端用post请...

  • [mark]九种跨域方式实现原理

    前端如何使用proxyTable和nginx解决跨域问题 前言 前后端数据交互经常会碰到请求跨域,什么是跨域,以及...

  • 新增-后端跨域

    前端程序 后端程序 现在请求无法,到达需要解决跨域问题 每个servlet单独做跨域设置 跨域过滤器

  • Django 后端解决跨域问题

    前端后端分离的项目,经常会遇到跨域请求的问题。解决跨域问题,有从前端的代理解决的方案,和用后端的解决方案。这里介绍...

  • koa设置跨域访问以及跨域验证cookie

    环境 后端框架: koa2 前端请求框架: axios 解决跨域访问 koa加上如下代码: 解决跨域验证cooki...

  • js解决跨域问题

    与后台开发联调接口时经常碰到跨域的问题,有两个解决的办法:让后端开发去掉跨域参数;前端自己解决。 前端解决接口联调...

网友评论

      本文标题:三分钟,解决前端跨域

      本文链接:https://www.haomeiwen.com/subject/domkudtx.html