第二章:应用层
应用层协议定义了:
- 交换的报文类型,例如请求报文和响应报文。
- 各种报文类型的语法,如报文中的各个字段及这些字段是如何描述的。
- 字段的语义,即这些字段中包含的信息的含义。
- 一个进程何时以及如何发送报文,对报文进行响应的规则。
HTTP
使用TCP
非持续连接和持续连接
举例:一个网页有10个图片文件
非持续连接:建立10个TCP连接分别传递这10个图片
持续连接:建立1个TCP连接传递这10个图片
HTTP的默认模式:带流水线的持续连接
HTTP
HTTP 请求报文
第1行:请求行(request line),包括 3 个字段:方法字段、URL字段、HTTP版本字段。
方法字段:GET POST HEAD PUT DELETE
- HEAD 方法:类似于GET方法,但是服务器不会返回对象,返回一个HTTP报文(常用于调试)
- PUT 方法:允许用户上传对象到服务器
- DELETE 方法:允许用户删除服务器上的对象
第2行及以后:首部行:可以包含很多信息
本例中:
- Host:指明对象所在的主机
- Connection:close:使用非持续连接(要求服务器发送完被请求的对象后关闭这条连接)
- User-agent:指明用户代理(用户用的浏览器类型)
- Accept-language:想得到的对象的语言版本
使用POST方法时,下图中“实体主体”区域就是用户输入的表单中的内容
HTTP 响应报文
三部分:1个初始状态行(status line),6个首部行(header line),实体体(entity body)
其中状态行 = 协议版本 + 状态码 + 状态信息
常见的状态码
- 200 OK:请求成功,信息在返回的响应报文中
- 301 Moved Permanently:请求的对象已经被永久转移了,新的URL定义在响应报文的Location:首部行中。客户软件将自动获取新的URL
- 400 Bad Request:一个通用差错代码,指示该请求不能被服务器理解。
- 404 Not Found:被请求的文档不在服务器上。
- 505 HTTP Version Not Supported:服务器不支持请求报文使用的HTTP协议版本
cookie
服务器响应报文中包含 Set-cookie 能设置客户端的cookie
客户端中一旦有对应网站的cookie(不一定是这次set-cookie导致的,可能是之前的浏览导致的),则会在每一次请求报文中的首部行都包含对应的cookie
条件 GET
什么是条件GET:在 GET 请求报文中包含一个 “If-Modified-Since:" 首部行
用途:验证web cache中的对象副本是否是最新的
用法:用户向web cache发送正常的GET,web cache向源服务器发送条件GET
源服务器的响应报文:(注意没有修改时entity body为空,节省带宽)