细说HTTP协议及其工作流程( 二 )


文章插图
 
 
图2-9 TCP/IP三次握手
4.客户端发送请求命令
第四步就是在连接建立之后 , 客户端发送HTTP请求到服务器端 , 与请求相关的信息都会包含在请求头和请求体中发送给服务器端 。
5.服务器端响应
服务器在收到请求之后 , 根据客户端的请求发送给客户端相应的信息 。相关的响应信息都会放在响应头和响应体中 。
6.关闭连接
服务器端在发送完响应之后 , 就会关闭连接 。如果客户端的请求的头信息中有Connection-alive , 那么服务器端在响应完这个请求之后不会关闭连接 , 直到该客户端的所有请求都响应完毕 , 才会关闭连接 , 这样大大节省了带宽和I/O资源 。
请求和响应
HTTP请求由两部分组成:HTTP消息头和HTTP消息体 。消息头告诉服务器该请求是做什么的 , 消息体告诉服务器怎么做 。比如访问一个页面 , 头信息可以到浏览器中的调试心去看 , 而消息体需要用户单击鼠标右键查看源码 , 那些HTML代码就是服务器返回给客户端的消息体 。
HTTP中的请求头由三部分组成:请求行、请求头和请求正文 , 如图2-10所示 。

细说HTTP协议及其工作流程

文章插图
 
 
1.请求行
请求的第一行是请求行 , 里面有请求方法、URL、协议版本等 。比如图2-10 , 请求的方法是GET , 请求的URL是/  , 协议版本是HTTP/1.1 。
常见的请求方式有GET和POST 。GET方式主要用于获取网络资源 , POST方式主要用于表单提交 。由于GET方式的参数是在地址栏中的 , 所以总是可见的 , 不是很安全 , 而且长度也有限制 。而POST方式的参数是封装成实体之后发送给服务器的 , 是不可见的 , 相对比较安全 , 用户的敏感信息一般采用POST方式提交 。
2.请求头
每个头域都由一个头域名、冒号和值域组成 。下面介绍一些常见的头域 。
(1)Connetion:表示是否需要持久连接 。如果服务器看到它的值为keep-alive , 或者请求协议使用的是HTTP/1.1(默认使用持久连接) , 同一个页面如果包含多个资源 , 则只会使用一个连接 , 如Connection:keep-alive 。如果设置了Connetion:close , 则每一个请求结束都会关闭连接 , 新的请求又会重新建立连接 。一个网页至少有几十个资源请求 , 这样很浪费带宽和时间 。
(2)Host:这个是必需的 , 表示请求的服务器地址是什么 , 是从URL中提取出来的 。比如http://www.baidu.com/的Host就是www.baidu.com 。这里是80端口 , 默认省略;如果是其他端口 , 比如http://www.baidu.com:8080 , 则Host是www.baidu.com:8080 。
(3)Accept:浏览器可以接受的媒体类型(MIME类型) , 如Accept:text/html代表浏览器可以接受HTML文档 。“*”代表接受任何类型 , 如Accept:*/* 。
(4)Accept-Encoding:浏览器申明自己接受的编码方法 , 通常指定压缩方法、是否支持压缩、支持什么格式的压缩 。
3.请求正文
也叫请求数据 , 在使用POST请求提交表单数据的时候 , 这些表单数据就会被放在HTTP请求的请求正文中 , 以加密的形式向服务器传输 。




推荐阅读