报文
HTTP报文是面向文本的,报文中的每一个字段都是一些ASCII码,各个字段的长度是不确定的。
HTTP报文分为两种:请求报文和 响应报文
一个HTTP请求报文由 请求行(request line )、请求头部(header)空行和请求数据4个部分组成
1、请求头
由请求方法字段、url字段和HTTP协议版本字段 共三个字段组成 。他们用空格分隔。 例如 GET/index.html HTTP/1.1
常见的有如下几种:
1、GET
最常见的请求方式,当用户要从服务端中读取文档时,点击网页上的链接或者通过在浏览器的地址栏输入网址来浏览网页的。
使用的都是GET方法。
GET方法要求服务器将URL定位的资源放在响应报文的数据部分,会送给客户端。使用get方法时,请求参数和对应的值附加在URL后面,利用一个问号(“?”)代表URL的结尾与请求参数的开始,传递参数长度受限制。
2、POST
POST方法可以允许客户端给服务器提供信息较多,POST方法将请求参数封装在HTTP请求数据中,以名称/值的形式出现,可以传输大量数据,这样POST方式对传送的数据大小没有限制,而且也不会显示在URL中。
3、Head
Head就像GET 只不过服务端接受到Head请求后只返回响应头,而不会发送相应内容。当我们只需要查看某个页面的状态的时候,使用Head是非常高效的。因为在传输的过程中省去了页面的内容。
3.空行
最后一个请求头之后是一个空行,发送回车符和换行符,通知服务器以下不再有请求头。
4.请求数据
请求数据不在GET方法中使用,而是在POST方法中使用。POST方法适用于需要客户填写表单的场合。与请求数据相关的最常使用的请求头是Content-Type和Content-Length。
HTTP报文
HTTP响应也由三个部分组成,分别是:状态行、消息报头、响应正文。
如下所示,HTTP响应的格式与请求的格式十分类似:
<status-line>
<headers>
<blank line>
[<response-body>]
正如你所见,在响应中唯一真正的区别在于第一行中用状态信息代替了请求信息。状态行(status line)通过提供一个状态码来说明所请求的资源情况。
状态行格式如下:
HTTP-Version Status-Code Reason-Phrase CRLF
其中,HTTP-Version表示服务器HTTP协议的版本;Status-Code表示服务器发回的响应状态代码;Reason-Phrase表示状态代码的文本描述。状态代码由三位数字组成,第一个数字定义了响应的类别,且有五种可能取值。