问题描述:前端VUE、后端JAVA,代码放在本地可以完美运行,放在服务器外网不能运行delete和put,get和post不能运行
经过摸索总结,在不改变原有RESTful的情况下,亲身实验,得到两种解决办法:
一:改前端配置和nginx(后台是经过nginx代理)
前端http配置:
1.put和delete请求改为post请求
2.put请求添加请求头:X-Http-Method-Override: PUT;
delete请求添加请求头:X-Http-Method-Override: DELETE;
nginx配置:
在server里面添加如下代码
server {...set $method $request_method;if ($http_X_HTTP_Method_Override ~* 'PUT|DELETE') {set $method $http_X_HTTP_Method_Override;}proxy_method $method;...
}
重启nginx,完毕!
二:改前端配置和后端配置(后台不经过nginx,直接访问)
前端http配置:
1.put和delete请求改为post请求
2.put请求添加请求头:X-Http-Method-Override: PUT;
delete请求添加请求头:X-Http-Method-Override: DELETE;
后端http配置:
新建一个过滤器类 ChangeHttpMethodFilter
import org.springframework.core.annotation.Order;
import org.springframework.http.HttpMethod;
import org.springframework.stereotype.Component;import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import java.io.IOException;/*** 改变请求头的过滤器** @author xu* 2024/3/28 12:08*/
@Order(1)// 执行顺序最小
@Component
public class ChangeHttpMethodFilter implements Filter {@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;String method = httpServletRequest.getHeader("X-Http-Method-Override");// 如果修改和删除需要改变if(HttpMethod.DELETE.name().equals(method) || HttpMethod.PUT.name().equals(method)){HttpServletRequestWrapper requestWrapper = new HttpServletRequestWrapper(httpServletRequest) {@Overridepublic String getMethod() {return method.toUpperCase();}};filterChain.doFilter(requestWrapper, servletResponse);}else {filterChain.doFilter(servletRequest, servletResponse);}}
}
重启,完毕!