首页 > 其他分享 >关于跨域与其解决方案

关于跨域与其解决方案

时间:2024-07-23 20:18:21浏览次数:11  
标签:请求 解决方案 Access header add proxy 与其 跨域

什么是跨域?

跨域(Cross-Origin Resource Sharing, CORS)指的是浏览器的同源策略(Same-Origin Policy)限制从一个源(域名、协议和端口)加载的文档或脚本如何与来自另一个源的资源进行交互。

即,如果你是直接在浏览器中发起请求,那么不允许你从不同的源(域名、协议、端口)加载资源。

页面源和请求的目标源之中,两者的域名,协议,端口有一个不同,那么这些网页就不是同源的。

如何解决跨域问题?

使用Vite内置的开发服务器代理

仅仅适用于开发环境

在开发环境中使用代理服务器可以有效地解决跨域问题。

例如,Vue项目的vite.config.js文件中:

// vite.config.js
import { defineConfig } from 'vite';

export default defineConfig({
  server: {
    port: 1024,
    proxy: {
      '/api': {
        target: 'http://localhost:8080',
        changeOrigin: true,
        rewrite: (path) => path.replace(/^\/api/, '/api')
      }
    }
  }
});

通过在开发服务器上配置代理,你可以避免直接在浏览器中发起跨域请求。代理服务器会处理这些请求并将其转发到目标服务器,这样浏览器只会与同源的开发服务器通信,从而避免了跨域限制。

后端设置允许跨域访问的源域名

在服务器端配置 CORS 头,使得浏览器允许跨域请求。这是最常见和推荐的方法。

Springboot中:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class WebConfig {

    @Bean
    public WebMvcConfigurer corsConfigurer() {
        return new WebMvcConfigurer() {
            @Override
            public void addCorsMappings(CorsRegistry registry) {
                registry.addMapping("/**")
                        .allowedOrigins("http://localhost:8080") // 修改为你的前端地址
                        .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
                        .allowedHeaders("*")
                        .allowCredentials(true);
            }
        };
    }
}

Nginx反向代理解决跨域

示意图:

image-20240719122815686

nginx反向代理的流程:

  1. 客户端请求

    • 客户端(如浏览器)发起请求,假设目标是 http://yourdomain.com
  2. Nginx 接收请求

    • Nginx 服务器接收该请求,并根据配置文件中的规则决定如何处理该请求。
  3. 请求转发

    • 根据配置,Nginx 将请求转发到适当的服务。例如:
      • / 路径的请求转发到 Vue 应用(如运行在 localhost:1024)。
      • /api/ 路径的请求转发到后端 API 服务(如运行在 localhost:8080)。
  4. 响应返回

    • 后端服务处理请求并返回响应给 Nginx。

    • Nginx 再将响应返回给客户端。

server {
    listen 80;
    server_name yourdomain.com;

    location / {
        root http://localhost:5137;; # 代理到 Vue 应用
        try_files $uri $uri/ /index.html;
    }

    location /api/ {
        proxy_pass http://localhost:8080;  # 代理到后端应用
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        add_header 'Access-Control-Allow-Origin' '*';
        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, PUT, DELETE';
        add_header 'Access-Control-Allow-Headers' 'Origin, X-Requested-With, Content-Type, Accept, Authorization';

        if ($request_method = OPTIONS) {
            add_header 'Access-Control-Allow-Origin' '*';
            add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, PUT, DELETE';
            add_header 'Access-Control-Allow-Headers' 'Origin, X-Requested-With, Content-Type, Accept, Authorization';
            return 204;
        }
    }
}

标签:请求,解决方案,Access,header,add,proxy,与其,跨域
From: https://www.cnblogs.com/lingoblog/p/18319541

