温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

http请求header相关的几个常见问题

发布时间:2020-07-18 02:59:51 来源:网络 阅读:959 作者:layveen 栏目:开发技术

http协议可能是目前web远程调用领域最常用的协议,一如之前的soap协议。作为轻量级可靠传输协议,基于http协议的服务几乎成了restful的代名词,今天列举几个使用过程中http 相关的问题。

  1. 跨域
    大家也最常遇到,解决办法也有很多,譬如在网关服务中引入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,*';
  1. 中文header
    http协议不支持中文header!!!
    所以想要在header中传递中文信息,需要转码,接收端再解码。

Base64.encodeBase64String(origin.getBytes("utf-8"));

  1. 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_headers on;

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI