跨域问题确认及处理

       背景如下

       近期在做的项目中,有个奇怪的需求,需要在JSP项目中嵌套一个VUE项目,原因是:JSP项目是在运且不大方便重构的一个项目,新需求又想为了未来着想做一套单独的项目,无奈只能嵌套。

        当项目开发差不多,需要部署时候,就忽然遇到了今天要聊的跨域问题。

        项目部署时候,JSP项目和VUE项目分别分配了一个端口,当JSP项目跳转到VUE时候,登录失败了(为何是登录失败,等我换一篇细聊权限验证相关内容时候说说)。

        关于此时的失败,一直没有头绪,看到返回值是200,但是F12看网络请求就是红色的一条。直到看到请求status竟然是CORS error(出问题一定要仔细看每一处提示),才定位大概方向是跨域问题。

        知道范围是跨域问题导致的,但是问题来了:

  1. 什么是跨域?
  2. 跨域是怎么产生的?
  3. 一般都是如何解决的?
  4. 记得项目中经常配置跨域相关内容,但是应该配置在哪,给谁配置?

        一个个聊。。。

首先什么是跨域?

        当浏览器向服务器发起请求时,以下三个要素中任意一个不匹配,则会被视为跨域请求

  1. 协议不同(如:http和https)

  2. 域名不同(如:test.com和api.test.com)

  3. 端口不同(如:8080和3000)

        对上面三个要素的判断是由浏览器做的,目的是为了安全,防止出现网页中嵌套其他网站,被其他网站随意调用后出现安全问题。

跨域是怎么产生的?

        我的理解:就是在一个网站里,一般只允许同一个协议、IP(域名)、端口的请求,比如:

http://192.168.0.1:8080/index
http://192.168.0.1:8080/getList
http://192.168.0.1:8080/test/info/test0001

        这些请求都没问题,但是如果冒出来一个

http://192.168.0.1:8081/info/add

        这时候浏览器就会认为有点问题,不能执行!感觉有点类似人体的排他反应一样。。。

跨域怎么解决呢?

        1.常见处理方法之一:接受请求的项目,配置相关CORS的参数,允许某些协议、域名、端口的请求

        2.常见处理方法之二:代理服务器,使用Nginx区分,不同项目,公共同一个端口,请求路径中特殊前缀来区分不同服务

        3.(我没用过的)处理方式三:JSONP(限GET请求)

                利用<script>标签不受同源策略限制的特性,后端返回一个函数包裹的数据

        4.(我还没用过,用过websocket但是没因为处理跨域用)处理方式四:用websocket

应该配置在哪,给谁配置?

        如果我们自己信任两个网站,都知道是做什么的,甚至就是自己的不同项目,如上面的例子,8080调用8081,那我们就得配置到8081上。

        配置到接受的一方。


        前面一顿回顾复习,到我们遇到的问题这里呢?

        在F12中,除了network显示的CORS Error,还有console中报错如下:

Access to XMLHttpRequest at 'http://192.168.10.10:3000/api/auth/login?tm=123123123123&username=test&password=1111' from origin 'http://192.168.10.10:8080' has been blocked by CORS policy: The 'Access-Control-Allow-Origin' header contains multiple values 'http://192.168.10.10:8080, *', but only one is allowed.

        描述一下问题:从8080端口来的请求已被CORS策略终止了,请求头参数'Access-Control-Allow-Origin'中配置了多个值,但是只能有一个。

        问题更具体了,我们这个服务相关关系是:

  1. 所有请求经过Nginx
  2. 到微服务的网关
  3. 到各项目

        看了看配置,两处都配置了跨域相关内容。。。

Nginx:

http {include mime.types;default_type application/octet-stream;add_header 'Access-Control-Allow-Origin' '*';add_header Access-Control-Allow-Headers X-Requested-With;add_header Access-Control-Allow-Methods GET,POST,OPTIONS;...
}

gateway:

spring:cloud:gateway:globalcors:corsConfigurations:'[/**]':allowedOriginPatterns: "*"allowed-methods: "*"allowed-headers: "*"allow-credentials: trueexposedHeaders: "Content-Disposition,Content-Type,Cache-Control"

        最终定位问题是:配置重复了

        不过,最终的处理方式是使用代理服务器,两个项目规划到同一个端口下,一个用根目录(/),另一个用一个特殊前缀(/ABC)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/36845.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Qwen2.5-VL 开源视觉大模型,模型体验、下载、推理、微调、部署实战

