http协议是一种无记忆的协议,其基本形式是请求,响应,外层借助tcp协议实现数据传输。
http协议包含请求报文和响应报文。
请求报文:
GET /search?hl=zh-CN&source=hp&q=domety&aq=f&oq= HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint,
application/msword, application/x-silverlight, application/x-shockwave-flash, */*
Referer: <a href="http://www.google.cn/">http://www.google.cn/</a>
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; TheWorld)
Host: <a href="http://www.google.cn">www.google.cn</a>
Connection: Keep-Alive
Cookie: PREF=ID=80a06da87be9ae3c:U=f7167333e2c3b714:NW=1:TM=1261551909:LM=1261551917:S=ybYcq2wpfefs4V9g;
NID=31=ojj8d-IygaEtSxLgaJmqSjVhCspkviJrB6omjamNrSm8lZhKy_yMfO2M4QMRKcH1g0iQv9u-2hfBW7bUFwVh7pGaRUb0RnHcJU37y-
FxlRugatx63JLv7CWMD6UB_O_r
请求行:请求方法+URL+协议版本(可以看到URL中包含了请求参数)
请求头:采取 【key:value】描述一些基本信息
可以看到Connection中设置为keep-alive 由此设置http存活时间:
传统http1.0采取典型的请求-响应模式,请求到来时建立连接,完成响应后立即关闭连接
由于连接的建立和关闭带来一定的开销,若客户端频繁的请求服务器,将带来性能下降。
而http1.1引入长连接方式,即服务器在完成响应后,不立即关闭tcp连接,而是等待一定时间
服务器设定这个等待时间内若没有继续收到请求,就关闭该连接,其本质是通过TCP长连接实现
http协议中没有连接一说,其存活时间基于外层的tcp长连接的存活时间
TCP中的keepalive表示心跳保持,当客户端和服务器正常的通过tcp传输数据时,会一直维持心跳,若keepalive时间内,服务器一直没有收到客户端的tcp数据,那么认为其连接已经断开,那么服务器及时释放资源
通过linux命令查看可以看到tcp——keepalive的时长是2小时
注意到请求头中包含一组:
Cookie: $Version=1; Skin=new;jsessionid=5F4771183629C9834F8382E23
Cookie: 其内容是一组存放在客户端的cookie信息,其中的sessionID则描述着与服务器连接的session信息,服务器由此确认客户端身份,避免重复验证。
对于POST 其请求体中将包含更多内容:主要是表单的键值对数据等,因此由于利用了请求体,post将能否传递更多的数据。
响应报文:
HTTP/1.1 200 OK
Date: Sat, 31 Dec 2005 23:59:59 GMT
Content-Type: text/html;charset=ISO-8859-1
Content-Length: 122
<html>
<head>
<title>Wrox Homepage</title>
</head>
<body>
<!-- body goes here -->
</body>
</html>
响应行:协议版本+响应码+简单摘要
响应头:由【key:value】键值对描述,描述着响应的基本信息
如Date响应时间 contentType:application/json 表示响应体的内容格式
空行
响应体:存放具体的响应内容
传统的http协议采取的是明文传输,传输过程很同意被截取查看以及修改。
因此https协议基于http协议在其外层套上ssl层,实现传输过程的加密,以及网站身份认证。
ssl协议:安全套接字协议,其通过对称加密,分对称加密,证书等技术实现安全传输和身份鉴别过程。