12:CORS跨域设置-Java Spring

简介: 12:CORS跨域设置-Java Spring

12.1 CORS介绍

CORS跨域资源共享(Cross-origin resource sharing)是指在服务器端定义跨域请求规则,允许控制浏览器向跨域服务器发出请求,支持各种请求方式,解除了Ajax同源使用的限制


目前所有浏览器都支持CORS跨域设置,它突破了一个请求在浏览器发出只能在同源的情况下向服务器获取数据的限制,成为了主流的跨域解决方案

12.2 CORS原理

CORS通过额外的HTTP头部信息,浏览器将Ajax请求分为普通请求和特殊请求

普通请求

请求方法

  • GET
  • HEAD
  • POST(Content-Type只限于application/x-www-form-urlencodedmultipart/form-datatext/plain

HTTP的头信息

  • Accept
  • Accept-Language
  • Content-Language
  • DPR
  • Downlink
  • Save-Data
  • Viewport-Width
  • Width
  • Content-Type

特殊请求

请求方法

  • PUT
  • DELETE
  • TRACE
  • PATCH
  • POST(Content-Type值只限于application/json

HTTP的头信息

  • 自定义

12.3 CORS实现

SpringBoot设置CORS的的本质是通过设置浏览器响应头信息,浏览器使用OPTIONS方法发送预检请求,获知服务器是否允许该跨域请求,如果不允许发送带数据的真实请求,则会受到限制

普通请求

普通请求头中携带Origin字段,用于说明当前请求的协议、域名和端口,服务器根据这个值决定是否同意这次请求

  • Access-Control-Allow-Origin 服务端请求域设置
  • Access-Control-Allow-Credentials Cookie请求设置
  • Access-Control-Request-Headers 额外发送的请求头字段信息

XMLHttpRequest对象的getResponseHeader()方法只能拿到6个基本字段,想拿到额外的字段必须在Headers头字段里指定

  • Cache-Control
  • Content-Language
  • Content-Type
  • Expires
  • Last-Modified
  • Pragma

1.浏览器正常请求

浏览器直接发出CORS请求,在头信息之中增加Origin、Access字段

GET /cors HTTP/1.1
Origin: http://www.xxx.com
Host: xxx.xxxx.com
Accept-Language: en-US  
Connection: keep-alive  
User-Agent: Mozilla/5.0...

2.服务端对请求的肯定回应

服务器收到请求以后,检查Origin、Access字段是否许可范围内,如果不在,服务器返回一个HTTP响应,如果在,服务器返回肯定响应

Access-Control-Allow-Origin: http://www.xxx.com
Access-Control-Allow-Methods: GET
Content-Type: text/html; charset=utf-8

特殊请求

特殊会在正式通信之前,增加一次HTTP预检请求(Preflight)

  • Access-Control-Allow-Origin 服务端请求域设置
  • Access-Control-Allow-Credentials Cookie请求设置
  • Access-Control-Request-Headers 额外发送的请求头字段信息
  • Access-Control-Max-Age 用来指定本次预检请求的有效期,单位为秒

1.浏览器预检请求

预检请求是指浏览器先询问服务器,当前网页所在的域名是否在服务器的许可名单之中,以及可以使用哪些HTTP动词和头信息字段。只有得到肯定答复,浏览器才会发出正式的HTTPRequest请求,否则就报错

OPTIONS /cors HTTP/1.1
Origin: http://www.xxx.com
Access-Control-Request-Method: PUT
Access-Control-Request-Headers: Header
Host: xxx.xxxx.com      
Accept-Language: en-US
Connection: keep-alive
User-Agent: Mozilla/5.0...

2.服务端对预检请求的肯定响应

服务器收到预检请求以后,检查了Origin、Access头字段以后,确认允许跨域请求,做出响应

HTTP/1.1 200 OK
Date: 
Server: 
Access-Control-Allow-Origin: http://www.xxx.com
Access-Control-Allow-Methods: GET, POST, PUT  
Access-Control-Allow-Headers: Header
Content-Type: text/html; charset=utf-8
Content-Encoding: gzip
Content-Length: 0
Keep-Alive: timeout=2, max=100
Connection: Keep-Alive
Content-Type: text/plain

3.浏览器正常请求

服务器通过了预检请求,以后每次浏览器正常的CORS请求和服务器的响应,都会有一个Origin、Access头信息字段

PUT /cors HTTP/1.1
Origin: http://www.xxx.com
Host: xxx.xxxx.com
Header: value  
Accept-Language: en-US  
Connection: keep-alive  
User-Agent: Mozilla/5.0...

4.服务器响应数据

Access-Control-Allow-Origin: http://www.xxx.com
Content-Type: text/html; charset=utf-8


目录
相关文章
|
2月前
|
JSON 安全 前端开发
浅析CORS跨域漏洞与JSONP劫持
浅析CORS跨域漏洞与JSONP劫持
76 3
|
8天前
|
人工智能 前端开发 Java
基于开源框架Spring AI Alibaba快速构建Java应用
本文旨在帮助开发者快速掌握并应用 Spring AI Alibaba,提升基于 Java 的大模型应用开发效率和安全性。
基于开源框架Spring AI Alibaba快速构建Java应用
|
16天前
|
前端开发 Java 数据库连接
Spring 框架:Java 开发者的春天
Spring 框架是一个功能强大的开源框架,主要用于简化 Java 企业级应用的开发,由被称为“Spring 之父”的 Rod Johnson 于 2002 年提出并创立,并由Pivotal团队维护。
37 1
Spring 框架:Java 开发者的春天
|
1天前
|
开发框架 中间件 Java
如何处理跨域资源共享(CORS)的 OPTIONS 请求?
处理 CORS 的 OPTIONS 请求的关键是正确设置响应头,以告知浏览器是否允许跨域请求以及允许的具体条件。根据所使用的服务器端技术和框架,可以选择相应的方法来实现对 OPTIONS 请求的处理,从而确保跨域资源共享的正常进行。
|
1天前
|
JavaScript 前端开发 API
跨域资源共享(CORS)的工作原理是什么?
跨域资源共享(CORS)通过浏览器和服务器之间的这种交互机制,在保证安全性的前提下,实现了跨域资源的访问,使得不同源的网页能够合法地获取和共享服务器端的资源,为现代Web应用的开发提供了更大的灵活性和扩展性。
|
28天前
|
存储 缓存 Java
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
这篇文章详细介绍了Java中的IO流,包括字符与字节的概念、编码格式、File类的使用、IO流的分类和原理,以及通过代码示例展示了各种流的应用,如节点流、处理流、缓存流、转换流、对象流和随机访问文件流。同时,还探讨了IDEA中设置项目编码格式的方法,以及如何处理序列化和反序列化问题。
63 1
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
|
16天前
|
Java 数据库连接 开发者
Spring 框架:Java 开发者的春天
【10月更文挑战第27天】Spring 框架由 Rod Johnson 在 2002 年创建,旨在解决 Java 企业级开发中的复杂性问题。它通过控制反转(IOC)和面向切面的编程(AOP)等核心机制,提供了轻量级的容器和丰富的功能,支持 Web 开发、数据访问等领域,显著提高了开发效率和应用的可维护性。Spring 拥有强大的社区支持和丰富的生态系统,是 Java 开发不可或缺的工具。
|
15天前
|
JSON 前端开发 安全
CORS 是什么?它是如何解决跨域问题的?
【10月更文挑战第20天】CORS 是一种通过服务器端配置和浏览器端协商来解决跨域问题的机制。它为跨域资源共享提供了一种规范和有效的方法,使得前端开发人员能够更加方便地进行跨域数据交互。
|
21天前
|
Java Linux iOS开发
如何设置 Java 的环境变量
设置Java环境变量是使用Java开发工具和运行Java程序的前提。主要步骤包括:安装JDK,配置系统环境变量中的JAVA_HOME、PATH和CLASSPATH,确保命令行可直接调用javac和java命令。
|
20天前
|
存储 人工智能 Java
将 Spring AI 与 LLM 结合使用以生成 Java 测试
AIDocumentLibraryChat 项目通过 GitHub URL 为指定的 Java 类生成测试代码,支持 granite-code 和 deepseek-coder-v2 模型。项目包括控制器、服务和配置,能处理源代码解析、依赖加载及测试代码生成,旨在评估 LLM 对开发测试的支持能力。
31 1
下一篇
无影云桌面