Java Http請(qǐng)求,HttpURLConnection HTTP請(qǐng)求丟失頭信息,Head信息丟失解決方案
先說下背景,我昨天晚上一個(gè)解決一個(gè) Http模擬請(qǐng)求 問題弄到了凌晨,最終發(fā)現(xiàn)這個(gè)問題提詭異的,origin
頭信息丟失了。
一、Head信息丟失,origin丟失原因
通過查詢資料,發(fā)現(xiàn) Java 底層(HttpURLConnection
)認(rèn)為origin
是涉及到跨域問題,直接增加會(huì)有安全問題,所以你在我們設(shè)置請(qǐng)求頭的過程中是會(huì)自動(dòng)去掉的。
// 打開和URL之間的連接
conn = (HttpURLConnection) realUrl.openConnection();
// 設(shè)置 origin 頭信息,大小寫無差異
conn.setRequestProperty("origin","http://zijieyoumin.cn");
這樣直接設(shè)置是無效的。他在請(qǐng)求的時(shí)候最終會(huì)把origin
刪除。好比上面的圖片一樣,命名是有的。
為了測試增加頭信息,如下面的代碼:
// 打開和URL之間的連接
conn = (HttpURLConnection) realUrl.openConnection();
// 設(shè)置 origin 頭信息,大小寫無差異
conn.setRequestProperty("origin1","http://zijieyoumin.cn");
origin1 不會(huì)消失。證明只會(huì)去掉origin
信息
二、origin信息丟失解決辦法
其實(shí)很簡單,設(shè)置下允許頭信息allowRestrictedHeaders
為true代碼如下。
//解決 請(qǐng)求頭丟失的問題(origin)
System.setProperty("sun.net.http.allowRestrictedHeaders", "true");
// 打開和URL之間的連接
conn = (HttpURLConnection) realUrl.openConnection();
這樣就解決了。
這個(gè)問題用OKhttp是不會(huì)有的。一個(gè)隱藏的坑解決了,
版權(quán)所屬:SO JSON在線解析
原文地址:http://zijieyoumin.cn/blog/534.html
轉(zhuǎn)載時(shí)必須以鏈接形式注明原始出處及本聲明。
如果本文對(duì)你有幫助,那么請(qǐng)你贊助我,讓我更有激情的寫下去,幫助更多的人。