一、HTTP 协议概述
HTTP协议历史与标准
- HTTP/1.0: 1996年制定,支持多种请求方法,支持多媒体对象,得到广泛应用
- HTTP/1.0+: 支持持久连接、虚拟主机、代理连接等新特性,成为非官方的事实标准
- HTTP/1.1: 1999年定制,校正HTTP中的设计缺陷,性能优化,删除一些不好的特性
- HTTP-NG(或者HTTP/2.0):关注HTTP协议的性能优化以及更强大的服务逻辑远程执行框架,研究工作仍在进行中
请求与响应流程
- Message,消息/报文,是在HTTP客户端与服务器间传递的数据块
- HTTP协议规定,消息必须符合特定的格式才能被彼此理解。
- Request Message: 客户端向服务器发送的请求消息
- Response Message: 服务器端根据客户端的请求消息,返回给客户端的响应消息
二、HTTP消息
HTTP消息结构概述
- HTTP 消息是简单的格式化数据块
- 每个消息都由三部分组成
- Start Line: 消息起始行,必需,消息基本描述信息
- Header: 消息头部/报头,可能有0-N个,消息详细属性
- Body: 消息主体,可选,包含数据的主体
- 起始行和消息头是纯ASCII字符,每行以CRLF结束
- 消息主体是一个可选的数据块,其中的数据可以为空,或者是字符数据(如HTML、CSS、JavaScript等字符数据),或者二进制数据(如图片、音频、视频等字节数据)
请求消息结构
- 客户端发起的一个请求消息应符合如下格式要求
- 请求行:请求方法 空格 请求URL 空格 协议版本CRLF
- 请求头部:可能包含0-N个请求头(名/值对)CRLF
- 一个空白行CRLF
- 请求主体:可选,提交给服务器的请求数据
请求行与请求方法
- 请求消息请求服务器对资源进行一些操作
- 请求消息的起始行称为"请求行",包含如下三部分:
- 请求方法包括如下几种
请求头
- 请求头可用于描述请求本身、客户端、请求体的特征
- 请求头可以分为如下四种:
- 通用头部:在请求消息或响应消息中都可以使用
- 请求专用头部:只能出现在请求消息中
- 实体头部:描述消息主体特征
请求主体
- 请求主体中保存着客户端提交给服务器,需要服务器加以处理(POST)或者保存(PUT)的数据
- 请求主体中可能包含字符数据,也可能包含字节数据
响应消息结构
- 服务器发返回给客户端的一个响应消息应符合如下格式要求:
- 响应行:协议版本 空格 状态码 空格 原因短语CRLF
- 响应头部:可能包含0-N个响应头CRLF
- 一个空白行CRLF
- 响应主体: 可选,返回给客户端的响应数据,可能是字符数据,也可能是字节数据
响应状态行与响应状态码
- 响应消息是服务器返回给客户端的数据块
- 响应消息的起始行称为"响应行",包含如下三部分:
响应头
- 响应头可用于描述响应本身、服务器、响应主体的特征。
- 响应头部分为如下四种:
- 通用头部: 在请求消息或响应消息中都可以使用
- 响应专用头部: 只能出现在响应消息中
- 实体头部:描述消息主体特征
响应主体
- 响应主体中包含着服务器返回给客户端的数据主体(GET/POST)
- 根据请求URL的不同,响应主体中可能是字符数据(如HTML、CSS、JavaScript、JSON等字符),或者字节数据(图片、音频、视频等各种字节数据)
内容类型与常用内容类型
- 实体头部中的Content-Type头可用于指定消息主体中数据的内容类型(MIME类型)
- 常见的MIME类型:
三、缓存控制相关头部
缓存工作原理
- 客户端可以自动保存已经访问过的文档的副本,这些副本就称为"文档缓存"
- 当客户端再次发送针对同一个URL的请求时,如果本地有"已缓存的副本",就可以直接从本地存储设备而不是远程服务器提取该文档了
- 数据缓存有下列优点:
- 减少了冗余的数据传输,节省客户端流量费用
- 缓解服务器贷款瓶颈的问题,服务器可以节省出更多的带宽
- 降低了对服务器的资源消耗和运行要求
- 降低了由于远距离儿造成的加载延时
- 缓存能否命中的完整流程:
Cache-Control头
- Cache-Control:max-age头部表示从服务器将文档传来之时起,可以认为此文档处于新鲜状态的秒数
- 服务器可以请求客户端不要缓存文档,或者将最大使用期设置为零,从而在每次访问的时候都进行刷新
- 客户端在事先没有跟原始服务器进行再验证的情况下,不能提供对应数据的陈旧副本。但缓存仍然可以提供新鲜的副本
Expires头
- Expires头部指定缓存的过期时间。HTTP设计者认为,由于很多服务器的时钟都不同步,所以推荐最好用剩余秒数来代替过期的绝对时间
- 若希望客户端不要缓存资源,可以将过期时间设置为一个过去的时间,如:
控制HTTP头部方法
- 可以修改Web服务器的配置文件,设置默认响应头部:
- 还可以配置每个HTML文件的HTTP-EQUIV标签控制缓存:
- 除了上述两种方法,还可以在服务器端执行编程语言(如JSP、PHP、ASPX等)
四、Cookie相关头部
Cookie工作原理
总结:本章内容主要介绍了 HTTP协议(HTTP协议概述、HTTP消息、缓存控制相关头部、Cookie相关头部)