【问题标题】:Why does HttpURLConnection not send multiple headers? [duplicate]为什么 HttpURLConnection 不发送多个标头? [复制]
【发布时间】:2018-10-09 05:15:47
【问题描述】:

我正在尝试使用 HttpURLConnection 在我的请求中发送多个标头(接受和身份验证密钥),但只发送第一个。

        URL url = new URL(fileOrUrl);
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();

            for (String h : getHeaders()) {
                String[] keyval = h.split(":");
                if (keyval.length != 2) {
                    throw new IllegalArgumentException();
                }
                System.out.println("Setting header " + keyval[0] + ": " + keyval[1]);
                conn.addRequestProperty(keyval[0], keyval[1]);
            }


        System.out.println(conn.getRequestProperties());
        return stream = conn.getInputStream();

这会导致:

Setting header Accept:  application/x-google-protobuf
Setting header Authorization:  apikey
{Accept=[ application/x-google-protobuf]}

为什么只发送一个标头?

【问题讨论】:

  • 我认为这不是重复的——有人可能不会密切关注 RTFM 并将授权标头从 getRequestProperties 中过滤掉的事实联系起来。这是相同的答案,但不一定是相同的问题。

标签: java


【解决方案1】:

如果您使用wire-shark 或类似工具,您应该会看到两个标头都已发送。

HttpURLConnection 实现类中有一些代码从getRequestProperties() 返回的映射中过滤掉敏感标头。被过滤掉的标头之一是"Authorization"

过滤的标头(在 Java 8 中)是 "Proxy-Authorization""Authorization""Cookie""Cookie2"

【讨论】:

  • 不错!我实际上是在测试代码,想知道为什么它只发生在 Authorization 标头上。很好的答案!
  • 有道理——我在看 Java 7 Javadoc!
  • javadocs 没有提到这种行为。
猜你喜欢
  • 1970-01-01
  • 2017-09-05
  • 2013-10-21
  • 2022-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-10
  • 2017-12-30
相关资源
最近更新 更多