为什么看此书
如果你想了解网络知识如HTTP协议、TCP/IP协议,但是又不是专业的网络工程师,不会花大笔时间研究《TCP/IP详解》这本圣经,那么看《图解HTTP》就对了。
这篇博客可以说是我在看书时做的笔记吧。
第一章 了解Web及网络基础
Web和HTTP的诞生
在20世纪80年代末时,为了知识共享为规划的Web,随着Web的诞生,HTTP协议也就诞生了,只是那时候还不成熟,并且在这之后的很久都不成熟,直到1996年才HTTP才正式作为标准被推出,版本为HTTP/1.0
。
TCP/IP协议族
TCP/IP协议族,包括HTTP,DNS,FTP,UDP,PPPoE协议等;
TCP/IP协议族的分4层:应用层(FTP,DNS,HTTP)、传输层(TCP,UDP)、网络层(IP)、数据链路层(NIC(Network Interface Card)网卡,光纤等物理设备)。
TCP/IP数据传输流:数据是在客户端从上层往下层,再从下层往上层传递到服务端。
TCP/IP的三次握手四次挥手
URI和URLUniform Resource Identifier
和Uniform Resource Locator
第二章 简单HTTP协议
这章介绍的是HTTP/1.1版本,也是目前用的版本。
用于客户端和服务端通信
1.客户端发送request请求,服务端回应respons;
2.请求报文和响应报文的格式构成;
3.http不保存状态,即,上一次请求和这一次请求是相互独立的,可以通过传递相同的cookie来确认是否是相同的客户端发送;
4.HTTP客户端的请求方法,包括:GET,POST,PUT,HEAD,DELETE以及不常用的OPTIONS,TRACE,CONNECT,
5.持久连接指的是,为了解决TCP的三次握手和四次挥手耗时问题,即在第一次建立好连接后,在没有断开参数的情况下,HTTP请求仍在第一次创建的连接里面发送消息;
第三章 HTTP报文内的HTTP信息
第三章主要讲的是,客户端发送的请求和服务端响应的请求分别长什么样子。
- 报文的结构:
报文首部 + 空行(CR+LF) + 报文主体
,需要注意的是,请求报文和响应报文虽然结构相同,但具体内容不同。 - 报文首部分为以下部分组成:
请求行 + 状态行 + 首部字段 + 其他
- 编码能够提高传输速率;
除此之外,还可以把数据包分为多个部分传输,在报文首部中加以区分,以及不同浏览器,相应不同的返回报文;
第四章 返回结果的HTTP状态码
状态 | 类别 | 原因短语 |
---|---|---|
1XX | Informational(信息性状态码) | 接收的请求正在处理 |
2XX | Success(成功状态码) | 请求正常处理完毕 |
3XX | Redirection(重定向状态码) | 需要进行附加操作已完成请求 |
4XX | Client Error(客户端错误状态码) | 服务器无法处理请求 |
5XX | Server Error(服务端错误状态码) | 服务器处理请求错误 |
第五章 与HTTP协作的Web服务器
本章主要介绍Web服务器,包括搭建Web网站,或者做提高效率的中转服务器。
其中,Web服务器就是搭建常见的,某个网站所部署的机器就是了。
中转服务器种类比较多,包括代理,网关,隧道,缓存。
第六章 HTTP首部
在第三章简单介绍了HTTP的报文信息,也简单介绍了HTTP首部,第六章再详细讲HTTP首部结构,以及各种字段的用法。
这章可以当做手册使用,当遇到需要的时具体查询吧。
第七章 确保Web安全的HTTPS
HTTP为什么不安全
通过前面几章学习,知道了HTTP的优势,第七章说说HTTP的缺点以及如何解决这些缺点。
- 通信使用明文(不加密),内容可能会被窃听;
- 不验证通信方的身份,因此有可能遭遇伪装;
- 无法证明报文的完整性,所以有可能已遭篡改;
HTTPS是什么
HTTPS = HTTP + 加密 + 认证 + 完整性保护
HTTPS如何保证安全
- 服务端在数字证书认证机构把自己的公钥通过认证机构的私钥加密获得服务器自己的公钥证书;
- 客户端拿到第1步服务器的公钥证书后,使用认证机构提供的公钥,向认证机构验证公钥证书上的数字签名,以确认服务器的公开密钥的真实性;
- 客户端使用服务端的公开密钥对报文加密发送;
- 服务端用私有密钥对报文解密;
第八章 确认访问用户身份的认证
当网页需要特定人浏览时,就需要加入权限认证功能。本章介绍了4种认证方法。
BASIC认证
- 客户端请求;
- 服务端返回401状态码;
- 客户端用Base64编码发送用户ID和密码;
- 服务端认证成功返回200;
DIGEST认证
- 客户端请求;
- 服务端返回401+质询码(通常为随机数,实际依赖服务端实现)
- 客户端在请求首部Authorization信息中加入用户名密码等信息,以及通过质询码计算出的响应码(计算方法比较复杂,具体详见RFC2617)
- 服务端认证成功返回200;
SSL客户端认证
结合第七章HTTPS的安全性来讲,SSL需要购买证书。
SSL的认证是保证通讯过程的安全,防止通过form表单提交的密码等信息被监听。
基于表单认证
这是我们最常用的,就是用户名密码登录认证;
- 客户端发送用户名密码;
- 服务端验证通过,在服务端保存的sessionID,用于表示是哪个客户端,并将sessionID发送给客户端;
- 客户端收到sessionID保存到cookie中,下次请求直接发送cookie中的sessionID,而不用在输入密码了。(如果别人知道你的sessionID,也就可以通过该sessionID获取你的信息了,所以,sessionID大多都有过期时间)。
第九章 基于HTTP的功能追加协议
HTTP协议自HTTP/1.1
之后,这么多年一直都在用1.1版本,第九章主要讲在HTTP协议基础之上的改进。
SPDY
Google在2010年发布,旨在解决HTTP的性能问题,缩短Web页面的加载时间(50%)。
HTTP的瓶颈在于每次请求,页面都要整体刷新一遍,有时仅仅在于只改动一点点。基于此,有了Ajax技术。
Ajax(Asynchronous JavaScript and XML,异步JS和XML),本质值客户端局部请求服务端,从而局部刷新页面,提高使用体验。
Comet,与Ajax相反,Comet是服务端向客户端发送变化的数据。
SPDY是在会话层的网络协议,HTTP是在应用层。具体对协议做了一些改动从而提高性能。
使用浏览器进行全双工通信的WebSocket
WebSocket主要能够实现Web浏览器和Web服务器之间的全双通通信,支持推送功能,减少通信量。
HTTP/2.0
HTTP/2.0的目标改善用户在使用Web时的速度体验。
在HTTP/1.1的基础上,新添加或修改了一些网络协议。
第十章 构建Web内容的技术
HTML,CSS,JavaScript渲染页面,Java Servlet或者PHP做Web后台应用。
第十一章 Web的攻击技术
第十一章简单介绍了攻击Web服务器的技术手段,以及攻击造成的影响。
- 攻击服务器,通过SQL注入,或者OS命令注入,获取服务器数据。
- 攻击客户端,给用户发送诱导陷阱的邮件或者网页,从而获取用户的cookie(结合第八章,基于表单的验证,就知道cookie被别人知道有多可怕)。
具体的攻击方法查看书吧。