自定义header字段跨域报错问题

项目后台用header的token字段接收token数据
String token = request.getHeader("token");
前端ajax请求报错:
from origin 'http://192.168.1.100:8020' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.

简单来说就是,当在进行跨域请求的时候,如果是自定义请求头,如添加自定义"token"字段,那么HTTP请求会发出一个预检请求,即OPTIONS请求,访问服务器是否允许该请求,如果浏览器没有进行跨域设置,则就会出现上面的错误。因为header没有token这个字段,识别不到

解决:

1、引入jar包
<dependency> <groupId>com.thetransactioncompany</groupId> <artifactId>cors-filter</artifactId> </dependency>

2、在Web.xml中添加CORS过滤器配置: 

<filter>
        <filter-name>CORS</filter-name>
        <filter-class>com.thetransactioncompany.cors.CORSFilter</filter-class>
        <init-param>
            <param-name>cors.allowOrigin</param-name>
            <param-value>*</param-value>
        </init-param>
        <init-param>
            <param-name>cors.supportedMethods</param-name>
            <param-value>GET, POST, HEAD, PUT, DELETE</param-value>
        </init-param>
        <init-param>
            <param-name>cors.supportedHeaders</param-name>
            <param-value>token,Accept, Origin, X-Requested-With, Content-Type,
                Last-Modified</param-value>
        </init-param>
        <init-param>
            <param-name>cors.exposedHeaders</param-name>
            <param-value>Set-Cookie</param-value>
        </init-param>
        <init-param>
            <param-name>cors.supportsCredentials</param-name>
            <param-value>true</param-value>
        </init-param>
        <init-param>
			<param-name>cors.maxAge</param-name>
			<param-value>3600</param-value>
		</init-param>
    </filter>
    <filter-mapping>
        <filter-name>CORS</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

注意:

 

另外自定义请求头会导致前端请求会有两次请求,即一次option预请求,一次正常请求。 每次都会有预请求很耗时,所以我们可以在web.xml设置预请求缓存。

<init-param>
            <param-name>cors.maxAge</param-name>
            <param-value>3600</param-value>
        </init-param>

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
跨域报错后台地址不对的问题可能是由于后台地址配置不正确导致的。在跨域请求中,需要在后台进行全局跨域处理,确保允许向该服务器提交请求的URI。你可以检查以下几个方面来解决这个问题: 1. 检查后台的跨域配置文件(如CorsConfig.java)中的allowedOrigins属性是否正确配置为后台的地址。确保该属性的值与后台地址一致。 2. 检查后台的请求方法上是否使用了@CrossOrigin注解,并且在@RequestMapping注解中指定了请求方式(如method = RequestMethod.POST/GET)。确保请求方法上的@CrossOrigin注解和@RequestMapping注解的配置正确。 3. 如果使用了@CrossOrigin注解,可以将其加到具体的请求方法上,以支持该请求的跨域访问。确保在请求方法上添加了@CrossOrigin注解,并且配置了正确的请求路径。 通过检查以上几个方面,你可以找到并修复后台地址配置不正确导致的跨域报错问题。 #### 引用[.reference_title] - *1* [跨域问题报错](https://blog.csdn.net/weixin_45410366/article/details/124704631)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [前端服务请求后台接口,返回跨域报错问题解决](https://blog.csdn.net/rookiediary/article/details/114931743)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值