Java 为什么HttpURLConnection不发送多个标头?

Java 为什么HttpURLConnection不发送多个标头?,java,Java,我试图使用HttpURLConnection发送多个带有请求的头(accept和auth key),但只发送第一个头 URL url = new URL(fileOrUrl); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); for (String h : getHeaders()) { String[] keyval =

我试图使用HttpURLConnection发送多个带有请求的头(accept和auth key),但只发送第一个头

        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]}

为什么只发送一个标题

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

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


过滤的头(在Java 8中)是
“代理授权”
“授权”
“Cookie”
,和
“Cookie2”
,如果使用wire shark或类似工具,您应该看到这两个头都已发送

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


过滤的标题(在Java 8中)是
“代理授权”
“授权”
“Cookie”
,和
“Cookie2”
,不错!我实际上在测试代码,想知道为什么只有
Authorization
头才会出现这种情况。回答得很好!有道理——我在看Java7Javadoc!javadocs没有提到这种行为。很好!我实际上在测试代码,想知道为什么只有
Authorization
头才会出现这种情况。回答得很好!有道理——我在看Java7Javadoc!javadocs没有提到这种行为,我认为这不是重复的——有些人可能不会紧密地RTFM并将授权头从getRequestProperties中过滤出来的事实联系起来。这是相同的答案,但不一定是同一个问题。我认为这不是重复的——有些人可能不会紧密地RTFM并将授权头从getRequestProperties中过滤出来的事实联系起来。答案是一样的,但不一定是同一个问题。