【问题标题】:HttpURLConnection won't let me set "Via" headerHttpURLConnection 不允许我设置“Via”标头
【发布时间】:2012-06-21 21:53:29
【问题描述】:

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

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

当我使用数据包嗅探器时,我可以看到测试标头正在通过,但通过标头没有。我知道 Via 是一个“受限”标题,所以我添加了这一行:

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

当我过去遇到同样的问题时,这条线可以工作,但现在不能工作。我知道系统属性已设置,因为我在尝试添加 HTTP 标头之前调用了 System.getProperty,它返回 true。我还应该做些什么才能发送 via 标头吗?就像我说的,这以前有效,但现在无效。我认为唯一改变的是我从 Java 6 迁移到 7。感谢您给我的任何帮助。

【问题讨论】:

    标签: java httpurlconnection


    【解决方案1】:

    回答我自己的问题。

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

    【讨论】:

      【解决方案2】:

      source code for OpenJDK 7 (build 43) 显示他们使用静态初始化块来设置此属性,然后缓存该值。所以你需要在设置之前设置属性。这意味着它需要在首次加载 HttpURLConnection 类之前进行设置。

      【讨论】:

        【解决方案3】:

        我对“预告片”标题有同样的问题

        我也用:

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

        我在主类的静态构造函数中做,并用JVM参数传递

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

        如果我从 Eclipse 运行小程序,它可以工作,但从浏览器运行时不起作用

        【讨论】:

          猜你喜欢
          • 2015-09-01
          • 2018-12-17
          • 2012-12-26
          • 2013-07-27
          • 2023-03-14
          • 2019-07-09
          • 1970-01-01
          • 1970-01-01
          • 2019-01-09
          相关资源
          最近更新 更多