一、HTTP 协议概述


HTTP协议历史与标准

  - HTTP/1.0:  1996年制定,支持多种请求方法,支持多媒体对象,得到广泛应用

  - HTTP/1.0+: 支持持久连接、虚拟主机、代理连接等新特性,成为非官方的事实标准

  - HTTP/1.1:  1999年定制,校正HTTP中的设计缺陷,性能优化,删除一些不好的特性

  - HTTP-NG(或者HTTP/2.0):关注HTTP协议的性能优化以及更强大的服务逻辑远程执行框架,研究工作仍在进行中


请求与响应流程

HTTP之1 HTTP协议(HTTP协议概述、HTTP消息、缓存控制相关头部、Cookie相关头部)_第1张图片

  - Message,消息/报文,是在HTTP客户端与服务器间传递的数据块

  - HTTP协议规定,消息必须符合特定的格式才能被彼此理解。

  - Request Message: 客户端向服务器发送的请求消息

  - Response Message: 服务器端根据客户端的请求消息,返回给客户端的响应消息

HTTP之1 HTTP协议(HTTP协议概述、HTTP消息、缓存控制相关头部、Cookie相关头部)_第2张图片


二、HTTP消息


HTTP消息结构概述

  - HTTP 消息是简单的格式化数据块

  - 每个消息都由三部分组成

      - Start Line: 消息起始行,必需,消息基本描述信息

      - Header: 消息头部/报头,可能有0-N个,消息详细属性

      - Body: 消息主体,可选,包含数据的主体

  - 起始行和消息头是纯ASCII字符,每行以CRLF结束

  - 消息主体是一个可选的数据块,其中的数据可以为空,或者是字符数据(如HTML、CSS、JavaScript等字符数据),或者二进制数据(如图片、音频、视频等字节数据)


请求消息结构

  - 客户端发起的一个请求消息应符合如下格式要求

HTTP之1 HTTP协议(HTTP协议概述、HTTP消息、缓存控制相关头部、Cookie相关头部)_第3张图片

  - 请求行:请求方法 空格 请求URL 空格 协议版本CRLF

  - 请求头部:可能包含0-N个请求头(名/值对)CRLF

  - 一个空白行CRLF

  - 请求主体:可选,提交给服务器的请求数据


请求行与请求方法

  - 请求消息请求服务器对资源进行一些操作

  - 请求消息的起始行称为"请求行",包含如下三部分:

wKiom1cDV1XBLcTIAAAxwIS78_4285.png

  - 请求方法包括如下几种


请求头

  - 请求头可用于描述请求本身、客户端、请求体的特征

  - 请求头可以分为如下四种:

      - 通用头部:在请求消息或响应消息中都可以使用

wKioL1cDWQzjgilZAAA4oq5OJoY753.png

      - 请求专用头部:只能出现在请求消息中

wKiom1cDWQzBI4E9AABxBHNo4nw882.png

      - 实体头部:描述消息主体特征

wKioL1cDWcrwJG20AABe1EeoQbg393.png      - 扩展头部: 自定义的头部


请求主体

  - 请求主体中保存着客户端提交给服务器,需要服务器加以处理(POST)或者保存(PUT)的数据

  - 请求主体中可能包含字符数据,也可能包含字节数据


响应消息结构

  - 服务器发返回给客户端的一个响应消息应符合如下格式要求:

HTTP之1 HTTP协议(HTTP协议概述、HTTP消息、缓存控制相关头部、Cookie相关头部)_第4张图片

  - 响应行:协议版本 空格 状态码 空格 原因短语CRLF

  - 响应头部:可能包含0-N个响应头CRLF

  - 一个空白行CRLF

  - 响应主体: 可选,返回给客户端的响应数据,可能是字符数据,也可能是字节数据


响应状态行与响应状态码

  - 响应消息是服务器返回给客户端的数据块

  - 响应消息的起始行称为"响应行",包含如下三部分:

wKiom1cDWu2D2-HrAAAvTXMdxwM643.png

HTTP之1 HTTP协议(HTTP协议概述、HTTP消息、缓存控制相关头部、Cookie相关头部)_第5张图片HTTP之1 HTTP协议(HTTP协议概述、HTTP消息、缓存控制相关头部、Cookie相关头部)_第6张图片



