若依分离版打
war
包部署到服务器时,经常会遇到PUT
和DELETE
请求返回403
错误的问题。这种情况可能由多种原因引起,包括跨域请求限制、服务器未放开PUT
和DELETE
请求、或者Tomcat
版本不支持PUT
和DELETE
等。
在后端的ResourcesConfig
中进行跨域配置,允许跨域请求,确保允许PUT
和DELETE
方法。
@Override
public void addCorsMappings(CorsRegistry corsRegistry) {
corsRegistry.addMapping("/**")
.allowCredentials(true)
.allowedOriginPatterns("*")
.allowedMethods("POST", "GET", "PUT", "OPTIONS", "DELETE")
.allowedHeaders("*")
.maxAge(3600);
}
如果服务器未放开
PUT
和DELETE
请求,前端可以通过修改请求方式和添加特定的Header
来模拟PUT
和DELETE
请求。
在前端代码中将PUT
和DELETE
请求改为POST
,并在请求中添加Header
。
PUT
和DELETE
请求改为POST
method: 'put'
替换为method: 'post',myType: 'put'
method: 'delete'
替换为method: 'post',myType: 'delete'
位置:
/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'
}
可以通过在
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 / {
......
pom.xml
文件,将打包方式修改为jar
。nohup java -jar your_project.jar > your_project.log 2>&1 &
powered by kaifamiao