与HTTP服务器通信

时间:2012-02-03 17:02:01

标签: c# http sockets

我正在尝试编写自己的HttpWebRequest类。我已经编写了代码,将请求的标头和正文发送到服务器并等待响应。但是,我不确定哪个字符集应该用于标题。

我也一直想知道处理响应的好方法(标题+正文)。我应该尝试将所有收到的数据解码为字符串,还是应该以不同的方式进行解码?我正在考虑使用将这两个部分分开的两个换行符/回车符从主体中拆分标题。然后,当我知道它的字符集时,我能够解码标题并留下身体。

所以我的问题简而言之:

HTTP使用什么字符集作为标题? 什么是处理响应的好方法?

1 个答案:

答案 0 :(得分:3)

首先,我建议您熟悉RFC-2616,这是HTTP 1.1协议的RFC。

从上面的RFC中,您将找到以下声明

  

TEXT规则仅用于描述性字段内容和值
  不打算由消息解析器解释。词
  * TEXT可以包含ISO-
以外的字符集中的字符   8859-1 [22]仅在根据RFC 2047的规则编码时   [14]。

标头应使用ISO-8859-1编码,除非使用RFC-2047中概述的MIME编码进行编码。

至于解析响应,这实际上取决于消息。就个人而言,我会基于为HTTP定义的BNF来处理响应,因为我识别出令牌,我认为我会更新解析器的状态以相应地处理其余的响应。例如,在处理响应数据时,您可能会发现响应是JPG图像,内容长度为X,因此您可以设置适当的内存流来读取内容,然后创建图像等。