
HTTP 与 DNS 协议
本文最后更新于 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 请求数据包
举个🌰
请求数据包由请求行、请求头、请求体组成
🎈请求行
请求行由请求方法、请求 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 博客