一、Qwen2.5-VL 简介 Qwen2.5-VL&#xff0c;Qwen 模型家族的旗舰视觉语言模型&#xff0c;比 Qwen2-VL 实现了巨大的飞跃。 欢迎访问 Qwen Chat &#xff08;Qwen Chat&#xff09;并选择 Qwen2.5-VL-72B-Instruct 进行体验。 1. 主要增强功能 1&#xff09;直观地理解事物&…

实时监控、数据分析!Web-Check构建你的网站健康检测系统实操方案

文章目录 前言1.关于Web-Check2.功能特点3.安装Docker4.创建并启动Web-Check容器5.本地访问测试6.公网远程访问本地Web-Check7.内网穿透工具安装8.创建远程连接公网地址9.使用固定公网地址远程访问 前言 在数字化运维领域&#xff0c;网站稳定性保障始终是开发者和运维团队的核…

为什么在外置容器时要保证打包方式是war包?

目录 1. 符合Java EE标准 2. 打包结构清晰 3. 便于部署 4. 支持热部署 5. 与Spring Boot的对比 示例&#xff1a;将Spring Boot应用打包为WAR文件 在传统的Java Web应用开发中&#xff0c;当使用外置容器&#xff08;如Tomcat、Jetty等&#xff09;部署应用时&#xff0c…

【大语言模型_8】vllm启动的模型通过fastapi封装增加api-key验证

背景&#xff1a; vllm推理框架启动模型不具备api-key验证。需借助fastapi可以实现该功能 代码实现&#xff1a; rom fastapi import FastAPI, Header, HTTPException, Request,Response import httpx import logging# 创建 FastAPI 应用 app FastAPI() logging.basicConfig(…

【Linux】快速上手Makeflie CMake

&#x1f984;个人主页:修修修也 &#x1f38f;所属专栏:Linux ⚙️操作环境:Xshell (操作系统:Ubuntu 22.04 server 64bit) 目录 快速上手Makefile 基本结构 变量 自动变量 常用目标 快速上手CMake CMake与Makefile的关系 CMake的使用步骤 常用命令 (1) 基本配置 (2) 变量与选…

智能蔬菜收获移动平台设计(大纲)

智能蔬菜收获移动平台设计 基于视觉识别与机械臂协同的自动化采摘系统 第一章 绪论 1.1 研究背景与意义 农业自动化需求&#xff1a; 人力成本高、采摘效率低&#xff08;尤其在温室、大棚等复杂环境&#xff09;传统机械采摘易造成蔬菜损伤&#xff0c;缺乏柔性化能力 技…

Java 实现排序算法 TopK 问题

1. 低级排序 &#xff08;1&#xff09;冒泡排序&#xff08;Bubble Sort&#xff09; 思路&#xff1a; 每次从左到右冒泡&#xff0c;把最大的数推到最后。 public class BubbleSort {public static void bubbleSort(int[] arr) {int n arr.length;for (int i 0; i <…

函数的介绍

1.函数的概念 在C语言中也有函数的概念&#xff0c;有些翻译为&#xff1a;子程序&#xff0c;这种翻译更为准确。C语言的函数就是一个完成某项特定的任务的一小段代码。这段代码是有特殊的写法和调用方法的。 C语言的程序其实是有无数个小的函数组合而成的&#xff0c;也可以…

MES汽车零部件制造生产监控看板大屏

废话不多说&#xff0c;直接上效果 预览效果请在大的显示器查看&#xff0c;笔记本可能有点变形 MES汽车零部件制造生产监控看板大屏 纯html写的项目结构如下 主要代码分享 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UT…

JS—原型与原型链:2分钟掌握原型链

个人博客&#xff1a;haichenyi.com。感谢关注 一. 目录 一–目录二–原型三–原型链 二. 原型 什么是原型&#xff1f; 每个JavaScript对象都有一个原型&#xff0c;这个原型也是一个对象。比方说 function Person(name) {this.name name; } let person new Person(&quo…

