web开发必备之跨域

1.什么是跨域?

当一个请求url的协议、域名、端口三者之间任意一个与当前页面url不同即为跨域
举个例子或许比较生动

当前所在页面请求的页面是否同域原因
https://www.csdn.net/https://blog.csdn.net/weixin_56703682同源(同域名同协议同端口)
https://www.csdn.net/http://www.csdn.net/×协议不同(http/https)
https://www.csdn.net/https://github.com/×主域名不同
https://www.csdn.net/https://www.blog.csdn.net/×协议不同
http://www.test.com:8848http://www.test.com:8080/×端口不同

2.为什么会出现跨域

跨域问题通常是由于浏览器的同源策略引起的。同源策略要求网页上的脚本只能读取来自同一源(协议、域名、端口)的响应,而不能读取其他源的信息。如果一个网页包含的脚本试图去读取来自不同源的数据,就会触发跨域问题。

这样的设计是为了保护用户的隐私和安全,防止恶意网站窃取用户的信息。然而,它也带来了一些限制,特别是对于现代Web应用来说,跨域访问是很常见的需求,比如从一个域名下请求API接口数据等。

3.怎么解决跨域

为了解决跨域问题,可以采取多种方法,比如使用JSONP、CORS(跨域资源共享)、代理、iframe消息传递等等。

通过使用请求头来解决

通过设置 CORS(跨域资源共享)相关的请求头来实现跨域请求。
java中如何使用springboot来解决呢?
https://spring.io/guides/gs/rest-service-cors

配置的pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.2.0</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.example</groupId><artifactId>rest-service-cors-complete</artifactId><version>0.0.1-SNAPSHOT</version><name>rest-service-cors-complete</name><description>Demo project for Spring Boot</description><properties><java.version>17</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.apache.httpcomponents.client5</groupId><artifactId>httpclient5</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

在 Java 中实现跨域请求通常涉及到一些网络编程和设置响应头的工作。以下是一些基本的方法来实现跨域请求:

  1. 使用 HttpServletResponse 设置响应头:在处理请求的 Java 代码中,可以通过 HttpServletResponse 对象设置一些响应头信息,以允许跨域请求。例如,设置允许的域名、请求方法、头部信息等。
response.setHeader("Access-Control-Allow-Origin", "http://example.com"); // 设置允许跨域的域名
response.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS"); // 设置允许的请求方法
response.setHeader("Access-Control-Allow-Headers", "Content-Type, Authorization"); // 设置允许的请求头部信息
response.setHeader("Access-Control-Max-Age", "3600"); // 设置预检请求的缓存时间
response.setHeader("Access-Control-Allow-Credentials", "true"); // 设置是否允许发送 Cookie
  1. 使用 Filter 进行统一处理:可以编写一个 Filter 来统一处理跨域请求,通过设置响应头来实现跨域访问的授权。
public class CorsFilter implements Filter {@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)throws IOException, ServletException {HttpServletResponse httpResponse = (HttpServletResponse) response;// 设置允许跨域的域名httpResponse.addHeader("Access-Control-Allow-Origin", "http://example.com");// 设置允许的请求方法httpResponse.addHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");// 设置允许的请求头部信息httpResponse.addHeader("Access-Control-Allow-Headers", "Content-Type, Authorization");// 设置预检请求的缓存时间httpResponse.addHeader("Access-Control-Max-Age", "3600");// 设置是否允许发送 CookiehttpResponse.addHeader("Access-Control-Allow-Credentials", "true");chain.doFilter(request, response);}
}

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

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

相关文章

【网站项目】294火车票订票系统

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

EI Scopus双检索| 2024年智能交通与未来出行国际会议(CSTFM 2024)

会议简介 Brief Introduction 2024年智能交通与未来出行国际会议(CSTFM 2024) 会议时间&#xff1a;2024年10月18日-20日 召开地点&#xff1a;中国杭州 大会官网&#xff1a;CSTFM 2024-2024 International Conference on Smart Transportation and Future Mobility(CSTFM 202…

解决修改数据后,前端页面不显示问题

如图&#xff0c;修改数据后&#xff0c;在前端页面不显示的问题&#xff0c;可能是因为缓存问题 解决方案 以为Edge浏览器为例 打开设置左边栏点击隐私&#xff0c;搜索和服务选择清除 Internet Explorer 的浏览数据点击删除&#xff0c;重新启动前端界面即可。

大数据专家3个月自学计划

本人有6年Java开发经验&#xff0c;目前在岗中&#xff0c;之前通过视频教学自学过Hadoop生态技术、flume、kafka、Redis、hive、spark、flink、sqoop、azkaban、ozie、habse、presto、kylin等大数据相关技术&#xff0c;希望利用3个月时间复习&#xff0c;成为大数据专家。以下…

3.18作业

一、网络属性&#xff08;getsockopt、setsockopt&#xff09; 1> 由于在网络通信过程中&#xff0c;套接字是服务于各个层的&#xff0c;但是&#xff0c;每一层中对套接字选项都有一定的权限控制&#xff0c;例如&#xff0c;应用层中对端口号快速重用的限制 2> 如何…

日志收集监控告警平台的选型思考

目前市面上比较常见的日志收集系统有&#xff1a;ELK&#xff0c;Grafana Loki&#xff0c;OpenObserve&#xff0c;SigNoz&#xff0c;Graylog &#xff0c;Syslog-ng&#xff0c;Highlight&#xff0c;接下来我会对这几个一一做分析。 1. ELK ELK 是 Elasticsearch、Logsta…

