我正在尝试使用java.net.HttpURLConnection向服务器发出HTTP请求。我需要发送的HTTP header 之一是“Via”。在我的代码中是这样的:

connection.addRequestProperty("X-test", "test_header_contents"); // just a sanity test
connection.addRequestProperty("Via", "via_header_contents");

当我使用数据包嗅探器时,可以看到测试头正在通过,但via头却没有。我知道Via是“受限制的”标题,因此我添加了这一行:
System.setProperty("sun.net.http.allowRestrictedHeaders", "true");

当我过去遇到相同的问题时,此行有效,但现在不起作用。我知道系统属性已设置,因为我在尝试添加HTTP header 之前立即调用System.getProperty,它返回true。为了发送via header ,我还应该做些其他事情吗?就像我说的那样,这以前曾经奏效,但现在不行。我认为唯一改变的是我从Java 6迁移到了7。感谢您能给我的任何帮助。

最佳答案

回答我自己的问题。

问题是我在程序中设置系统属性sun.net.http.allowRestrictedHeaders太晚了。我在尝试发送头之前立即进行了设置,这已经太迟了,这显然是因为HttpURLConnection对属性进行了某种形式的缓存。通过在程序开始时设置属性,我可以使其全部正常工作。

07-25 23:33
查看更多