问题描述:前端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)// 执行顺序最小@Componentpublic class ChangeHttpMethodFilter implements Filter { @Override public 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) { @Override public String getMethod() { return method.toUpperCase(); } }; filterChain.doFilter(requestWrapper, servletResponse); }else { filterChain.doFilter(servletRequest, servletResponse); } }}
重启,完毕!