TCP 协议

文章目录 TCP 协议简介数据包格式TCP的特性连接机制确认与重传缓冲机制全双工通信流量控制差错控制拥塞控制 端口号三次握手数据传输四次挥手抓包参考 本文为笔者学习以太网对网上资料归纳整理所做的笔记&#xff0c;文末均附有参考链接&#xff0c;如侵权&#xff0c;请联系删…

二分查找的应用

什么时候用二分查找&#xff1f; 数据具有二段性的时候 第一题&#xff1a; 题解代码&#xff1a; class Solution { public:int search(vector<int>& nums, int target) {int left 0,right nums.size()-1;while(left<right){int mid left (right-left)/2;//中…

cmake 之 CMakeLists.txt 中的函数是从哪里来的

我们都知道&#xff0c;cmake会解释执行 CMakeLists.txt 以及其他 *.cmake 脚本&#xff0c; 这里先给出一个“先验” 的知识点&#xff1a; 任何一个独立脚本或脚本函数命令的执行&#xff0c;都是通过 CPP 函数 RunListFile(...) 调用的 void cmMakefile::RunListFile(cmL…

QT 实现信号源实时采集功能支持频谱图,瀑布图显示

利用QT实现信号源实时采集功能&#xff0c;先看效果 支持双光标显示 &#xff0c;功率测量&#xff0c;带宽测量&#xff0c;载噪比测量&#xff0c;波形框选&#xff0c;水平移动等功能&#xff0c;下载链接 https://download.csdn.net/download/ZuoYueXian/90501632 实现方…

【Kafka】深入了解Kafka

集群的成员关系 Kafka使用Zookeeper维护集群的成员信息。 每一个broker都有一个唯一的标识&#xff0c;这个标识可以在配置文件中指定&#xff0c;也可以自动生成。当broker在启动时通过创建Zookeeper的临时节点把自己的ID注册到Zookeeper中。broker、控制器和其他一些动态系…

神聖的綫性代數速成例題10. N維矢量綫性運算、矢量由矢量組綫性表示、N個N維矢量相關性質

N 維矢量綫性運算&#xff1a; 設&#xff0c;是維矢量&#xff0c;是數。加法&#xff1a;。數乘&#xff1a;。 矢量由矢量組綫性表示&#xff1a; 設是n維矢量&#xff0c;若存在一組數&#xff0c;使得&#xff0c;則稱矢量可由矢量組綫性表示。 N 個 N 維矢量相關性質&…

在CentOS 7.6中安装openGauss 5.1.0 (Preview)数据库并使用Navicat进行远程连接的过程记录

部署环境 华为云Flexus应用服务器 操作系统&#xff1a;CentOS 7.6 openGauss版本&#xff1a;openGauss 5.1.0 (Preview) 参考文档 官方安装文档&#xff1a; https://docs.opengauss.org/zh/docs/5.1.0/docs/InstallationGuide/%E4%BA%86%E8%A7%A3%E5%AE%89%E8%A3%85%E6%B…

SysOM 可观测体系建设(一):万字长文解读低开销、高精度性能剖析工具livetrace

可观测性是一种通过分析系统输出结果并推断和衡量系统内部状态的能力。谈及可观测性一般包含几大功能&#xff1a;监控指标、链路追踪、告警日志&#xff0c;及 Continues Profiling 持续剖析能力。对于操作系统可观测&#xff0c;监控指标可以帮助查看各个子系统&#xff08;I…

Shell脚本学习笔记:从入门到变量(一)

前言 最近在看 Shell 脚本相关的内容&#xff0c;以下是我从入门到变量部分的整理笔记&#xff0c;内容有点多&#xff0c;但都是干货。 先从基础开始&#xff0c;再逐步深入。 一、Shell 脚本入门 1. Linux 如何控制硬件&#xff1f; Linux 靠内核操作硬件&#xff08;CP…

Linux应用:进程间通信

linux的进程间通信概述 进程间通信&#xff08;IPC&#xff0c;Inter - Process Communication&#xff09;是指在不同进程之间进行数据交换和同步的机制。由于每个进程都有自己独立的地址空间&#xff0c;直接共享内存存在困难&#xff0c;因此需要专门的 IPC 机制来实现进程…