1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 用域名访问接口 get和post请求均正常 而put和delete请求均无法正常使用

用域名访问接口 get和post请求均正常 而put和delete请求均无法正常使用

时间:2019-09-15 16:07:05

相关推荐

用域名访问接口  get和post请求均正常 而put和delete请求均无法正常使用

问题描述:在内网环境下, 用IP访问接口均正常。但是在外网环境中用域名访问接口,get和post请求均正常,而put和delete请求均无法正常使用。

查了各种资料,也按要求配置了nginx,就是不行

server {listen 8099;server_name ;#index index.php index.html index.htm default.php default.htm default.html;gzip on;gzip_static on;# 需要http_gzip_static_module 模块gzip_min_length 1k;gzip_comp_level 4;gzip_proxied any;gzip_types text/plain text/xml text/css;gzip_vary on;gzip_disable "MSIE [1-6]\.(?!.*SV1)";add_header Access-Control-Allow-Origin *;add_header Access-Control-Allow-Headers X-Requested-With;add_header Access-Control-Allow-Methods GET,PUT,POST,OPTIONS;# 若新增后端路由前缀注意在此处添加(|新增)location / {proxy_pass /gateway;proxy_connect_timeout 60s;proxy_send_timeout 60s;proxy_read_timeout 60s;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto http;}# 避免端点安全问题if ($request_uri ~ "/actuator"){return 403;}}

后来了解一点内网穿透的东西,如图

网关层有可以设置过滤拦截, 向甲方客户确认了一下, 网关服务器确实拦截了delete和put请求, 只允许get和post, 无奈只能改代码了, 然而项目是基于spring-cloud-alibaba做的, restful风格接口, 要改的接口太多了, 工作量…

直接放弃~~

于是采用了下面的方式

前端必须改代码,这个无法绕过,所有的PUT/DELETE请求,都要求改成POST,并携带特殊Header:

所有的PUT请求,要携带Header:X-HTTP-Method-Override: PUT

所有的DELETE请求,要携带Header:X-HTTP-Method-Override: DELETE

参考Request URL: /admin/log/12345Request Method: POSTPOST /admin/log/12345 HTTP/1.1Host: 192.168.2.170:8080Connection: keep-aliveContent-Length: 0Accept: application/json, text/plain, */*Authorization: Bearer 5542d6-5cd6-48ac-a3b2-19b3fb4dUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36X-HTTP-Method-Override: deleteOrigin: http://192.168.1.170:8080Accept-Encoding: gzip, deflateAccept-Language: zh-CN,zh;q=0.9

2.服务端根据Header:X-HTTP-Method-Override,转换请求method:可在gateway、zuul中处理或者使用HiddenHttpMethodFilter处理(使用方法,自行百度);

或在nginx代理层修改和转发,服务端不需要做任何处理即可,我采用的是nginx的方式,参考配置:

在nginx的server中添加set $method $request_method;if ($http_X_HTTP_Method_Override ~* 'DELETE') {set $method DELETE;}if ($http_X_HTTP_Method_Override ~* 'PUT') {set $method PUT;}proxy_method $method;location / { ......

改完重启服务, 200 OK !!!

当然, 如果可以找网管修改网关的拦截规则, 那是极好的!!!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。