You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Expo Web环境下PUT/PATCH请求出现CORS错误,请求排查原因

Expo Web中PUT/PATCH请求出现CORS错误的排查与解决

问题根源

浏览器对于PUT、PATCH这类非简单请求会先发OPTIONS预检请求,询问后端是否允许该请求方法、Headers等。你的Spring Security配置中使用了applyPermitDefaultValues(),这个方法默认仅允许GET、HEAD、POST三种HTTP方法,并未包含PUT和PATCH,因此预检请求被后端拒绝,触发CORS错误。

而移动端(虚拟设备/真机)和Postman不会触发浏览器的预检机制,直接发送请求,所以能正常通过后端验证。

解决方案

修改Spring Security的CORS配置,手动指定允许的HTTP方法、Headers和Origin:

修改后的Security配置代码

import org.springframework.web.cors.CorsConfiguration;
import javax.servlet.http.HttpServletRequest;
import java.util.Arrays;
import java.util.Collections;

protected void configure(HttpSecurity http) throws Exception {
    http.mvcMatcher("/api/**")
            .cors()
            .configurationSource(request -> {
                CorsConfiguration config = new CorsConfiguration();
                // 允许所有Origin,生产环境建议替换为Expo Web的具体域名(如http://localhost:19006)
                config.setAllowedOriginPatterns(Collections.singletonList("*"));
                // 明确允许PUT、PATCH及其他需要的方法
                config.setAllowedMethods(Arrays.asList("GET", "POST", "PUT", "PATCH", "DELETE", "OPTIONS"));
                // 允许请求中携带的Headers
                config.setAllowedHeaders(Arrays.asList("Authorization", "Content-Type"));
                // 允许携带凭证(如Cookie)
                config.setAllowCredentials(true);
                return config;
            })
            .and()
            .csrf()
            .disable()
            .authorizeRequests((requests) -> requests.antMatchers("/actuator/health", "/api/non-secured/patients/**", "/v3/api-docs/**", "/swagger-ui/**")
                    .permitAll()
                    .anyRequest()
                    .authenticated())
            .oauth2ResourceServer().jwt();
}

关键说明

  1. 替换applyPermitDefaultValues():该方法的默认规则无法覆盖PUT/PATCH这类非简单请求,必须手动配置允许的方法列表。
  2. 允许OPTIONS方法:预检请求使用OPTIONS方法,必须确保后端允许该方法通过。
  3. Origin配置:生产环境避免使用通配符*,建议指定Expo Web的具体访问域名(比如本地开发时的http://localhost:19006),提升安全性。
  4. Headers配置:确保包含请求中使用的Authorization和Content-Type,避免因Headers不被允许触发CORS错误。

修改配置后重启后端服务,再在Expo Web中测试PUT/PATCH请求即可解决CORS问题。

内容的提问来源于stack exchange,提问作者Mert Batuhan ÜNVERDİ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 07:16:28