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

Spring Boot部署Railway后Swagger请求报错:Failed to Fetch

Spring Boot部署Railway后Swagger API调用报错的解决方案

问题描述

本地环境通过Swagger调用Spring Boot API完全正常,但部署到Railway平台后,Swagger测试API时弹出报错:

Failed to fetch.
Possible Reasons:
CORS
Network Failure
URL scheme must be "http" or "https" for CORS request.

推测是本地用HTTP协议、Railway自动启用HTTPS导致的冲突,添加了以下CORS配置但无效:

@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                .allowedOrigins("*")
                .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
                .allowedHeaders("*");
    }
}

另外,用Postman直接调用https://exciting-wonder-production.up.railway.app/country能正常获取响应,但Swagger依旧报错。


核心原因

问题并非单纯的CORS配置错误,而是Swagger UI未适配Railway的HTTPS环境:Swagger UI页面运行在HTTPS协议下,但内部发起的API请求可能仍使用HTTP地址,触发跨协议的同源策略限制,导致URL scheme报错。Postman不受浏览器CORS规则约束,所以能正常请求。


解决方案

1. 配置Swagger适配HTTPS地址

根据你使用的Swagger版本,强制指定API的HTTPS访问地址:

  • Springfox(Swagger 2):
    添加Swagger配置类,指定Railway域名和HTTPS协议:

    @Configuration
    @EnableSwagger2
    public class SwaggerConfig {
        @Bean
        public Docket api() {
            return new Docket(DocumentationType.SWAGGER_2)
                    .select()
                    .apis(RequestHandlerSelectors.basePackage("com.your.package"))
                    .paths(PathSelectors.any())
                    .build()
                    .host("exciting-wonder-production.up.railway.app")
                    .protocols(new HashSet<>(Arrays.asList("https")));
        }
    }
    
  • Springdoc(OpenAPI 3):
    在application.properties中配置:

    springdoc.swagger-ui.url=https://exciting-wonder-production.up.railway.app/v3/api-docs
    server.forward-headers-strategy=NATIVE
    

    或通过配置类指定:

    @Configuration
    public class OpenApiConfig {
        @Bean
        public OpenAPI customOpenAPI() {
            return new OpenAPI()
                    .servers(List.of(new Server().url("https://exciting-wonder-production.up.railway.app")));
        }
    }
    

2. 优化CORS配置

替换通配符*为明确的Railway域名,并开启凭证支持:

@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                .allowedOrigins("https://exciting-wonder-production.up.railway.app")
                .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
                .allowedHeaders("*")
                .allowCredentials(true);
    }
}

3. 配置Spring Boot识别转发协议

Railway会转发外部请求,需要让Spring Boot正确识别HTTPS协议,在application.properties中添加:

server.forward-headers-strategy=NATIVE
server.tomcat.remote-ip-header=x-forwarded-for
server.tomcat.protocol-header=x-forwarded-proto

4. 验证请求地址

部署后打开Swagger UI,检查每个API的Try it out按钮对应的请求URL是否为HTTPS开头,确保与页面协议一致。


内容的提问来源于stack exchange,提问作者Lungu Mihai

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 06:53:16