本文转载自:http://bbs.linuxtone.org/thread-9153-1-1.html
1.简介
超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。
a.所有的WWW文件都必须遵守这个标准。
b.http一般是基于tcp的,但只要能保证是可靠的传输,http可以基于其他协议。
c.目前版本是http1.1。http1.1具有持续连接的功能;http1.1允许客户端可以选择要求从服务器下载压缩内容(gzip)。
2.http请求流程
HTTP是一个客户端和服务器端请求和应答的标准,如下图所示:
a.客户端向服务端发起连接(tcp);
b.建立连接后客户端向服务端发送http请求;
c.服务器对客服端的http请求进行处理,并返回相关内容;
d.可以继续进行第2次请求、响应。(也可以连续发送请求,http持续连接功能)
f.最后服务端关闭连接。
——————————————————————————————————————————
3.http消息
http消息包括请求消息和响应消息,格式:开始行+消息报头(可选)+空行+消息正文(可选)
1)http请求消息由3部分组成:请求行、消息报头、请求正文。一个典型的请求消息如下:
GET /test.html HTTP/1.1
Accept: text/html
Cache-Control: no-cache
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US)
常用请求方法:GET(浏览器输入网址就是用GET方法);POST(一般用在表单提交数据时);HEAD(与GET同,不过只请求消息报头,不会返回响应正文。通常用来测试是否可以访问,是否有更新)
2)http响应消息:状态行,消息报头、响应正文(资源内容),一个典型的响应消息如下所示:
HTTP/1.1 200 OK
Date: Sun, 12 Dec 2010 18:09:04 GMT
Server: BWS/1.0
Content-Length: 6222
Content-Type: text/html;charset=gb2312
Cache-Control: private
Expires: Sun, 12 Dec 2010 18:09:04 GMT
-
3)返回状态及常见的状态码
1xx:指示信息–表示请求已经接收,继续处理
2xx:成功–表示请求已经被成功接收、理解、接受
3xx:重定向–表示要完成请求必须更进一步的操作
4xx:客户端错误–表示请求的语法有错误或者请求无法实现
5xx:服务端错误–表示服务器未能实现合法的请求
常见的状态码:
200 OK 表示客户端请求成功。
400 Bad Request 由于客户端请求有语法错误,不能被服务器所理解
401 Unauthorized 请求未经授权
403 Forbidden 服务器收到请求,但是拒绝提供服务,服务器通常会在相应正文中给出不提供服务的原因
404 Not Found 请求资源不存在,例如输入错误的URL
500 Internal Server Error 服务器发生不可预期的错误,导致无法完成客服端的请求
503 Service Unavailable 服务器当前不能够处理客户端请求,在一段时间之后,服务器可能会恢复正常
-
4)消息报头
a.通用报头域:
Cache-Control头域:Cache-Control指定请求和响应遵循的缓存机制。在请求消息或响应消中设置 Cache-Control并不会修改另一个消息处理过程中的缓存处理过程。请求时的缓存指令no-
cache、no-store、max-age、 max-stale、min-fresh、only-if-cached,响应消息中的指令包括public、private、no-cache、no- store、no-transform、must-revalidate、proxy-
revalidate、max-age。
Date头域 :Date头域表示消息产生的日期和时间,可用于http请求和响应中,所有的响应都包含Date头域,但只有包括请求正文的请求才有Date头域。
pragma头域 :Pragma头域用来包含实现特定的指令,最常用的是Pragma:no-cache
b.请求报头域:
Accept: text/html
Accept-Encoding: gzip
Accept-Charset:gb2312
Authorization:
Host: www.yunhaozou.org
User-Agent: 操作系统版本/浏览器版本/其他信息
c.响应报头:
Location: 重定向到一个新的位置
Server:包含了服务器用来处理请求的软件信息,与User-Agent对应
WWW-Authenticate:被包含在401响应消息中,与Authorization对应
d.实体报头:实体报头(实体正文的元信息)+实体正文(请求正文、响应正文)
Conten-Encoding:gzip
Content-Language:
Content-Length:
Last-Modified:
——————————————————————————————————————————
4.模拟http请求实验
打开“运行”->输入“cmd”->输入“telnet www.163.com 80”->回车->“Ctrl+]”打开本地回显->回车->输入“HEAD /index.html HTTP/1.1”->回车->输入“HOST: www.163.com”->回
车->回车
HEAD /index.html HTTP/1.1
HOST: www.163.com
-
HTTP/1.1 200 OK
Server: nginx
Content-Type: text/html; charset=GBK
Transfer-Encoding: chunked
Vary: Accept-Encoding
Expires: Sun, 12 Dec 2010 18:33:12 GMT
Cache-Control: max-age=120
X-Via: 1.1 zb71:8103 (Cdn Cache Server V2.0), 1.1 jxq205:8102 (Cdn Cache ServerV2.0)
Connection: keep-alive
Date: Sun, 12 Dec 2010 18:31:13 GMT
——————————————————————————————————————————
5.对4实验中“Cache-Control: max-age=120”的理解
Cache-Control: max-age=120表示浏览器将会把这个http请求的响应的内容写入临时目录做cache,并且保持时间为120秒。
1)浏览器第一访问http://www.163.com/index.html时
a.首先查询临时文件目录发现无cache存储
b.发出http请求到163 WEB服务器
c.163 WEB服务器响应http请求(其中设定Cache-Control: max-age=120)
d.浏览器收到响应将资源呈现给用户,并在临时文件目录以”http://www.163.com/index.html”为key缓存这个响应
2)再次访问http://www.163.com/index.html时
a.查询临时文件目录发现存在cache存储
b.检查保鲜期max-age
c.若还未过期,则直接读取之,响应给用户
d.若已经过期,则发请求到web server
——————————————————————————————————————————
6.从浏览器输入http://yunhaozou.org/显示网页的过程分析
(参考文档http://www.cnblogs.com/wenanry/archive/2010/02/25/1673368.html)
1)浏览器输入http://yunhaozou.org/
2)浏览器查找域名对应的IP
a.从浏览器缓存查找(浏览器会缓存DNS记录一段时间,2分钟-30分钟不等)
b.从系统缓存查找(浏览器进行一个系统调用获得系统缓存中的记录,windows里是gethostbyname)
c.从路由器缓存里查找
d.从ISP DNS缓存中查找
e.递归搜索(ISP服务器从根域名进行递归搜索,直到找到域名对应的IP)
3)浏览器给WEB服务器发送一个http请求
4)服务器处理请求(生成html)
5)服务器发回一个HTML响应
6)浏览器开始显示HTML
7)浏览器发送获取嵌入在HTML中的对象(如图片/CSS/JS等)。