响应头

  - 响应头可用于描述响应本身、服务器、响应主体的特征。

  - 响应头部分为如下四种:

      - 通用头部: 在请求消息或响应消息中都可以使用

wKioL1cDXQvhMfyqAAA5LzggnoU278.png

      - 响应专用头部: 只能出现在响应消息中

wKiom1cDXHexOiwIAAAYQxT1Zf0991.png

      - 实体头部:描述消息主体特征

wKiom1cDXIvjFZciAABvmhcynok405.png      - 扩展头部: 自定义的头部



响应主体

  - 响应主体中包含着服务器返回给客户端的数据主体(GET/POST)

  - 根据请求URL的不同,响应主体中可能是字符数据(如HTML、CSS、JavaScript、JSON等字符),或者字节数据(图片、音频、视频等各种字节数据)



内容类型与常用内容类型

  - 实体头部中的Content-Type头可用于指定消息主体中数据的内容类型(MIME类型)

  - 常见的MIME类型:

HTTP之1 HTTP协议(HTTP协议概述、HTTP消息、缓存控制相关头部、Cookie相关头部)_第7张图片



三、缓存控制相关头部


缓存工作原理

  - 客户端可以自动保存已经访问过的文档的副本,这些副本就称为"文档缓存"

  - 当客户端再次发送针对同一个URL的请求时,如果本地有"已缓存的副本",就可以直接从本地存储设备而不是远程服务器提取该文档了

  - 数据缓存有下列优点:

      - 减少了冗余的数据传输,节省客户端流量费用

      - 缓解服务器贷款瓶颈的问题,服务器可以节省出更多的带宽

      - 降低了对服务器的资源消耗和运行要求

      - 降低了由于远距离儿造成的加载延时 

  - 缓存能否命中的完整流程:

HTTP之1 HTTP协议(HTTP协议概述、HTTP消息、缓存控制相关头部、Cookie相关头部)_第8张图片


Cache-Control头

  - Cache-Control:max-age头部表示从服务器将文档传来之时起,可以认为此文档处于新鲜状态的秒数

wKiom1cDYe7TG1b3AAAs0ICZJsU748.png

  - 服务器可以请求客户端不要缓存文档,或者将最大使用期设置为零,从而在每次访问的时候都进行刷新

wKiom1cDYgDT9TVDAAAmrzE3Dow886.png

  - 客户端在事先没有跟原始服务器进行再验证的情况下,不能提供对应数据的陈旧副本。但缓存仍然可以提供新鲜的副本

wKioL1cDYrzhXPy3AAApETUlZNE407.png


Expires头

  - Expires头部指定缓存的过期时间。HTTP设计者认为,由于很多服务器的时钟都不同步,所以推荐最好用剩余秒数来代替过期的绝对时间

wKiom1cDY2fTJ6VpAAA3x_skF3A173.png

  - 若希望客户端不要缓存资源,可以将过期时间设置为一个过去的时间,如:

 HTTP之1 HTTP协议(HTTP协议概述、HTTP消息、缓存控制相关头部、Cookie相关头部)_第9张图片


控制HTTP头部方法

  - 可以修改Web服务器的配置文件,设置默认响应头部:

HTTP之1 HTTP协议(HTTP协议概述、HTTP消息、缓存控制相关头部、Cookie相关头部)_第10张图片  - 还可以配置每个HTML文件的HTTP-EQUIV标签控制缓存:

HTTP之1 HTTP协议(HTTP协议概述、HTTP消息、缓存控制相关头部、Cookie相关头部)_第11张图片  - 除了上述两种方法,还可以在服务器端执行编程语言(如JSP、PHP、ASPX等)

wKiom1cDZ2aw7UWHAABYyjjPDGY422.pngwKioL1cDaCKQbLBFAABfRWW3yUU413.pngwKioL1cDaDSQJkVIAABjiCIerFc366.pngwKioL1cDaEbjskAyAACrXn8OeAw943.png


四、Cookie相关头部


Cookie工作原理

HTTP之1 HTTP协议(HTTP协议概述、HTTP消息、缓存控制相关头部、Cookie相关头部)_第12张图片


总结:本章内容主要介绍了 HTTP协议(HTTP协议概述、HTTP消息、缓存控制相关头部、Cookie相关头部)