本文最后更新于 2025-01-14,文章内容可能已经过时。

🌐HTTP 协议

HTTP 是 Hyper Text Transfer Protocol(超文本传输协议)的缩写。HTTP 协议是用于从 WWW 服务器传输超文本到本地浏览器的传送协议。

HTTP 是一个应用层协议,由请求(request)和响应(response)构成,是一个标准的客户端服务器模型。HTTP 是一个无状态的协议。

🎈URL

URL 统一资源定位器,URI 统一资源标识符

用来表示互联网某处资源的地址。

https://www.cnblogs.com/carmi/index.php?…………
协议://域名:端口/路径?查询内容

🎈MIME 类型

MIME 类型称为多用途互联网邮件扩展,它是一个互联网标准,在 1992 年最早应用于电子邮件系统,但后来也应用到浏览器。服务器会将它们发送的多媒体数据的类型告诉浏览器,而通知手段就是说明该多媒体数据的 MIME 类型,从而让浏览器知道接收到的信息哪些是 MP3 文件,哪些是 MP4 文件等等。服务器将 MIME 标志符放入传送的数据中来告诉浏览器使用哪种插件读取相关文件。

💡常见的几种 MIME 类型:

具体可以查询:MIME 类型 | 菜鸟教程

类型 文件扩展名
image/gif .gif
image/jpeg .jpeg, .jpg
image/png .png
text/plain .txt
audio/x-mpeg .mp3
video/mp4 .mp4

🎈HTTP 协议工作流程

客户端与服务器发起连接 ---> 客户端开始发起请求 ---> 服务器解析,响应数据 ---> 客户端接收数据 ---> 释放资源

💡客户端连接到 Web 服务器

一个 HTTP 客户端,通常是浏览器,与 Web 服务器的 HTTP 端口(默认为 80)建立一个 TCP 套接字连接。例如,http://www.baidu.com。

💡发送 HTTP 请求 (request)

通过 TCP 套接字,客户端向 Web 服务器发送一个文本的请求报文,一个请求报文由请求行、请求头部、空行和请求数据 4 部分组成。

💡服务器接受请求并返回 HTTP 响应

Web 服务器解析请求,定位请求资源。服务器将资源复本写到 TCP 套接字,由客户端读取。一个响应由状态行、响应头部、空行和响应数据 4 部分组成。

💡释放连接 TCP 连接

若 connection 模式为 close,则服务器主动关闭 TCP 连接,客户端被动关闭连接,释放 TCP 连接; 若 connection 模式为 keepalive,则该连接会保持一段时间,在该时间内可以继续接收请求;

💡客户端浏览器解析 HTML 内容

客户端浏览器首先解析状态行,查看表明请求是否成功的状态代码。然后解析每一个响应头,响应头告知以下为若干字节的 HTML 文档和文档的字符集。客户端浏览器读取响应数据 HTML,根据 HTML 的语法对其进行格式化,并在浏览器窗口中显示。

🎈Cookie

Cookie 在远程浏览器端存储数据并以此跟踪和识别用户的机制。从实现上说,Cookie 是存储在客户端上的一小段数据,浏览器(即客户端)通过 HTTP 协议和服务器端进行 Cookie 交互。

🎈Session

方便服务器去区分不同用户的身份信息

session 在网络应用中称为「会话控制」,是服务器为了保存用户状态而创建的一个特殊的对象。简而言之,session 就是一个对象,用于存储信息。

🎈Cookie 与 Session 的区别

特点 优点 缺点
Cookie 存储在客户端;请求自动携带 cookie;存储大小 4KB 兼容性好,因为是比较老的技术;很容易实现,因为 cookie 会自动携带和存储 需要单独解决跨域携带问题,比如多台服务器如何共享 cookie;会遭受 CSRF 攻击;存储在客户端,不够安全
Session 存储在服务端;存储大小无限制 查询速度快,因为是个会话,相当于是在内存中操作;结合 cookie 后很容易实现鉴权;安全,因为存储在服务端 耗费服务器资源,因为每个客户端都会创建 session;占据存储空间,session 相当于存储了一个完整的用户信息
token 体积很小;自由操作存储在哪里 安全,因为 token 一般只有用户 id,就算被截取了也没什么用;无需消耗服务器内存资源,它相当于只存了用户 id,session 相当于存储了用户的所有信息;跨域处理较为方便,比如多台服务器之间可以共用一个 token 查询速度慢,因为 token 只存了用户 id,每次需要去查询数据库。

📤Request 请求数据包

举个🌰

请求数据包由请求行、请求头、请求体组成

无标题.png

🎈请求行

请求行由请求方法、请求 URL 和 HTTP 协议版本组成,他们之间用空格隔开

请求方法最常用的就是 GET 和 POST

  • GET:检索 URL 中标识资源的一个简单请求

  • POST:服务器接受被写入客户端输出流中的数据的请求

💡GET 和 POST 的区别

在传输上,GET 和 POST 方法没有实质区别,只是报文格式不同。

🎈常见请求头组成

