这是我参与[第五届青训营]笔记创作活动的第5天
课堂笔记
本堂课重点内容
- HTTP协议简介
- HTTP协议的基本结构与发展历程
- 常见场景中的HTTP协议应用
- 在不同环境中发起HTTP请求
具体内容
HTTP协议
HTTP是用于获取 HTML 文档等资源的协议它是 Web 上任何数据交换的基础,它是一种客户端-服务器协议,这意味着请求由接收者(通常是 Web 浏览器)发起。 从获取的不同子文档(例如文本、布局描述、图像、视频、脚本等)重建完整的文档。
[HTTP 协议的基本定义]:
HTTP协议其实也就是超文本传输协议,可以承载多种题材。
eg: 处理页面所需要的html、css、js的内容以及我们跟server通信的API它也可以做一些承载的传输。
HTTP协议是应用层协议,基于TCP协议。
每一个HTTP请求其实都会分为请求和响应两部分:
客户端和服务器通过交换单个消息(而不是数据流)进行通信。 客户端(通常是 Web 浏览器)发送的消息称为 请求 ,服务器作为应答发送的消息称为 响应 。
语义比较直白简单,同时在设计上提供许扩展的能力。所以HTTP协议是一个简单可扩展的协议。
[HTTP 协议发展历程]:
最初只是为了解决通信的诉求,所以比较简单,称为单行协议。
发展过程中发现它过于单调,不满足我们的一些诉求,所以我们在1.0的版本上初步构建了一些可扩展性,丰富了协议能够承载的语义。
[协议分析]:
HTTP 请求和响应具有类似的结构,由以下部分组成:
- 描述要实现的请求或其成功或失败状态的起始行。此起始线始终是单行。
- 一组可选的 HTTP 标头,用于指定请求或描述消息中包含的正文。
- 已发送一个空行,指示请求的所有元信息。
- 包含与请求关联的数据(如 HTML 表单的内容)或与响应关联的文档的可选正文。正文的存在及其大小由起始行和 HTTP 标头指定。
HTTP 消息的起始行和 HTTP 标头统称为请求的头部,而其有效负载称为正文。
HTTP 请求是客户端发送的消息,用于在服务器上启动操作。它们的起始行包含三个元素:method、请求目标、http版本。
有一些请求的特点是安全的,另外的则是幂等。
安全:不会修改服务器的数据的方法=安全的方法。eg:GET、HEAD、OPTIONS
幂等:同样的请求被执行一次与连续执行多次的效果是一样的,服务器的状态也是一样的。
所有安全的方法都是幂等的。
:
来自请求的 HTTP 标头遵循与 HTTP 标头相同的基本结构:一个不区分大小写的字符串,后跟一个冒号 () 和一个结构取决于标头的值。整个标头(包括值)由一行组成,该行可能很长。
请求中可以出现许多不同的标头。它们可以分为几组:
- 常规标头(如
Via适用于整个邮件。 - 请求标头(eg:
User-Agent或 Accept)通过进一步指定请求(eg:Accept-Language)、提供上下文(eg:Referer)或有条件地限制请求(eg:If-None)来修改请求。
常用请求头:
响应的 HTTP 标头遵循与任何其他标头相同的结构:不区分大小写的字符串后跟冒号 () 和一个值,其结构取决于标头的类型。整个标题(包括其值)显示为一行。 响应中同样可以显示许多不同的标头。这些可以分为几组:
- 常规标头(如
Via适用于整个邮件。 - 响应标头(eg:
Vary和Accept-Ranges)提供有关不适合状态行的服务器的其他信息。
常用响应头:
[缓存]: 强缓存、协商缓存
[cookie]: 我们有时会利用cookie来帮忙携带用户信息。
[静态资源]: 静态资源在部署上的方案:缓存+CDN+文件名hash。
[HTTP身份验证]: http为访问控制和身份验证提供了一个通用框架: RFC 7235 定义了 HTTP 身份验证框架,服务器可以使用该框架来质询客户端请求,客户端可以使用它来提供身份验证信息。