之前总结过一篇TCP/IP协议的文章,而Http就是建立在TCP的基础之上的。TCP、UDP属于传输层协议,而Http是属于应用层的协议。
Http是超文本传输协议的缩写。协议详细内容参考RFC2616。由于面向文本的,所以使用ASCII编码。
Http特点
1. 客户/服务器模式,支持基本认证和安全认证(Https)
2. 简单快速
3. 灵活:允许传输任意类型数据,通过Content-Type标记
4. Http1.0使用短连接方式,Http1.1支持长连接方式
5. 无状态:对事务处理没有记忆能力
Http报文可以分为请求报文和响应报文两种。下面先给出各报文的例子方便后面的理解
Get请求消息例子:
==========
GET /doaction?p=123&k=3343 HTTP/1.1
Host: localhost:12345
Connection: keep-alive
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36
Accept-Encoding: gzip, deflate, sdch
Accept-Language: zh-CN,zh;q=0.8,en;q=0.6,zh-TW;q=0.4
Cookie: name=jackey;
===========
Post请求消息例子:
===========
POST /post HTTP/1.1
Host: localhost:12345
Connection: keep-alive
Content-Length: 11
Cache-Control: max-age=0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Origin: http://localhost:12345
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36
Content-Type: application/x-www-form-urlencoded
Referer: http://localhost:12345/doaction?p=123&k=3343
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.8,en;q=0.6,zh-TW;q=0.4
name=jackey
===========
响应消息例子:
===========
HTTP/1.1 200 OK
Connection:keep-alive
Content-Type: text/html;charset=UTF-8
Content-Length:51
Date:2014-12-31 16:02:17
Server:HttpServer
Set-Cookie: name=jackey; Expires=Tue, 03-Feb-2015 08:29:31 GMT; Path=/; Secure
<html><head>title</head><body>content</body></html>
===========
Http采用请求响应模型,浏览器向服务器发送请求,服务器响应消息返回给浏览器。所以http消息分为两种:请求消息和响应消息。(注意消息中的换行都是CRLF,不允许出现单独的CR或LF字符)
这两种消息的结构差不多:
1.一个起始行
2.一个或多个头域
3.一个头域结束标志的空行(CRLF)
4.可选的消息体
请求消息结构:
1.请求行
2.请求头
3.头域结束标志的空行
4.请求正文
响应消息结构:
1. 状态行
2. 响应头
3. 头域结束标志的空行
4. 响应正文
起始行
请求起始行格式:
【请求方法】【空格】【请求URI】【空格】【协议版本】
URI通常只要给出服务器根目录的相对目录即可,所以总是以“/”开头。
响应起始行格式:
【协议版本】【空格】【状态码】【空格】【服务器信息】
支持以下这几种方法:
GET、HEAD、