Host: 127.0.0.1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:132.0) Gecko/20100101 Firefox/132.0
Referer: http://127.0.0.1/DVWA-master/vulnerabilities/sqli/?id=1&Submit=Submit
Cookie: PHPSESSID=r02fvd9soe5tpadufa13sr6hn7; security=low
Content-Length: 18
Content-Type: application/x-www-form-urlencoded
X-Forwarded-For:1.1.1.1

📩Response 响应数据包

响应也是由三个部分组成分别是状态行,响应头,响应正文

🎈状态行

状态行由 HTTP 协议版本、状态码、状态描述,之间也是以空格划分

状态码分类

# 状态代码由三位数字组成,第一个数字定义了响应的类别,且有五种可能取值。
1xx:指示信息--表示请求已接收,继续处理
2xx:成功--表示请求已被成功接收、理解、接受
3xx:重定向--要完成请求必须进行更进一步的操作
4xx:客户端错误--请求有语法错误或请求无法实现
5xx:服务器端错误--服务器未能实现合法的请求

201、204
200	正常响应
400	请求方式有问题,服务器不理解,资源不存在
403	请求被拒绝、权限不足
404	请求方式有问题
500	服务器出错
503	服务器不能正常处理客户端的请求
4xx客户端
5xx服务端

# 一些常见的状态码:
200 OK 最常见的就是成功响应状态码200了, 这表明该请求被成功地完成,所请求的资源发送回客户端 
301 Found 重定向,打开博客园首页http://cnblogs.com新的URL会在response 中的Location中返回
304 Not Modified 代表上次的文档已经被缓存了,如果你不想使用本地缓存可以用Ctrl+F5 强制刷新页面 
400 Bad Request 客户端请求与语法错误,不能被服务器所理解 
403 Forbidden 服务器收到请求,但是拒绝提供服务 		xx.com/admin
404 Not Found 请求资源不存在(输错了URL) 比如在IE中输入一个错误的URL, http://www.cnblogs.com/tesdf.aspx 
500 Internal Server Error 服务器发生了不可预期的错误 
503 Server Unavailable 服务器当前不能处理客户端的请求,一段时间后可能恢复正常

🎈响应头

与请求头类似。

🎈HTTP 和 HTTPS 的区别

HTTPS协议握手阶段比较费时,对网站的响应速度有影响,影响用户体验。
HTTPS连接服务器端资源占用高很多,支持访客多的网站需要投入更大的成本。
HTTPS连接缓存不如HTTP高效,流量成本高。
SSL证书通常需要绑定IP,不能在同一IP上绑定多个域名。
HTTP和HTTPS使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
HTTP是超文本传输协议,信息是明文传输,HTTPS则是具有安全性的ssl/tls加密传输协议。
SSL证书需要购买申请,功能越强大的证书费用越高。

🔗DNS 协议

🎈域名

域名(英语:Domain Name),又称网域,是由一串用点分隔的名字组成的 Internet 上某一台计算机或计算机组的名称,用于在数据传输时对计算机的定位标识。

尽管 IP 地址能够唯一地标记网络上的计算机,但 IP 地址是一长串数字,不直观,而且用户记忆十分不方便,于是人们又发明了另一套字符型的地址方案,即所谓的域名地址。IP 地址和域名是一一对应的,这份域名地址的信息存放在一个叫域名服务器 (DNS,Domain name server) 的主机内,使用者只需了解易记的域名地址,其对应转换工作就留给了域名服务器。域名服务器就是提供 IP 地址和域名之间的转换服务的服务器。

🎈DNS

域名系统(Domain Name System,缩写:DNS)是互联网的一项服务。它作为将域名和 IP 地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。DNS 使用 TCP 和 UDP 端口 53。当前,对于每一级域名长度的限制是 63 个字符,域名总长度则不能超过 253 个字符。DNS 协议是用来将域名转换为 IP 地址(也可以将 IP 地址转换为相应的域名地址)。

常见的 DNS 服务器:

  • 114.114.114.114(国内运营商通用)

  • 8.8.8.8(谷歌)

  • 218.85.157.99(福州电信)

🎈Hosts

Hosts 是一个没有扩展名的系统文件,可以用记事本等工具打开,其作用就是将一些常用的网址域名与其对应的 IP 地址建立一个关联「数据库」,当用户在浏览器中输入一个需要登录的网址时,系统会首先自动从 Hosts 文件中寻找对应的 IP 地址,一旦找到,系统会立即打开对应网页,如果没有找到,则系统会再将网址提交 DNS 域名解析服务器进行 IP 地址的解析。

需要注意的是,Hosts 文件配置的映射是静态的,如果网络上的计算机更改了请及时更新 IP 地址,否则将不能访问。

一般位于电脑的 C:\Windows\System32\drivers\etc 目录下。

🎈CDN

CDN 的全称是 Content Delivery Network,即内容分发网络。CDN 是构建在现有网络基础之上的智能虚拟网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。CDN 的关键技术主要有内容存储和分发技术。

🧸参考文献

http 请求报文包含三个部分(请求行 + 请求头 + 请求体) - 祥 SHAO - 博客园

通俗易懂。HTTP 请求行、请求头、请求体、响应行、响应头、响应体详解 -CSDN 博客

一文彻底搞清 session、cookie、token 的区别 - 知乎

彻底了解 Cookie 和 Session 的区别(面试)_session 和 cookie 的区别 -CSDN 博客