HTTP允许Web服务器和浏览器通过网络发送并接收数据,是一种基于“request-response”,Http使用可靠的TCP连接,当前最新版本是HTTP/1.1,定义域RFC2616中,下载地址:
http://www.w3.org/Protocols/HTTP/1.1/
首先介绍一下请求和响应的基本格式
HTTP请求信息
HTTP请求一般包含三个部分,从上到下依次是:
1、第一行:请求方法 URI 协议/版本(例:GET /index.jsp HTTP/1.1)
2、几行header: 请求头信息(多行,例子:Connection: Keep-Alive)
3、请求体body: 请求体和请求头之间有一个空行,只能包含回车换行符(CRLF \n\r)
一个简单请求示例如下:
1. POST /login.actionHTTP/1.1
2. user-agent=Java/1.6.0_31
3. host=localhost:8080
4. accept=text/html,image/gif, image/jpeg, *; q=.2, */*; q=.2
5. connection=keep-alive
6.
7. username=xxx&password=xxx
注:注意上面请求头和请求体之间必须有一个空行(回车换行符CRLF),这样HTTP服务器才知道请求体从哪里开始。注意请求头中Content-Length: 25是请求体中字节byte数。
java示例:
1. HttpURLConnectionconn = (HttpURLConnection) new URL(url).openConnection();
2. conn.setRequestMethod("GET");
3. conn.setRequestProperty("user-agent","Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Trident/4.0)");
HTTP 响应信息
响应信息与请求信息类似,也包括三部分:
1、 协议 状态码 描述 (例: HTTP/1.1 200 OK)
2、 响应头信息
3、 响应体
一个响应示例如下:
1. HTTP/1.1 200 OK
2. Content-Type: text/html
3. Content-Length: xxx
4.
5. <html></html>
注:响应头与响应体之间也有一个空行,以表示响应体的开始。
下面我们介绍一下持久连接 Connection: Keep-Alive新特性
在1.1版本之前,当服务器将请求的资源返回后,就会断开与客户端浏览器的连接,此时网页上包含的其它资源,如图片等就会通过打开其它连接来下载。对系统来说,打开和关闭一个连接的开销是很大的,所以这样的操作既浪费资源也不搞笑。在1.1版本中,引入了持久连接的概念,当浏览器下载页面后,服务器并不会马上断开连接,而是等页面把所包含的资源都下载完毕后才断开连接,这样页面及页面所包含的所有资源都会通过一个连接来下载。1.1版本中会默认使用持久连接,也可以在请求头信息中手动指定,即设置请求头Connection:Keep-Alive。