目录
[3.1 协议为什么要有空行](#3.1 协议为什么要有空行)
[3.2 如何理解正文](#3.2 如何理解正文)
[3.3 请求方法](#3.3 请求方法)
[3.4 URL](#3.4 URL)
[3.4.1 url 中所带的参数](#3.4.1 url 中所带的参数)
[3.5 版本](#3.5 版本)
[3.6 状态码及其描述](#3.6 状态码及其描述)
[3.7 请求报头](#3.7 请求报头)
[3.8 请求方法](#3.8 请求方法)
[3.8.1 GET](#3.8.1 GET)
[3.8.2 POST](#3.8.2 POST)
[3.8.3 POST和GET区别](#3.8.3 POST和GET区别)
一、请求
二、应答

三、格式

3.1 协议为什么要有空行
区分报头和有效载荷
3.2 如何理解正文
人们上网行为无非就两种:等待信息和上传信息 正文的作用就是这个
3.3 请求方法

我们主要使用GET和POST
3.4 URL
统一资源定位符,就是我们说的网址
例

- 注意:/ 不一定是根目录,web根目录(代码) 任意一个目录(都可能)
3.4.1 url 中所带的参数
URL 中 /、?、: 等字符具有特殊含义,不能随意在参数中直接使用。若参数需包含这些特殊字符,必须先进行转义,转义规则如下:
- 将待转码的特殊字符转换为 16 进制形式。
- 对 16 进制结果,从右到左取 4 位(不足 4 位则直接处理)。
- 每 2 位作为一组,每组前加上 % 符号。
- 最终编码为 % XY 的格式(XY 为每组对应的 2 位 16 进制数)。
例如:

3.5 版本
HTTP有很多的版本 1.1 1.2 等 每个版本支持的功能都有所不同
3.6 状态码及其描述
注意:http 请求,必须要有应答报文,即使是错误的

3.6.1重定向状态码

重定向:
因为提供服务的一方,服务的地址发生变更,要求client更改访问位置,去新地址访问
永久和临时:
影不影响客户对地址的认识
301:永久重定向 : 网站换域名的时候,自动跳转到新域名,搜索引擎更新网站链接时使用
302 : 临时重定向 : 用户的登录(登录之后自动跳转到首页,访问首页必须要登录不影响客户对地址的认识)
原理

重定向报文不需要有效载荷
3.7 请求报头

content - Length : 有效载荷的长度
如何保证读到了一个完整的请求报头
读到空格
如果有正文,如何保证把正文部分一字不差的读取上来
content - Length
3.8 请求方法

上网的两种两种行为:
1、从服务器端获取内容
2、上传数据到服务器(表单)
以上的请求方法绝大部分使用的是GET 和 POST

浏览器获取数据,构建HTTP request 向服务器发起请求
3.8.1 GET
既可以获取信息,又可以上传信息
传参,通过url进行参数传递 ,参数传递给action(后端模块不是网页) ,之间通过?隔开
如何区别是获取信息还是上传信息
通过url是否存在& 和?
3.8.2 POST

3.8.3 POST和GET区别
GET可以获取静态资源
GET通过url传参
POST通过request body传参
四、cookie
http 是无状态的(不记录历史请求,和用户的行为),但是假设一个视频网站我们不保存它的历史请求,他没播放一个视频都需要登录一次无疑是十分麻烦的,所以HTTP为了保证能够对用户进行一定程度的转台保持功能,服务器+浏览器+HTTP(cookie + Seesion)
Version1

因为Cookie保存在浏览器中容易被人通过攻击浏览器获取个人信息和冒充,所以我们可以将它保存在服务器中如下
Version2

上述每一个用户认证通过之后,会形成session(中含有session_id) 在将session_id返回,形成cookie,再一次登录的时候通过寻找是否存在session_id完成认证