React+Spring Boot整合部署及405错误解决(Windows IIS环境)
解决React+Spring Boot前后端整合及405方法不允许问题
一、先排查405错误的核心原因
- 请求方法不匹配:405最常见的原因是前端请求的HTTP方法(GET/POST/PUT等)和Spring Boot后端接口定义的方法不一致。比如前端用POST调用
/Browser,但后端只定义了@GetMapping("/Browser"),直接返回405。先确认前后端请求方法完全对应。 - 跨域预请求拦截:前端在IIS的85端口,后端在8888端口,属于跨域请求。浏览器会先发送OPTIONS预请求,如果后端没处理OPTIONS方法,就会返回405。
- 接口路径错误:检查Spring Boot是否配置了
server.servlet.context-path,如果有,接口实际路径应该是/上下文路径/Browser,而非直接/Browser。
二、本地联调修复步骤
- 验证后端接口可用性:用Postman直接调用
http://localhost:8888/Browser,指定正确的请求方法,确认接口能正常返回数据。如果Postman也返回405,直接修改后端接口的注解(比如把@GetMapping改成@PostMapping,或者添加@RequestMapping(method = {RequestMethod.GET, RequestMethod.POST}))。 - 配置跨域支持:在Spring Boot中添加全局跨域配置,避免预请求失败:
@Configuration public class CorsConfig implements WebMvcConfigurer { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") .allowedOriginPatterns("*") .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS") .allowedHeaders("*") .allowCredentials(true); } }
或者在单个接口上添加@CrossOrigin注解快速测试。
3. 修正前端接口地址:确保前端请求的接口路径和后端完全一致,包括上下文路径(如果有)。
三、部署到Windows服务器的完整流程
1. 前端部署(IIS)
- 执行
npm run build生成React生产包(build文件夹)。 - 在IIS中新建站点,物理路径指向
build文件夹,绑定端口85。 - 解决路由刷新404问题:安装IIS的URL Rewrite模块,添加重写规则:
- 匹配URL:
.* - 条件:
{REQUEST_FILENAME}不是文件,{REQUEST_FILENAME}不是目录 - 操作:重写至
/index.html
- 匹配URL:
2. 后端部署(Spring Boot)
- 在IntelliJ中执行
mvn clean package(Maven项目)或./gradlew bootJar(Gradle项目),生成可执行jar包。 - 将jar包上传到Windows服务器的目标目录(如
D:\springboot-service)。 - 启动方式:
- 临时启动:创建bat脚本
start.bat,内容为java -jar your-app-name.jar --server.port=8888,双击运行。 - 注册为Windows服务(推荐):使用winsw工具,配置xml文件后,执行
winsw install注册为服务,实现开机自启。
- 临时启动:创建bat脚本
3. 前后端整合配置
- 修改前端代码中的接口基地址,从
localhost:8888改为服务器的IP/域名(如http://192.168.1.100:8888),重新打包部署到IIS。 - 服务器防火墙配置:开放85(前端)和8888(后端)端口,确保内外网访问正常。
4. 可选:IIS反向代理优化(避免跨域)
- 安装IIS的Application Request Routing (ARR)和URL Rewrite模块。
- 添加重写规则:
- 匹配URL:
^api/(.*) - 操作:重写至
http://localhost:8888/$1
- 匹配URL:
- 前端接口改为相对路径
/api/Browser,无需再处理跨域问题,同时隐藏后端端口,更安全。
内容的提问来源于stack exchange,提问作者Arun
相关产品推荐
相关产品推荐

