开发喵星球

若依前后端分离部署到服务器,PUT DELETE请求403(209)

若依分离版打war包部署到服务器时,经常会遇到PUTDELETE请求返回403错误的问题。这种情况可能由多种原因引起,包括跨域请求限制、服务器未放开PUTDELETE请求、或者Tomcat版本不支持PUTDELETE等。

1、跨域请求问题处理:

在后端的ResourcesConfig中进行跨域配置,允许跨域请求,确保允许PUTDELETE方法。

@Override
public void addCorsMappings(CorsRegistry corsRegistry) {
    corsRegistry.addMapping("/**")
        .allowCredentials(true)
        .allowedOriginPatterns("*")
        .allowedMethods("POST", "GET", "PUT", "OPTIONS", "DELETE")
        .allowedHeaders("*")
        .maxAge(3600);
}

2、前端处理:

如果服务器未放开PUTDELETE请求,前端可以通过修改请求方式和添加特定的Header来模拟PUTDELETE请求。
在前端代码中将PUTDELETE请求改为POST,并在请求中添加Header

1. 将PUTDELETE请求改为POST

  • method: 'put' 替换为 method: 'post',myType: 'put'

  • method: 'delete' 替换为method: 'post',myType: 'delete'

2. 在请求拦截器中添加Header

位置:/src/utils/request.js

// request拦截器
service.interceptors.request.use(config => {
.........
    //为 method 原来为 put 和 delete 的请求,添加http头信息
    if (config.myType === 'delete') {
      config.headers['X-HTTP-Method-Override'] = 'DELETE'
    }
    if (config.myType === 'put') {
      config.headers['X-HTTP-Method-Override'] = 'PUT'
    }

3、服务端处理

可以通过在Nginx层进行修改和转发请求,根据Header中的X-HTTP-Method-Override转换请求方法,从而绕过服务器对PUT和DELETE请求的限制。
Nginx配置:

#在nginx的server中添加
set methodrequest_method;
if (http_X_HTTP_Method_Override ~* 'DELETE') {
   setmethod DELETE;
}
if (http_X_HTTP_Method_Override ~* 'PUT') {
   setmethod PUT;
}
proxy_method $method;  

location / { 
    ......

3、考虑更改部署方式

  1. 如果Tomcat版本不支持PUT和DELETE请求,可以考虑使用更适合REST风格API的打包方式,如将后端打包方式改为jar直接运行。
  2. 修改项目的pom.xml文件,将打包方式修改为jar
  3. 运行命令:
    nohup java -jar your_project.jar > your_project.log 2>&1 &
    
   
分类:Java/OOP 作者:无限繁荣, 吴蓉 发表于:2024-05-14 20:24:57 阅读量:102
<<   >>


powered by kaifamiao