2017-03-15 47 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