Linux系统及操作 (10)

Linux系统及操作 (09) [ ping ] [ ping -c ]指定数量 [ ping -c5 192.168.88.2 ] 指定五次交互 DNS服务器 Domain Name System 域名系统 用于实现域名和IP地址相互映射的一个分布式数据库 将域名翻译成可由计算机识别的IP地址,方便用户间的互相访问 计算机无法直接识别**[…

vue2 自定义 v-model (model选项的使用)

效果预览 model 选项的语法 每个组件上只能有一个 v-model。v-model 默认会占用名为 value 的 prop 和名为 input 的事件&#xff0c;即 model 选项的默认值为 model: {prop: "value",event: "input",},通过修改 model 选项&#xff0c;即可自定义v-model …

php 各种魔术函数的触发条件

2024.3.20 1、__construct() __construct() 用于在创建对象时自动触发 当使用 new 关键字实例化一个类时&#xff0c;会自动调用该类的 __construct() 方法 <?php class MyClass {public function __construct() {echo "已触发 __construct 一次";} }$obj new …

js实现旋转矩形,圆形交集并集差集运算并使用canvas展示

region 使用0代表空 1代表有 复制到codepen执行 // 创建三个 Canvas 元素 const intersectionCanvas document.createElement(canvas); const unionCanvas document.createElement(canvas); const differenceCanvas document.createElement(canvas);intersectionCanvas.wid…

Springboot集成Rabbitmq

Springboot集成Rabbitmq实现请求异步处理 一、Docker部署rabbitmq 1. docker pull rabbitmq:3.7.8rabbitmq为需要拉取的镜像名称&#xff0c;3.7.8为版本号 2. docker run -d -p 5672:5672 -p 15672:15672 --name rabbitmq rabbitmq:3.7.8运行拉取到的镜像文件&#xff1b;-d…

本人用编译

板子方 修改ip&#xff08;保证板子和主机在同一个网段&#xff09; mount -t nfs -o rw,nolock,nfsvers3 192.168.1.200:/home/violet/nfs get/ 互通的文件在~目录下get文件内 电脑方 使用arm-linux-gnueabihf-gcc 编译

外部提供控制程序

外部提供控制程序 文件编号&#xff1a;XXX 1、目的和适用范围 规范在研发与生产过程中所涉及到的采购、外包行为方式&#xff0c;对外部提供过程和产品进行控制&#xff0c;评估、选择及控制外部提供方&#xff0c;并对采购活动及外包过程进行有效地控制&#xff0c;确保外部…

性能优化(CPU优化技术)ARM Neon 详解

原文来自ARM neon详解 &#x1f3ac;个人简介&#xff1a;一个全栈工程师的升级之路&#xff01; &#x1f4cb;个人专栏&#xff1a;高性能&#xff08;HPC&#xff09;开发基础教程 &#x1f380;CSDN主页 发狂的小花 &#x1f304;人生秘诀&#xff1a;学习的本质就是极致重…

AI新工具(20240322) 免费试用Gemini Pro 1.5;先进的AI软件工程师Devika;人形机器人Apptronik给你打果汁

✨ 1: Gemini Pro 1.5 免费试用Gemini Pro 1.5 Gemini 1.5 Pro是Gemini系列模型的最新版本&#xff0c;是一种计算高效的多模态混合专家&#xff08;MoE&#xff09;模型。它能够从数百万个上下文Token中提取和推理细粒度信息&#xff0c;包括多个长文档和数小时的视频、音频…

ASP.NET控件

目录 TextBox 控件 Button 控件 HyperLink 控件 CheckBox 控件 RadioButton 控件 ListBox 控件 DropDownList 控件 Repeater 控件 DataList 控件 GridView 控件 RequiredFieldValidator 控件 RangeValidator 控件 CompareValidator 控件 RegularExpressionValidat…

C++读取文本文件中的汉字出现乱码的原因及解决措施

大家好&#xff01; 作者今天在写代码时遇到了读取文本文件中的汉字时出现乱码的情况&#xff0c;所以本文介绍Windows操作系统中&#xff0c;C读取文本文件中的汉字出现乱码情况原因及解决措施。 下面代码可以读取Stu.txt中的内容并输出&#xff1a; ifstream ifs; ifs.open(…

拌合楼管理软件开发(十一) 海康威视车牌识别摄像头安装调试,记录犯经验主义错误不断自己打脸过程

前言: 从小白开始 海康威视的摄像头接触过,包括前面也都开发了调用sdk开发拍照和视频预览,以及通过事件警报获取数据的。接触到的像头都是12v或者24v电源&#xff0c;或者是POE供电的&#xff0c;先入为主了觉得都是这样&#xff0c;结果打脸了。 一、设备选型&#xff1a; 最开…

MySQL 经典练习 50 题 (记录)

前言&#xff1a; 记录一下sql学习&#xff0c;仅供参考基本都对了&#xff0c;不排除有些我做的太快做错了。里面sql不存在任何sql优化操作&#xff0c;只以完成最后输出结果为目的&#xff0c;包含我做题过程和思路最后一行才是结果。 1.过程: 1.1.插入数据 /* SQLyog Ul…

【机器学习入门 】人工神经网络(一)

系列文章目录 第1章 专家系统 第2章 决策树 第3章 神经元和感知机 识别手写数字——感知机 第4章 线性回归 第5章 逻辑斯蒂回归和分类 第5章 支持向量机 文章目录 系列文章目录前言一、多层感知机二、反向传播算法三、深度神经网络 前言 人工神经网络( Artifical Neural Netw…