Java Http请求,HttpURLConnection HTTP请求丢失头信息,Head信息丢失解决方案
先说下背景,我昨天晚上一个解决一个 Http模拟请求 问题弄到了凌晨,最终发现这个问题提诡异的,origin
头信息丢失了。
一、Head信息丢失,origin丢失原因
通过查询资料,发现 Java 底层(HttpURLConnection
)认为origin
是涉及到跨域问题,直接增加会有安全问题,所以你在我们设置请求头的过程中是会自动去掉的。
// 打开和URL之间的连接
conn = (HttpURLConnection) realUrl.openConnection();
// 设置 origin 头信息,大小写无差异
conn.setRequestProperty("origin","https://www.sojson.com");
这样直接设置是无效的。他在请求的时候最终会把origin
删除。好比上面的图片一样,命名是有的。
为了测试增加头信息,如下面的代码:
// 打开和URL之间的连接
conn = (HttpURLConnection) realUrl.openConnection();
// 设置 origin 头信息,大小写无差异
conn.setRequestProperty("origin1","https://www.sojson.com");
origin1 不会消失。证明只会去掉origin
信息
二、origin信息丢失解决办法
其实很简单,设置下允许头信息allowRestrictedHeaders
为true代码如下。
//解决 请求头丢失的问题(origin)
System.setProperty("sun.net.http.allowRestrictedHeaders", "true");
// 打开和URL之间的连接
conn = (HttpURLConnection) realUrl.openConnection();
这样就解决了。
这个问题用OKhttp是不会有的。一个隐藏的坑解决了,
版权所属:SO JSON在线解析
原文地址:https://www.sojson.com/blog/534.html
转载时必须以链接形式注明原始出处及本声明。
如果本文对你有帮助,那么请你赞助我,让我更有激情的写下去,帮助更多的人。