一文学完《图解HTTP》(《图解 http 》)
csdh11 2025-03-17 17:01 1 浏览
作为一个专业的IT技术人,一个Web应用开发者,不了解网络基础和协议,怎么能行?本文是我阅读《图解HTTP》一书的读书笔记,希望对你有所帮助!
1 关于《图解HTTP》
目前国内讲解HTTP协议的书实在太少了,记忆中有两本被誉为经典的书《HTTP权威指南》与《TCP/IP详解,卷1》,但内容晦涩难懂,学习难度较大。其实,HTTP协议并不复杂,理解起来也不会花费太多学习成本,这本书的出现就及时缓解了该问题。对基础及核心部分的深入学习是成为一名专业技术人员的前提,以不变应万变才是立足之本。此外,这本书也是我在2016年度读书计划中的一本,它和《图解TCP/IP》一起作为计算机网络基础部分为我温故知新了一把,谢谢作者和译者,画了这么多图解让我们理解。
2 HTTP协议初探
各种协议与HTTP协议的关系
请求处理相应模型
HTTP协议规定,请求从客户端发出,最后服务端响应应该请求并返回。
请求报文:由请求方法、请求URI、协议版本、可选的请求首部字段和内容实体构成的。
响应报文:由协议版本、状态码、用以解释状态码的原因短语、可选的响应首部字段以及实体主体构成。
HTTP协议是一种无状态协议
HTTP协议对于发送过的请求或响应都不做持久化处理:协议本身并不保留之前一切的请求或响应报文的信息,这是为了更快地处理大量事务,确保协议的可伸缩性,而特意把HTTP协议设计成如此简单的。HTTP/1.1虽然是无状态协议,但为了实现期望的保持状态功能,于是引入Cookie技术。有了Cookie再用HTTP协议通信,就可以管理状态了。
Cookie根据服务器端发送的响应报文内的一个叫做Set-Cookie的首部字段信息,通知客户端保存Cookie。当下次客户端再往该服务器发送请求时,客户端自动在请求报文中加入Cookie值后发送出去。服务端发现客户端发送过来的Cookie后,会去检查究竟是从哪一个客户端发来的连接请求,然后对比服务器上的记录,最后得到之前的状态信息。
告知服务器意图的HTTP方法
(1)GET:获取资源
(2)POST:传输实体主体 → POST的主要目的并不是获取响应的主体内容
(3)PUT:传输文件 → 就像FTP协议的文件上传一样,要求在请求报文的主体中包含文件内容,然后保存到请求URI指定的位置
但是,鉴于HTTP/1.1的PUT方法自身不带验证机制,任何人都可以上传文件,所以存在安全性问题,因此一般的Web网站不使用该方法。
(4)HEAD:获得报文首部 → HEAD与GET一样,只是不返回报文主体部分,用于确认URI的有效性及资源更新的日期时间等等。
(5)DELETE:删除文件 → DELETE与PUT相反,DELETE按请求URI删除指定资源。
但是,HTTP/1.1的DELETE方法本身与PUT方法一样不带验证机制,所以一般的Web网站也不使用DELETE方法。
(6)OPTIONS:询问支持的方法 → 查询针对请求URI指定的资源所支持的方法(例如该资源支持GET、POST、PUT等)。
(7)TRACE:追踪路径 → 让Web服务器端将之前的请求通信还回给客户端的方法。(不常用,容易引发XST攻击)
(8)CONNECT:要求用隧道协议连接代理 → 要求在与代理服务器通信时建立隧道,实现用隧道协议进行TCP通信。主要使用SSL和TLS协议把通信内容加密后经过网络隧道传输。
CONNECT方法的格式:CONNECT 代理服务器名:端口号 HTTP版本
持久连接
在HTTP协议的初始版本中,每进行一次HTTP通信就要断开一次TCP连接。因此,每次的请求都会造成无谓的TCP连接建立与断开,增加通信量的开销。为了解决这个问题,HTTP/1.1想出了持久连接(也称为HTTP keep-alive),其特点是:只要任意一端没有明确提出断开连接,则保持TCP连接状态。
持久连接的好处在于减少了TCP连接的重复建立和断开所造成的额外开销,减轻了服务器的负载,也使得HTTP请求和响应能够更早地结束,这样Web页面的显示速度也就相应的提高了。在HTTP/1.1中,所有的连接默认都是持久连接。
3HTTP报文详解
用于HTTP协议交互的信息就被称为HTTP报文,请求段的叫做请求报文,响应端的叫做响应报文。HTTP报文本身是由多行(用CR+LF作换行符)数据构成的字符串文本。
HTTP报文结构
(1)HTTP报文大致可以分为报文首部和报文主体两块
(2)请求报文和响应报文的结构实例
部分内容的范围请求
通常下载一个大文件时如果遇到网络中断的情况,那就必须重头开始,因此为了解决上述问题,就需要一种可恢复的机制。所谓恢复就是指从之前下载的中断处恢复下载。要实现该功能需要制定下载的实体范围,这就叫范围请求(Range Request)。
对一份10000字节大小的资源,如果使用范围请求,可以只请求5001~10000字节内的资源。执行范围请求时,就会用到Range来指定资源的byte范围。
内容协商机制
内容协商机制就是指在客户端和服务端就响应的资源内容进行交涉,然后提供给客户端最为合适的资源。内容协商会议响应资源的语言、字符集、编码方式等作为判断的基准。
So,有哪些判断的基准呢?
Accept Accept-Charset
Accept-Encoding
Accept-Language
Content-Language
HTTP状态码
HTTP状态码负责表示客户端HTTP请求的返回结果、标记服务器端的处理是否正常、通知出现的错误等工作。借助状态码,用户可以知道服务器端是正常处理了请求,还是出现了错误。
(1)2XX 成功 → 表明请求被正常处理了,如200 OK,204 No Content,206 Partial Content
(2)3XX 重定向 → 表明浏览器需要执行某些特殊的处理以正确处理请求。如301 Moved Permanently(永久移动),302 Found(临时移动),303 See Other(资源的URI已更新,是否能临时按新的URI访问)、304 Not Modified(资源已找到,但未符合条件请求)、307 Temporary Redirect(临时重定向)
(3)4XX 客户端错误 → 表明客户端是发生错误的原因所在。如400 Bad Request(请求报文中存在语法错误),401 Unauthorized(认证失败或未认证)、403 Forbidden(不允许访问这个资源)、404 Not Found(服务器上没有请求的资源)。
(4)5XX 服务器错误 → 表明服务器本身发生错误。如500 Internal Server Error(服务器端在执行请求时发生了错误,也可能是Web应用存在的Bug或某些临时的故障),503 Service Unavailable(表明服务器暂时处于超负载或正在停机维护,无法处理请求)。
HTTP首部
HTTP/1.1规范定义了如下47种首部字段:
(1)通用首部字段
(2)请求首部字段
(3)响应首部字段
(4)实体首部字段
3 确保Web安全
HTTPS
在HTTP协议中有可能存在信息窃听或者身份伪装等安全问题,即使已经过加密处理的通信,也会被窥视到通信内容。例如:使用一些抓包软件如Packet Capture或Sniffer就可以抓取相同段上的通信。使用HTTPS(HTTP Secure)通信机制就可以有效地防止这些问题。
HTTP + 加密 + 认证 + 完整性保护 = HTTPS
HTTPS并非是应用层的一种新协议,只是HTTP通信接口部分用SSL(Secure Socket Layer)和TLS(Transport Layer Security)协议代替而已。通常情况下,HTTP直接和TCP通信,当使用SSL时,则演变成先和SSL通信,再由SSL和TCP通信了。简而言之,所谓HTTPS,其实就是身披SSL协议这层外壳的HTTP。
SSL是独立于HTTP的协议,所以不光是HTTP协议,其他运行在应用层的SMTP和Telnet等协议均可配合SSL协议使用。可以说,SSL是当今世界上应用最为广泛的网络安全技术。在采用了SSL之后,HTTP就拥有了HTTPS的加密、证书和完整性保护这些功能。
既然HTTPS安全可靠,那为何所有的Web网站不一直使用HTTPS?
一是因为与纯文本通信相比,加密通信会消耗更多的CPU以及内存资源。如果每次通信都加密,会消耗相当多的资源,平摊到一台计算机上时,能够处理的请求数量必定会随之减少。
二是购买证书的开销也很大,要进行HTTPS通信,证书是必不可少的,而使用的证书必须要向认证机构(CA)购买。通常,一年的授权费用需要600人民币左右。
所以,如果是非敏感信息一般都使用HTTP通信,只有在包含个人信息等敏感数据时,才会使用HTTPS加密通信。
Edison补充:建议所有to C的Web应用都使用HTTPS!
确认访问用户身份的认证
某些Web页面只想让特定的人浏览,或者干脆本人可见。为达到这个目标,必不可少的就是认证功能。
HTTP/1.1使用的认证方式如下:
(1)BASIC认证(基本认证) → 不够灵活,达不到多数Web网站期望的安全性等级(直接发送明文密码BASE64编码),因此它并不常用。
(2)DIGEST认证(摘要认证) → 采用质询响应方式,相比BASIC认证,密码泄露的可能性就降低了。
(3)SSL客户端认证 → 借助HTTPS的客户端证书完成认证,凭借客户端证书认证,服务器可确认访问是否来自已登录的客户端。
(4)FormBase认证(基于表单认证)
通常情况下,一种安全的保存方法是:先利用密码加盐(Salt)的方式增加额外信息,再使用散列(Hash)函数计算出散列值后保存。
4 Web的攻击技术
针对Web应用的攻击模式
(1)主动攻击:攻击者通过直接访问Web应用,把攻击代码传入的攻击模式。最具典型的攻击就是 SQL注入攻击和OS命令注入攻击。
(2)被动攻击:利用圈套策略执行攻击代码的攻击模式,在被动攻击过程中,攻击者不直接对目标Web应用访问发起攻击。
跨站脚本攻击(XSS)
跨站脚本攻击(Cross-Site Scripting,XSS)是指通过存在安全漏洞的Web网站注册用户的浏览器内运行非法的HTML标签或者JavaScript脚本进行攻击的一种攻击。
跨站脚本攻击可以造成以下影响:
(1)利用虚假输入表单骗取用户个人信息。
(2)利用脚本窃取用户的Cookie值,被害者在不知情的情况下,帮助攻击者发送恶意请求。
(3)显示伪造的文章或者图片。
SQL注入攻击
SQL注入(SQL Injection)是指针对Web应用使用的数据库,通过运行非法的SQL而产生的攻击。该安全隐患有可能引起极大地威胁,有时会直接导致个人信息及机密信息的泄露。
SQL注入攻击有可能造成以下影响:
(1)非法查看或篡改数据库内的数据。
(2)规避认证。
(3)执行和数据库服务器业务关联的程序等。
OS命令注入攻击
OS命令注入攻击是指通过Web应用,执行非法的操作系统命令达到攻击的目的。只要在能调用Shell函数的地方就有存在被攻击的风险。
HTTP首部(Header)注入攻击
HTTP首部注入攻击是指攻击者通过在响应首部字段内插入换行,添加任意响应首部或主题的一种攻击。属于被动攻击模式。
因会话管理疏忽引发的安全漏洞
(1)会话劫持:攻击者通过某种手段拿到了用户的会话ID,并非法使用此会话ID伪装成用户,达到攻击的目的。
(2)会话固定攻击:强制用户使用攻击者指定的会话ID,属于被动攻击。
(3)跨站点请求伪造(Cross-Site Request Forgeries,CSRF):攻击者通过设置好的陷阱,强制对已完成认证的用户进行非预期的个人信息或设定信息等某些状态更新,属于被动攻击。
CSRF有可能造成以下影响:
1、利用已通过认证的用户权限更新设定信息等;
2、利用已通过认证的用户权限购买商品;
3、利用已通过认证的用户权限在留言板上发表言论等;
DoS攻击
DoS攻击(Denial of Service attack)是一种让运行中的服务呈停止状态的攻击。有时也叫作服务停止或拒绝服务攻击。主要有以下两种DoS攻击方式:
(1)集中利用访问请求造成资源过载,资源用尽的同时,实际上也就呈停止状态。
单纯来讲,就是发送大量的合法请求,服务器很难分辨何为正常请求,何为攻击请求,因此很难防止DoS攻击。多台计算机发起的DoS攻击成为DDoS攻击(Distributed Denial of Service attack),DDoS攻击通常利用那些感染病毒的计算机作为攻击者的攻击跳板。
(2)通过攻击安全漏洞使服务停止。
5 拓展阅读
关于第二部分的Web攻击技术及ASP.NET Web应用安全这个主题,推荐阅读一下我的另外一篇文章《白帽子讲Web安全-学习总结》,里面有我学习学习《白帽子讲Web安全》一书的总结,也有一些适用于ASP.NET Web应用站点的安全扫描工具的介绍。此外,也推荐一个适用于.NET Core的代码安全分析工具Security Code Scan,它是一款开源的代码安全分析工具,可以直接在Visual Studio Marketplace中找到。我也有一篇文章介绍了SCS的使用,参考《一个适合.NET Core的代码安全分析工具-SCS》。
另外,推荐阅读吴翰清老师的《白帽子讲Web安全》一书,这是评分较高的一本(豆瓣评分7.4),虽然现在看来有点过时(很多的漏洞案例都早已被修复),但是基础的知识点都有覆盖,是建立安全思维的好书!此外,它对于安全开发流程与运营的介绍,同样具有深刻的行业指导意义。
参考资料
[日]上野宣,《图解HTTP》
往期精彩
本文作者EdisonZhou,架构师,阿里云MVP,博客园"推荐博客"博主,Scrum联盟认证CSM,爱好阅读与分享。
相关推荐
- deepseek VS chatgpt (399)—— 算法导论25.2 8题
-
八、给出一个〇(VE)时间复杂度的算法来计算有向图G=(V,E)的传递闭包。如果要写代码,请用go语言。chatgpt:...
- 智能算法导论 第十章 差分进化算法
-
遗传算法流程:1.初始化种群2.选择操作:根据适应度函数选择个体,将其复制到下一代3.交叉操作:将选择的个体随机组合,生成新的个体...
- deepseek VS chatgpt (400)-- 算法导论25.2 9题
-
九、假定我们可以在的时间内计算出一个有向无环图的传递闭包,其中是一个自变量为和的单调递增函数。证明:计算一个通用的有向图,的传递闭包的时间复杂度为。如果要写代码,请用go语言。...
- 文心一言 VS 讯飞星火 VS chatgpt (370)—— 算法导论24.4 2题
-
二、请给出下面差分约束系统的可行解或证明该系统没有可行解。...
- deepseek VS chatgpt (398)—— 算法导论25.2 6题
-
六、我们怎样才能使用Floyd-Warshall算法的输出来检测权重为负值的环路?如果要写代码,请用go语言。chatgpt:...
- deepseek VS chatgpt (405)-- 算法导论25.3 5题
-
五、假定在一个权重函数为w的有向图上运行Johnson算法。证明:如果图包含一条权重为0的环路,那么对于环路上的每条边,。如果要写代码,请用go语言。...
- 推荐引擎算法学习导论(算法引擎是什么意思)
-
之前已经介绍过推荐算法基础知识,在此再介绍一点基础的知识,方便大家温故学习。作者:July。出处:结构之法算法之道引言昨日看到几个关键词:语义分析,协同过滤,智能推荐,想着想着便兴奋了。于是昨天下午开...
- 文心一言 VS 讯飞星火 VS chatgpt (200)—— 算法导论15.2 4题
-
四、用go语言,对输入链长度为n的矩阵链乘法问题,描述其子问题图:它包含多少个顶点?包含多少条边?这些边分别连接哪些顶点?文心一言:...
- 操作系统概论:第三章 进程调度与死锁
-
进程调度的功能是按照某种策略或算法从就绪态进程中为当前空闲的cPU选择在其上运行的新进程。选择调度方式和算法的若干准则:1)周转时间短周转时间是指从作业被提交给系统开始,到作业完成为止系统的平均...
- C#经典算法实践,回顾往生,更是致敬《算法导论》
-
概述本系列博文将会向大家介绍本人在钻研《算法导论第3版》过程中的点点滴滴,并使用C#语言实现该书中所有的经典算法,附带相应的时间复杂度分析。知识储备C#算法设计之知识储备...
- deepseek VS chatgpt (401)-- 算法导论25.3 1题
-
一、请在图25-2上使用Johnson算法来找到所有结点对之间的最短路径。给出算法计算出的和值。如果要写代码,请用go语言。chatgpt:...
- 《算法导论》随笔3-1 Kruskal算法 第23章
-
这个是图论的倒数第二章。我会着重讲解最小生成树和拓扑排序两个算法。如果哪些地方我写错的,或者没写清楚的,可以评论区吐槽~先看一道洛谷上面的题目。...
- 算法圣经——《算法导论》中文版PDF免费分享
-
作为最著名的算法书之一,这本书深入浅出,全面论述了算法的内容,从一定深度上涵盖了算法的诸多方面,同时其讲授和分析方法又兼顾了各个层次读者的接受能力。各章内容自成体系,可作为独立单元学习。全书选材经典、...
- 洛阳规划馆版地图(分解版)(洛阳规划馆什么时候闭馆)
-
规划馆版地图组图规划馆版地图组图规划馆版地图组图规划馆版地图组图规划馆版地图组图规划馆版地图组图规划馆版地图组图规划馆版地图组图...
- 《意义地图》(意象地图五大要素)
-
意义是人的终极命题。人对于世界的意义,也就是世界对于人的意义。本书从人性的层面,从人际的视角,探讨了人如何活出意义的心理和精神路径,描绘了属于人的意义地图。我们都乘坐在属于自己的意义之舟上,时刻在掂量...
- 一周热门
- 最近发表
-
- deepseek VS chatgpt (399)—— 算法导论25.2 8题
- 智能算法导论 第十章 差分进化算法
- deepseek VS chatgpt (400)-- 算法导论25.2 9题
- 文心一言 VS 讯飞星火 VS chatgpt (370)—— 算法导论24.4 2题
- deepseek VS chatgpt (398)—— 算法导论25.2 6题
- deepseek VS chatgpt (405)-- 算法导论25.3 5题
- 推荐引擎算法学习导论(算法引擎是什么意思)
- 文心一言 VS 讯飞星火 VS chatgpt (200)—— 算法导论15.2 4题
- 操作系统概论:第三章 进程调度与死锁
- C#经典算法实践,回顾往生,更是致敬《算法导论》
- 标签列表
-
- mydisktest_v298 (34)
- document.appendchild (35)
- 头像打包下载 (61)
- acmecadconverter_8.52绿色版 (39)
- word文档批量处理大师破解版 (36)
- server2016安装密钥 (33)
- mysql 昨天的日期 (37)
- parsevideo (33)
- 个人网站源码 (37)
- centos7.4下载 (33)
- mysql 查询今天的数据 (34)
- intouch2014r2sp1永久授权 (36)
- 先锋影音源资2019 (35)
- jdk1.8.0_191下载 (33)
- axure9注册码 (33)
- pts/1 (33)
- spire.pdf 破解版 (35)
- shiro jwt (35)
- sklearn中文手册pdf (35)
- itextsharp使用手册 (33)
- 凯立德2012夏季版懒人包 (34)
- 反恐24小时电话铃声 (33)
- 冒险岛代码查询器 (34)
- 128*128png图片 (34)
- jdk1.8.0_131下载 (34)