以前大概知道URLencoded, application/x-www-form-urlencoded等大概的东西,也做了一些能运行的程序,可总归不是特别清楚。今天又看到了HTTP: The Definitive Guide这本电子书,终于彻底明白了怎么回事。
首先还是回顾一下HTTP协议的报文,Http协议报文有两种,一是请求报文,二是响应报文,而这两种报文格式和编码规则是一样的,所以这里以请求报文为例。
请求报文(消息),由三个部分组成,从前到后分别是:
(1)start line
(2)headers
(3)body
好了,首先要明确的是(1)和(2)必须是ASCII码字符,也就是说出现在(1)和(2)里的字符编码必须为0-127之内。(3)中的内容可以是任何编码,可以是字符编码,也可以是图像的编码,也可以是任意二进制编码。至于到底里面是什么,通过(2)中的 Content-Type:头来说明。
总体格式是这样的,(1)startline必须以CRLF结尾,CR,LF当然也是ASCII码了。(2)headers也必须以CRLF结尾。需要注意的是,即使一个头也没有,仍需要一个CRLF表示头的结束。
具体来说:
一、对于startline
method request-URL version CRLF,其中method为方法名,如GET,POST等,后跟空格,后跟请求的URL,后跟空格,后跟版本号,后跟CRLF。
这里需要注意的是URL的编码,前面已经讲过了,首先startline里的内容必须为ASCII码,而对于startline里面的URL则更为苛刻,URL的格式为