HttpURLConnection不允许我设置"Via"头信息

6

我正在尝试使用java.net.HttpURLConnection向服务器发出HTTP请求。我需要发送的一个HTTP头是"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 headers之前,我调用了System.getProperty并返回了true。我需要做其他什么来发送via header吗?就像我说的,这以前可行,但现在不行了。我想唯一改变的是我从Java 6移动到了7。感谢您能给我的任何帮助。

3个回答

8

回答我自己的问题。

问题在于我在程序后期设置系统属性sun.net.http.allowRestrictedHeaders。我在尝试发送标头之前立即设置它,但这显然太晚了,因为HttpURLConnection会对属性进行某种缓存。通过在程序开头设置属性,我能够使其正常工作。


4
OpenJDK 7(版本43)的源代码显示,他们使用静态初始化块来设置此属性,并缓存该值。因此,需要在设置此属性之前设置它。这意味着需要在第一次加载HttpURLConnection类之前设置该属性。

2

我有一个与“Trailer”标题相同的问题。

我也使用:

 System.setProperty("sun.net.http.allowRestrictedHeaders", "true");

我将其放在主类的静态构造函数中,并通过JVM参数传递。

<PARAM name="java_arguments" value="-Dsun.net.http.allowRestrictedHeaders=true">

如果我从Eclipse中运行小程序,它可以工作,但是当我从浏览器中运行时却无法工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接