🌐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. 客户端与服务器发起连接

  2. 客户端开始发起请求

  3. 服务器解析,响应数据

  4. 客户端接收数据

  5. 释放资源

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 的区别

  1. 存储位置:Cookie 存储在浏览器 (客户端),Session 存储在服务端。

  2. 安全性:Cookie 安全性低。Session 安全性高。

  3. 服务器性能:假如用户量大的情况下 Session 会消耗更多的服务器资源。

  4. 信息的重要程度:Session 可存放或传输更重要的信息。

🎈Request 请求数据包

  1. 请求行

  2. 请求头

  3. 空行

  4. 请求体

无标题.png

💡请求行

请求方法、请求 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 响应数据包

  1. 状态行

  2. 响应头

  3. 空行

  4. 响应数据

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 的关键技术主要有内容存储和分发技术。