2017-03-15 91 views
0

我正在與zLib合作,我的目標是解碼發送到我的服務器的數據。我正試圖瞭解如何去做這件事。如何理解客戶端的HTTP請求解碼?

假設我有一個HTTP請求頭(只把我的頭頂部):

Referer: http://google.com\r\n 
Content-Type: application/x-www-form-urlencoded\r\n 
Accept-Encoding: gzip, deflate\r\n 
\r\n 
ENCODED_DATA 

運用Accept-Encoding:頭中提取的內容。

假設Ctx = ENCODED_DATA

這是否告訴我,爲了獲取明文Ctx,我需要申請Gzip(Ctx)然後Deflate(Ctx)

基本上,問題是,如何解碼客戶端HTTP請求中的ENCODED_DATA,假設頭部顯示如上。

回答

1

首先,我會阻止你編寫自己的web服務器,因爲你會引入大量的安全漏洞。 特別是如果你不瞭解標準。其次,「Accept-Encoding:gzip,deflate」是客戶端在發送響應時告訴服務器,它可以採用gzip或deflate格式。這與請求的「ENCODED_DATA」部分無關。

除非客戶端還發送「Content-Encoding:」標頭,否則請求中的數據不會被gzip壓縮。 (那頭文件會說「gzip」或「deflate」)。從請求顯示,您的數據可能根本沒有壓縮,但在「www-form-urlencoded」。

我打算說,除非你的目標是學習標準(在這種情況下,你應該閱讀它們,再加上web服務器代碼),否則你應該避免在這一層上不惜一切代價玩。只需使用爲您完成這項工作的數百個Web框架之一即可。

+0

我不寫Web服務器。只是本地管道服務器的客戶端,服務器端應用程序。另外,我從HTTP請求獲得的數據不是urlencoded,它包含格式錯誤的字符,我幾乎99%確定它與內容編碼有關。任何其他想法? – Droopy

+0

如果您正在編寫客戶端,如果您沒有發送有效的URL編碼數據,爲什麼將Content-Type設置爲url編碼?如果你想讓服務器正確解碼你的數據,你必須告訴它你正在發送什麼。我仍然不清楚你想做什麼,或者爲什麼,因爲你應該使用庫/框架來做到這一點。 – BraveNewCurrency