相关文章

  • VMware Tanzu Kubernetes Grid Integrated Edition (TKGI) 1.19.1 - 运营商 Kubernete
    VMwareTanzuKubernetesGridIntegratedEdition(TKGI)1.19.1-运营商Kubernetes解决方案Kubernetes-basedcontainersolutionwithadvancednetworking,aprivatecontainerregistry,andlifecyclemanagement请访问原文链接:https://sysin.org/blog/vmware-tkgi/,......
  • VMware Tanzu Kubernetes Grid (TKG) 2.5.1 - 企业级 Kubernetes 解决方案
    VMwareTanzuKubernetesGrid(TKG)2.5.1-企业级Kubernetes解决方案VMware构建、签名和支持的开源Kubernetes容器编排平台的完整分发版请访问原文链接:https://sysin.org/blog/vmware-tkg-2/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgTanzuKubernetes......
  • thinkPhp跨域topthink/think-cors
    composerrequiretopthink/think-corsThinkPHP跨域扩展安装composerrequiretopthink/think-cors配置配置文件位于 config/cors.php['paths'=>['api/*'],...]paths配置示例允许api目录下的跨域请求,* 代表通配符。['paths'=>[&......
  • Kbdgkl.dll的功能与其损坏后的修复步骤
    kbdgkl.dll是一个动态链接库(DynamicLinkLibrary)文件,通常与Windows操作系统中的键盘布局和输入法支持相关。这个DLL文件负责处理特定语言的键盘输入,例如,kbdgkl.dll可能与希腊语键盘布局相关联,用于在Windows系统中正确解析和显示希腊字母。当kbdgkl.dll文件损坏或缺失时,解决k......
  • 在构建Docker时执行yum -y install gcc报错解决方案
    1、在构建docker时,执行yum-yinstallgcc报一下错误 2、解决方案:更换镜像执行以下指令:mv/etc/yum.repos.d/CentOS-Base.repo/etc/yum.repos.d/CentOS-Base.repo.backup  wget-O/etc/yum.repos.d/CentOS-Base.repohttp://mirrors.aliyun.com/repo/Centos-7.rep......
  • 探索ESP32-A2DP:一个强大的蓝牙音频解决方案
    探索ESP32-A2DP:一个强大的蓝牙音频解决方案项目简介是一个基于EspressifSystemsESP32微控制器的开源项目,它实现了Bluetooth低能耗(BLE)和高级音频分布配置文件(A2DP)。这个项目允许你的ESP32设备作为高质量的蓝牙音频播放器,可以接收来自任何支持A2DP源的设备(如智能手机、电脑)的音频......
  • MySQL事务管理详解:特性、问题与解决方案
    什么是事务?事务是一个不可分割的数据库操作序列,也是数据库并发控制的基本单位,其执行的结果必须使数据库从一种一致性状态变到另一种一致性状态。事务是逻辑上的一组操作,要么都执行,要么都不执行。事务的四大特性原子性(Atomicity)原子性意味着事务中对数据库的一系列操作要......
  • 安装量终于破千了!聊聊浏览器扩展开发的相关问题与解决方案
    浏览器扩展开发的相关问题与解决方案我开发的浏览器扩展安装量终于过千了!在FirefoxAddOns已经有2.1k+安装,在ChromeWebStore已经有2k+安装。实际上在Firefox的扩展市场里是周平均安装量,当天的实际安装量要高出平均值不少,而Chrome的扩展市场在超过1k安装量之后就不精确显示安......
  • 工业互联网平台应用实训室解决方案
    引言随着工业4.0时代的到来和信息技术的高速发展,工业互联网已成为推动产业升级的重要力量。唯众作为领先的工业互联网解决方案提供商,推出了《工业互联网平台应用实训室解决方案》,旨在通过构建高度仿真的实训环境,帮助学生全面掌握工业互联网技术,为未来的职业生涯奠定坚实基......
  • 2024年技校大数据实验室建设及大数据实训平台整体解决方案
    随着信息技术的迅猛发展,大数据已成为推动产业升级和社会进步的重要力量。为适应市场需求,培养高素质的大数据技术人才,技校作为职业教育的重要阵地,亟需加强大数据实验室的建设与实训平台的打造。本方案旨在提出一套全面、可行的2024年技校大数据实验室建设及大数据实训平台整......