
HTTP 与 DNS 协议
🌐HTTP 协议
HTTP 是 Hyper Text Transfer Protocol(超文本传输协议)的缩写。HTTP 协议是用于从 WWW 服务器传输超文本到本地浏览器的传送协议。
HTTP 是一个应用层协议,由请求(request)和响应 (response) 构成,是一个标准的客户端服务器模型。HTTP 是一个无状态的协议。
组件 | 功能说明 | 安全关联 |
---|---|---|
URL/URI | 资源定位标识符:https://host:port/path?query#fragment | SQL 注入 /XSS 攻击入口点 |
MIME 类型 | 定义传输数据类型:Content-Type: text/html; charset=utf-8 | 文件上传漏洞检测关键 |
无状态特性 | 每次请求独立无关联 | 需 Cookie/Session 维持会话状态 |
🎈HTTP 协议工作流程
-
客户端与服务器发起连接
-
客户端开始发起请求
-
服务器解析,响应数据
-
客户端接收数据
-
释放资源
1. 客户端连接到Web服务器
一个HTTP客户端,通常是浏览器,与Web服务器的HTTP端口(默认为80)建立一个TCP套接字连接。例如,http://www.baidu.com。
2. 发送HTTP请求(request)
通过TCP套接字,客户端向Web服务器发送一个文本的请求报文,一个请求报文由请求行、请求头部、空行和请求数据4部分组成。
3. 服务器接受请求并返回HTTP响应
Web服务器解析请求,定位请求资源。服务器将资源复本写到TCP套接字,由客户端读取。一个响应由状态行、响应头部、空行和响应数据4部分组成。
4. 释放连接TCP连接
若connection 模式为close,则服务器主动关闭TCP连接,客户端被动关闭连接,释放TCP连接;若connection 模式为keepalive,则该连接会保持一段时间,在该时间内可以继续接收请求;
5. 客户端浏览器解析HTML内容
客户端浏览器首先解析状态行,查看表明请求是否成功的状态代码。然后解析每一个响应头,响应头告知以下为若干字节的HTML文档和文档的字符集。客户端浏览器读取响应数据HTML,根据HTML的语法对其进行格式化,并在浏览器窗口中显示。
🎈Cookie
Cookie 在远程浏览器端存储数据并以此跟踪和识别用户的机制。从实现上说,Cookie 是存储在客户端上的一小段数据,浏览器(即客户端)通过 HTTP 协议和服务器端进行 Cookie 交互。
🎈Session
方便服务器去区分不同用户的身份信息
session 在网络应用中称为「会话控制」,是服务器为了保存用户状态而创建的一个特殊的对象。简而言之,session 就是一个对象,用于存储信息。
🎈Cookie 与 Session 的区别
-
存储位置:Cookie 存储在浏览器 (客户端),Session 存储在服务端。
-
安全性:Cookie 安全性低。Session 安全性高。
-
服务器性能:假如用户量大的情况下 Session 会消耗更多的服务器资源。
-
信息的重要程度:Session 可存放或传输更重要的信息。
🎈Request 请求数据包
-
请求行
-
请求头
-
空行
-
请求体
💡请求行
请求方法、请求 URL、HTTP 版本,他们之间用空格划分
GET:检索 URL 中标识资源的一个简单请求
POST:服务器接受被写入客户端输出流中的数据的请求
PUT:服务器保存请求数据作为指定 URL 新内容的请求
💡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/1.1 200 OK
Server: nginx/1.15.11
Date: Sun, 17 Nov 2024 06:20:21 GMT
Content-Type: text/html;charset=gb2312
Connection: close
X-Powered-By: PHP/5.4.45
Pragma: no-cache
Cache-Control: no-cache, must-revalidate
Expires: Tue, 23 Jun 2009 12:00:00 GMT
Content-Length: 4244
<!DOCTYPE html>
<html lang="en-GB">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
💡状态行
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 的关键技术主要有内容存储和分发技术。