http请求header相关的几个常见问题
2019-10-15 16:59
1426 查看
http协议可能是目前web远程调用领域最常用的协议,一如之前的soap协议。作为轻量级可靠传输协议,基于http协议的服务几乎成了restful的代名词,今天列举几个使用过程中http 相关的问题。
- 跨域
大家也最常遇到,解决办法也有很多,譬如在网关服务中引入CorsFilter,指定或者放开所有的域名和header。
@Bean public CorsFilter corsFilter() { final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); final CorsConfiguration config = new CorsConfiguration(); config.setAllowCredentials(true); config.addAllowedOrigin("*"); config.addAllowedHeader("*"); config.addAllowedMethod("OPTIONS"); config.addAllowedMethod("HEAD"); config.addAllowedMethod("GET"); config.addAllowedMethod("PUT"); config.addAllowedMethod("POST"); config.addAllowedMethod("DELETE"); config.addAllowedMethod("PATCH"); source.registerCorsConfiguration("/**", config); return new CorsFilter(source); }
另一种解决办法是调整代理服务器如nginx。
add_header 'Access-Control-Allow-Origin' '$http_origin'; add_header 'Access-Control-Allow-Origin' '*'; add_header 'Access-Control-Allow-Credentials' 'true'; add_header 'Access-Control-Allow-Methods' 'GET, PUT, POST, DELETE, OPTIONS'; add_header 'Access-Control-Allow-Headers' 'Content-Type,*';
- 中文header
http协议不支持中文header!!!
所以想要在header中传递中文信息,需要转码,接收端再解码。
Base64.encodeBase64String(origin.getBytes("utf-8"));
- header丢失
刚遇到的一个问题,request header中有个参数request_user_id, 认证服务拦截器发现request.getHeader取不到。一开始怀疑是apigateway的问题,查看了apigateway的代码,发现只是普通的转发,并没有重新代理请求,所以不存在这个问题;将请求地址改为ip重试(一开始请求的是域名地址),发现可以获取header值,header参数的准入主要靠
corsFilter的 config.addAllowedHeader(""),现在配置的是,也就是除了中文外的所有参数都应该能传递才对。
重新梳理服务链路,域名解析-nginx-apigateway-目标服务,锁定到nginx头上。nginx内部的设置,也是允许所有,但是nginx还有个限制,就是下划线的参数,会被忽略(坑啊!)
调整nginx的http参数,打开下划线参数,重启,问题得到解决。
underscores_in_he 10d2 aders on;
相关文章推荐
- 几个http请求相关的函数
- 几个http请求相关的函数 HttpWebRequest: Post , Get ; PostAndRedirect
- 【转帖】客户端通过 HTTP 请求和响应 的 Header 信息总结
- HTTP 错误 500.19 - Internal Server Error 无法访问请求的页面,因为该页的相关配置数据无效。
- 【异步请求相关知识点】xmlHttp.status的值(HTTP状态表)
- Apache CXF: 如何为 Web 请求增加定制的 HTTP header?
- 关于某些网站的图片盗链功能,相关http 请求的解决方法
- Http请求相关工具类
- 用HttpPost登陆验证时,用户名和密码放在请求头部header中的处理方法,形式为Authorization: username password。
- 构造HTTP请求Header实现“伪造来源IP”
- 【HTTP header】【Access-Control-Allow-Credentials】跨域Ajax请求时是否带Cookie的设置
- 关于http断点续传相关的RANGE这个header
- http缓存相关header
- HTTP请求header信息讲解
- HTTP 错误 500.19 - Internal Server Error 无法访问请求的页面,因为该页的相关配置数据无效。
- 服务器相关 HTTP 请求错误
- Http请求之基于HttpUrlConnection,支持Header,Body传值,支持Multipart上传文件:
- 【已解决】使用android-async-http网络请求框架出现Header[]不识别错误的解决办法
- HTTP2 帧基础知识以及Header、CONTINUATION、DATA帧相关资料:
- Java用org.apache.http.client的HttpClient发送Post请求 可获取返回Header