Tomcat与跨域问题

本文探讨了浏览器的同源策略以及在Tomcat中解决跨域问题的方法。通过配置Access-Control-Allow-Origin响应头,Tomcat提供了CORS过滤器来处理跨域请求,包括简单请求、预检请求和非CORS请求。文章还详细介绍了处理不同请求类型的代码逻辑,并讨论了自定义实现与使用Tomcat内置过滤器的优缺点。
摘要由CSDN通过智能技术生成

做Web应用开发的,一定都遇到过或者至少听说过JS跨域这个问题。今天我们来看看这个问题的产生原因,以及在Tomcat中的解决方式。

说到跨域时,首先需要了解下浏览器的同源策略(Same orgin policy)。

那到底哪种情况下算同源,哪些情况下算跨域呢?

以下面这个URL

http://www.example.com/dir/page.html

这个URL为例,是否同源如下图所示


(上图来自维基百科)

而在跨域请求的时候,打开浏览器的开发者工具,会看到这行错误信息

No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://www.xxx.xxx' is therefore not allowed access.

也就是说如果要实现跨域请求,是需要服务器端明确指定的。例如我们自己开发的Servlet,要支持这种跨域请求,需要在响应头中增加如下配置

response.setHeader("Access-Control-Allow-Origin","*");

当然,真实的线上应用把星号改成对应要允许的域名即可。

而为了处理跨域的需求,Tomcat其实也包含一个特定的Filter:

org.apache.catalina.filters.CorsFilter

由于跨域资源共享英文称之为(Cross-Origin Resource Sharing),简称是CORS,在这个Filter中,我们可以定义一系列的初始参数initParam

  • cors.allowed.origins
  • cors.allowed.methods
    
  • cors.allowed.headers
  • ...

这一系列配置可以实现我们自己代码需要的全部功能,但更集中,方便使用。例如第一个参数可以配置允许的域有哪些,默认为星,可以指定多个域名,逗号分隔

第二个参数可以指定哪些请求方法允许使用,例如GET/POST/PUT。。。

官方文档对其功能描述如下:

This

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值