aliyun/aliyun-odps-java-sdk

Istio将http header全部修改成了小写导致runsql取不到Location

baizhimafa opened this issue · 9 comments

当前版本

       <dependency>
            <groupId>com.aliyun.odps</groupId>
            <artifactId>odps-sdk-core</artifactId>
            <version>0.32.5-public</version>
        </dependency>

当响应头被修改成小写后,com.aliyun.odps.Instances#create(String project, Job job)这里就取不到直接异常了

    Response resp = client.stringRequest(resource, "POST", null, headers, xml);
    String location = resp.getHeaders().get(Headers.LOCATION);
    if (location == null || location.trim().length() == 0) {
      throw new OdpsException("Invalid response, Location header required.");
    }

Header被改掉目前只在过通过proxy访问的时候发生过,你是这种情况吗?

Header被改掉目前只在过通过proxy访问的时候发生过,你是这种情况吗?

这点我不清楚,据搭建这套容器环境的人说是Istio修改了header

Header被改掉目前只在过通过proxy访问的时候发生过,你是这种情况吗?

这点我不清楚,据搭建这套容器环境的人说是Istio修改了header

应该是类似的,我们内部讨论下怎么处理这种场景

我们这边修改+测试+发布的周期可能比较长,你这边着急的话可能要clone一份代码,本地编译一个版本

我扫了下代码,应该改两处就可以

  1. DefaultConnection.getResponse:
    在这个方法里面把header的key都转成lower case

  2. Headers
    在这个方法里面把这些常量都改成lower case

我也遇到的同样的问题,响应头的location是小写,不是Location,所以获取不到抛异常
<dependency>
<groupId>com.aliyun.odps</groupId>
<artifactId>odps-sdk-core</artifactId>
<version>0.33.7-public</version>
</dependency>

我也遇到的同样的问题,响应头的location是小写,不是Location,所以获取不到抛异常

com.aliyun.odps
odps-sdk-core
0.33.7-public

目前这种问题都是因为proxy导致的

我也遇到了。

现在容器化和Service Mesh(基于Sidecar Proxy)技术在发展,请尽快修复一下这个问题吧。

Header被改掉目前只在过通过proxy访问的时候发生过,你是这种情况吗?

这点我不清楚,据搭建这套容器环境的人说是Istio修改了header

应该是类似的,我们内部讨论下怎么处理这种场景

我们这边修改+测试+发布的周期可能比较长,你这边着急的话可能要clone一份代码,本地编译一个版本

我扫了下代码,应该改两处就可以

  1. DefaultConnection.getResponse:
    在这个方法里面把header的key都转成lower case
  2. Headers
    在这个方法里面把这些常量都改成lower case

我觉得不应该是单纯地改成小写,而是应该像通用的Http库一样,忽略Header的大小写(本来Header就是Case-Insensitive

Header被改掉目前只在过通过proxy访问的时候发生过,你是这种情况吗?

这点我不清楚,据搭建这套容器环境的人说是Istio修改了header

应该是类似的,我们内部讨论下怎么处理这种场景
我们这边修改+测试+发布的周期可能比较长,你这边着急的话可能要clone一份代码,本地编译一个版本
我扫了下代码,应该改两处就可以

  1. DefaultConnection.getResponse:
    在这个方法里面把header的key都转成lower case
  2. Headers
    在这个方法里面把这些常量都改成lower case

我觉得不应该是单纯地改成小写,而是应该像通用的Http库一样,忽略Header的大小写(本来Header就是Case-Insensitive

上面说的是一个快速绕过的方法

正式的fix,下一个版本会发布

fixed in version 0.34.4-public