首页 > 其他分享 >解决跨域问题

解决跨域问题

时间:2024-03-25 19:59:01浏览次数:26  
标签:http 跨域 8601 192.168 问题 解决 浏览器 localhost

解决跨域问题

在浏览器通过http://localhost:8601/地址访问前端工程。

chrome浏览器报错如下:

Java Access to XMLHttpRequest at 'http://localhost:63110/system/dictionary/all' from origin 'http://localhost:8601' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

firefox浏览器报错如下:

Bash 已拦截跨源请求:同源策略禁止读取位于 http://localhost:63110/system/dictionary/all 的远程资源。(原因:CORS 头缺少 'Access-Control-Allow-Origin')。状态码:200。

提示:从http://localhost:8601访问http://localhost:63110/system/dictionary/all被CORS policy阻止,因为没有Access-Control-Allow-Origin 头信息。CORS全称是 cross origin resource share 表示跨域资源共享。

出这个提示的原因是基于浏览器的同源策略,去判断是否跨域请求,同源策略是浏览器的一种安全机制,从一个地址请求另一个地址,如果协议、主机、端口三者全部一致则不属于跨域,否则有一个不一致就是跨域请求。

比如:

从http://localhost:8601 到 http://localhost:8602 由于端口不同,是跨域。

从http://192.168.101.10:8601 到 http://192.168.101.11:8601 由于主机不同,是跨域。

从http://192.168.101.10:8601 到 https://192.168.101.10:8601 由于协议不同,是跨域。

注意:服务器之间不存在跨域请求。

浏览器判断是跨域请求会在请求头上添加origin,表示这个请求来源哪里。

比如:

Plaintext GET / HTTP/1.1 Origin: http://localhost:8601

服务器收到请求判断这个Origin是否允许跨域,如果允许则在响应头中说明允许该来源的跨域请求,如下:

Plaintext Access-Control-Allow-Origin:http://localhost:8601

如果允许任何域名来源的跨域请求,则响应如下:

Plaintext Access-Control-Allow-Origin:*

解决跨域的方法:

1、JSONP

通过script标签的src属性进行跨域请求,如果服务端要响应内容则首先读取请求参数callback的值,callback是一个回调函数的名称,服务端读取callback的值后将响应内容通过调用callback函数的方式告诉请求方。如下图:

![img](file:///C:\Users\12547\AppData\Local\Temp\ksohtml4488\wps1.jpg)

2、添加响应头

服务端在响应头添加 Access-Control-Allow-Origin:*

3、通过nginx代理跨域

由于服务端之间没有跨域,浏览器通过nginx去访问跨域地址。

![img](file:///C:\Users\12547\AppData\Local\Temp\ksohtml4488\wps2.jpg)

1)浏览器先访问http://192.168.101.10:8601 nginx提供的地址,进入页面

2)此页面要跨域访问http://192.168.101.11:8601 ,不能直接跨域访问http://www.baidu.com:8601 ,而是访问nginx的一个同源地址,比如:http://192.168.101.11:8601/api ,通过http://192.168.101.11:8601/api 的代理去访问http://www.baidu.com:8601。

这样就实现了跨域访问。

浏览器到http://192.168.101.11:8601/api 没有跨域

nginx到http://www.baidu.com:8601通过服务端通信,没有跨域。

我们准备使用方案2解决跨域问题。在内容管理的api工程config包下编写GlobalCorsConfig.java,

或直接从课程资料/项目工程下拷贝,

代码如下:

Java
package com.xuecheng.system.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;

/**
 * @description 跨域过虑器
 * @author Mr.M
 * @date 2022/9/7 11:04
 * @version 1.0
 */
 @Configuration
 public class GlobalCorsConfig {

  /**
   * 允许跨域调用的过滤器
   */
  @Bean
  public CorsFilter corsFilter() {
   CorsConfiguration config = new CorsConfiguration();
   //允许白名单域名进行跨域调用
   config.addAllowedOrigin("*");
   //允许跨越发送cookie
   config.setAllowCredentials(true);
   //放行全部原始头信息
   config.addAllowedHeader("*");
   //允许所有请求方法跨域调用
   config.addAllowedMethod("*");
   UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
   source.registerCorsConfiguration("/**", config);
   return new CorsFilter(source);
  }
 }

此配置类实现了跨域过虑器,在响应头添加Access-Control-Allow-Origin。

重启系统管理服务,前端工程可以正常进入http://localhost:8601,观察浏览器记录,成功解决跨域。

![img](file:///C:\Users\12547\AppData\Local\Temp\ksohtml4488\wps3.jpg)

标签:http,跨域,8601,192.168,问题,解决,浏览器,localhost
From: https://www.cnblogs.com/lhwdbk/p/18095154

相关文章

  • 终端突然关闭导致程序异常结束的解决方案
    终端关闭后,系统会发送一个SIGHUP(挂断信号),自动地终止在当前会话中运行的程序。这时可以使用screen命令使用在关闭终端后继续运行程序,方便在重新开启终端后回到程序执行界面: 输入screen,回车进入子界面 输入命令,运行程序 按ctrl+a再按d,程序会在关闭终端后继续运行......
  • 【Linux】详细分析/dev/loop的基本知识 | 空间满了的解决方法
    目录前言1.基本知识2.内存满了2.1清空2.2扩增3.彩蛋前言服务器一直down机,翻找日志文件一直找不到缘由,最终发现是挂载的内存满了,那本身这个文件就什么用呢?1.基本知识/dev/loop是一种特殊的设备文件,用于将文件系统映射到一个文件上,形成一个虚拟的块设备。通常......
  • 【08每天十分钟,javase基础全搞定-秒懂参数传递问题上】
    参数传递问题基本类型按值传递引用类型按照内存地址进行传递。基本类型按值传递publicclassStudent{publicstaticvoidmain(String[]args){inta=10;tese(a);//相当于把10作为参数给了tese这个方法。System.out.println(a);//输......
  • 安防监控视频汇聚平台EasyCVR在银河麒麟V10系统中的启动异常及解决方法
    安防监控视频平台EasyCVR具备较强的兼容性,它可以支持国标GB28181、RTSP/Onvif、RTMP,以及厂家的私有协议与SDK,如:海康ehome、海康sdk、大华sdk、宇视sdk、华为sdk、萤石云sdk、乐橙sdk等。平台兼容性强,支持Windows系统、Linux系统以及国产化操作系统等。有用户反馈,在银河麒麟V10系......
  • 偶现问题的解决
    最近在版本更新的时候出现过两次偶现问题,这里记录以下分析过程第一个是有个离线时间,在上个版本没有出现的问题在这个版本出现了。是多个agent同时离线的时间相同。一般每个agent只改自己的时间,为什么会去改别的agent的时间呢?我翻遍全部写离线时间设置的位置,只有一处是同时改动......
  • react 中echarts-for-react使用resize解决图表自适应问题
     importReact,{PureComponent}from"react";importReactEchartsfrom'echarts-for-react';import{useEventListener}from'ahooks';useEventListener('resize',()=>{ref?.current?.getEch......
  • 使用dpkg在ubuntu上安装软件包遇到依赖包的问题
    问题在ubuntu上使用apt-get安装软件包,系统会自动安装依赖的软件包,但是使用dpkg在ubuntu上安装软件包时不会,有时会遇到下面的错误:pengdl@pengdl-HP:~/Soft$sudodpkg-ivirtualbox-7.0_7.0.14-161095~Ubuntu~focal_amd64.deb[sudo]passwordforpengdl:Selectingpreviously......
  • 文献学习-22-Surgical-VQLA:具有门控视觉语言嵌入的转换器,用于机器人手术中的视觉问题
    Authors:LongBai1†,MobarakolIslam2†,LalithkumarSeenivasan3andHongliangRen1,3,4∗,SeniorMember,IEEESource: 2023IEEEInternationalConferenceonRoboticsandAutomation(ICRA2023)May29-June2,2023.London,UKAbstract:尽管有计算机......
  • 如何解决各个行业出现的数据泄露问题?
    针对这些行业的数据泄露问题,解决策略大致与之前提到金融行业的解决策略相似,主要包括以下几个方面:文件加密:无论是哪个行业,数据往往是以文件的形式存在。因此,使用华企盾DSC数据防泄密系统提供的文件加密服务可以在最基本的层面上确保数据的安全。权限管理:对数据的访问和使用权限......
  • 什么问题会导致404?如何解决404?
    导致404错误的原因可能有多种,包括但不限于:URL错误:请求的URL地址拼写错误,或者页面已被移除或重命名。文件丢失或移动:服务器上的文件被删除或移动到其他地方,而URL仍然指向原位置。服务器配置问题:服务器配置错误,导致无法正确解析或路由请求。路由错误:在开发Web应用程序时,......