文章目录
一、HTTP协议
应⽤层协议是我们自己定义的. 但实际上,有非常多现成的有非常好用的应用层协议供我们直接参考使用. HTTP(超⽂本传输协议)就是其中之⼀。
- HTTP(HyperText Transfer Protocol,超⽂本传输协议)是⼀个⾄关重要的协议。它定义了客⼾端(如浏览器)与服务器之间如何通信,以交换或传输超⽂本(如HTML⽂档)。
- HTTP协议是客⼾端与服务器之间通信的基础。客⼾端通过HTTP协议向服务器发送请求,服务器收到请求后处理并返回响应。HTTP协议是⼀个⽆连接、⽆状态的协议(应用层协议,不要与TCP/UDP搞混),即每次请求都需要建⽴新的连接,且服务器不会保存客⼾端的状态信息。
- HTTP属于应用层协议,是基于TCP协议的。
- HTTP协议自己做了序列和反序列化。
二、URL(统一资源定位符)
我们上网所有的行为,都是在做IO(数据交换 ),我们需要先确认我要的资源在哪台服务器(网络、IP),在什么路径下(系统路径),这就是URL ,IP + PORT负责帮我们进行通信。平时我们说的"网址 "就是URL

其中 ,带层次的文件路径中 '/ ':表示的是web根目录 ,并不是linux系统的根目录

- urlencode和urldecode
像 / ? : 等这样的字符, 已经被 url 当做特殊意义理解了. 因此这些字符不能随意出现.某个参数中需要带有这些特殊字符, 就必须先对特殊字符进⾏转义.
转义的规则 :将需要转码的字符转为16进制,然后从右到左,取4位(不⾜4位直接处理),每2位做⼀位,前⾯加上%,编码成%XY格式
例如:

三、HTTP协议请求与响应格式
HTTP请求

- ⾸⾏: [方法] + [url] + [版本]
- 请求报头Header: 请求的属性, 冒号分割的键值对;每组属性之间使用 \r\n 分隔;遇到空行表示 Header部分结束
- 请求正文Body: 空行后面的内容都是Body. Body允许为空字符串. 如果Body存在, 则在Header中会有⼀个Content-Length属性来标识Body的长度;

常用请求头属性

HTTP响应

- 首行: [版本号] + [状态码] + [状态码解释]
- 响应报头Header: 请求的属性, 冒号分割的键值对;每组属性之间使⽤\r\n分隔;遇到空行表示 Header部分结束
- 响应正文Body : 空行后面的内容都是Body. Body允许为空字符串. 如果Body存在, 则在Header中会有⼀个Content-Length属性来标识Body的⻓度; 如果服务器返回了⼀个html⻚⾯, 那么html页面内容就是在body中.

常用响应头属性

关于connection报头:
HTTP中的 Connection 字段是HTTP报⽂头的⼀部分,它主要⽤于控制和管理客⼾端与服务器之间
的连接状态。
核心作用:
管理持久连接 : Connection 字段还用于管理持久连接(也称为⻓连接)。持久连接允许客⼾端
和服务器在请求/响应完成后不立即关闭TCP连接,以便在同⼀个连接上发送多个请求和接收多个响
应。
持久连接(长连接):
- HTTP/1.1:在HTTP/1.1协议中,默认使用持久连接。当客户端和服务器都不明确指定关闭连接
时,连接将保持打开状态,以便后续的请求和响应可以复用同⼀个连接。 - HTTP/1.0:在HTTP/1.0协议中,默认连接是非持久的。如果希望在HTTP/1.0上实现持久连接,需
要在请求头中显式设置 Connection: keep-alive 。
格式:
- Connection : keep-alive :表示希望保持连接以复用TCP连接。
- Connection : close :表示请求/响应完成后,应该关闭TCP连接。
四、HTTP方法
- HTTP常见方法:

GET通常用来获取资源,POST用来传输参数
GET方法
- 用途:用于请求URL指定的资源。
- 示例 : GET /index.html HTTP/1.1
- 特性:指定资源经服务器端解析后返回响应内容。
GET也可向服务器提交参数,将参数拼接到URI/URL的后面,但存在数据泄露的风险传递参数的个数有上限。如/xxx?k=v&k=v...
POST方法
- 用途:⽤于传输实体的主体,通常⽤于提交表单数据。
- 示例 : POST /submit.cgi HTTP/1.1
- 特性:可以发送⼤量的数据给服务器,并且数据包含在请求体中。
POST方法通过正文(body)传递参数,参数个数没有上限。
注意:
但并不认为POST方法比GET方法好,只是POST传参比GET传参更私密
在表单中:

五、HTTP状态码

常见状态码及其含义与样例

HTTP状态码301 (永久重定向 )和 302 (临时重定向 )都依赖Location 选项。
详细说明:
HTTP状态码301(永久重定向):
- 当服务器返回HTTP 301状态码时,表⽰请求的资源已经被永久移动到新的位置。
- 在这种情况下,服务器会在响应中添加⼀个Location头部,用于指定资源的新位置。这个Location头部包含了新的URL地址,浏览器会自动重定向到该地址。
- 在HTTP响应中,可能会看到类似于以下的头部信息:
cpp
HTTP/1.1 301 Moved Permanently\r\n
Location: https://www.new-url.com\r\n
HTTP状态码302(临时重定向)
- 当服务器返回HTTP 302状态码时,表⽰请求的资源临时被移动到新的位置。
- 同样地,服务器也会在响应中添加⼀个Location头部来指定资源的新位置。浏览器会暂时使用新的URL进行后续的请求,但不会缓存这个重定向。
- 在HTTP响应中,可能会看到类似于以下的头部信息:
cpp
HTTP/1.1 302 Found\r\n
Location: https://www.new-url.com\r\n
总结:
无论是HTTP 301还是HTTP 302重定向,都需要依赖Location选项来指定资源的新位置。这个
Location选项是⼀个标准的HTTP响应头部,⽤于告诉浏览器应该将请求重定向到哪个新的URL地址。