需要对此主题有更深入的了解。
出于特定原因,我试图在文档中查找受限制的标头,但找不到一个。
这是受限制的标头的列表:
Accept-Charset
Accept-Encoding
Access-Control-Request-Headers
Access-Control-Request-Method
Connection
Content-Length
Cookie
Cookie2
Date
DNT
Expect
Host
Keep-Alive
Origin
Referer
TE
Trailer
Transfer-Encoding
Upgrade
Via
要覆盖这些内容,需要在JVM启动或使用时将 sun.net.http.allowrestrictedheaders 设置为 true 。 System.setProperty(“ sun.net.http.allowRestrictedHeaders”,“ true”)
据说它已作为安全修复程序的一部分被禁用。
我想了解可能造成了哪些安全风险以及如何禁止使用标头是解决此问题的方法,请记住您仍然可以覆盖标头。
链接引用:
https://fetch.spec.whatwg.org/#forbidden-header-name
Why does Content-Length HTTP header field use a value other than the one given in Java code?
Can I override the Host header where using java's HttpUrlConnection class?
答案 0 :(得分:1)
first link在便笺(绿色文本)中说:
这些都是被禁止的,因此用户代理对其保持完全控制
这是为了防止Web浏览器中的恶意javascript代码欺骗。
由于Java代码不是Web浏览器,因此只有其中一部分受到Java的限制,如指向源代码的链接所示。
仍受限制的标头直接由HttpURLConnection
类控制,因此不需要欺骗这些值,因此将其保留为受限制的问题就不会出现。