第三选择

刻意练习,日渐精进

0%

《图解HTTP》读书笔记

作为一名 WEB 开发,所做的项目大都是通过 HTTP 协议建立连接的,但又有多少人清楚 HTTP 建立连接的过程究竟是怎么一回事呢?这本书也发现了现今环境下存在的这个问题,于是选择用图文并茂,更浅显易懂的方式,来讲述 HTTP 的相关知识。在学习完本书,对 HTTP 协议有了一个基础的认识后,也计划花点时间拜读一下 《HTTP权威指南》和 《TCP/IP 详解,卷1》两本圣经,向计算机世界的更深处出发。

名词解释

HTTP: Hyper Text Transfer Protocal,中文含义是超文本传输协议,是客户端与服务器端发起请求时所遵循的一套规范。

TCP/IP协议族: 互联网相关的各类协议的统称,如建立通信的顺序、电缆的规格、web页面显示所需的步骤等。

TCP协议: Transmission Control Protocal,传输控制协议,提供字节流服务,将大块数据分割为报文传输,并以三次握手的策略,保证数据传输到指定目标。

UDP协议: User Data Protocal,用户数据协议。

DNS: Domain Name System,域名服务,提供从域名解析到IP地址的服务。

IP协议: Internet Protocal,网际协议,根据IP地址和MAC地址来保证数据包准确地传输到指定目标。

ARP协议: Address Resolution Protocal 解析地址协议,根据IP地址反查出MAC地址

URI: Uniform Resource Identifier,统一资源标识符。表示由某个协议方案表示的资源定位标识符,协议方案可以是http、ftp、mail等等各类协议。

URL: Uniform Resource Locator,统一资源定位符。是具体的URI,可以定位到该资源所在位置

各章提炼

WEB及网络基础

  1. TCP/IP协议族分为应用层(HTTP)、传输层(TCP)、网络层(IP)、数据链路层(硬件)。客户端发起请求时,按照应用层->传输层->网络层->数据链路层的顺序,每经过一层,会增加该层的首部信息,服务器端接收请求时,会按相反的顺序,逐层剥离对应的首部,最终拿到客户端请求的数据。

  2. TCP协议的作用是将大数据包分割为报文的形式进行发送,以及将报文段还原为请求的大数据包,并采取三次握手的机制,保证数据传输到指定目标。

  3. IP协议为每台机器分配IP地址,并确定哪些地址在同一个子网络。

  4. ARP协议可以解析出IP地址对应的主机MAC地址,将数据传输到对应主机上

  5. DNS 协议提供了域名与IP地址之间解析的服务。

  6. URI 和 URL 的定义及区别,具体见下面面试题。

简单的HTTP协议

  1. HTTP 协议用于客户端和服务器端之间通信,一条线路上必然有客户端与服务器端。

  2. 客户端发送请求报文进行请求,服务器端返回响应报文。报文格式见下一小节

  3. HTTP 协议是无状态的协议,它不会保存之前发生的请求及响应,为了解决登录态的问题,后续引入了Cookie技术。

  4. HTTP/1.0 版本每次只能发起一次TCP连接,响应结束后断开连接。当一个页面要发起多个请求时,则需要多次建立和断开TCP连接,增加了很多不必要的开销,因此在HTTP/1.1的版本,加入了keep-alive的技术,来保持TCP的持久连接,减少服务器的负载。

  5. 有了持久连接的功能,使得管线化的请求可以实现,管线化就是并行发送多个请求,但在HTTP/1.1版,响应还是按照请求的顺序进行响应,即同时发起A请求和B请求,服务器还是会先响应A请求,结束后响应B请求,如果A请求响应很久,还是会导致后面的请求堵塞,出现“队头堵塞”效应。

HTTP报文内的HTTP信息

  1. 报文由报文首部(header)、一个空行、一个换行符和报文主体构成。报文首部包含请求行(请求)、状态行(响应)以及各类首部字段

  2. 我们在传资料时,经常会把文件都压缩到压缩包里再发送,这样可以减小文件的体积,加快传输效率。相应的,发送请求时,对实体内容进行编码,可以加快请求传输速率。服务器端接收到请求时,再进行解码,拿到完成的请求数据。

  3. HTTP/1.1版本,实现了分块传输编码,用于处理大数据传输。它会将数据分割成多块,每块用十六进制来标记大小,最后一块会用0表示结束。使用分块传输编码,在请求头和响应头需要带上 Transfer-Endcoding 字段。

  4. HTTP协议允许一次请求包含多种数据格式,比如填表单时使用的Content-type: multipart/form-data,就可以传输图片、视频、文本等多种数据格式。

  5. 为了解决下载时网络中断需要重新下载的问题,需要可以指定需要下载的实体范围,也就是“断点续传”,而这个是通过在头部增加 Range 字段来指定要下载的范围。

  6. 一个多语言网站,我们想要访问和我们语言相通的版本,为此需要协调客户端和服务器,以响应给客户端合适的资源,这个过程叫内容协商机制。该机制可以由服务器驱动协商,即客户端发起请求时携带 AcceptAccept-Charset 等头部,服务器根据头部信息协调对应的资源返回响应。也可以客户端在页面提供可选项,由用户自行选择需要的版本,这也叫做客户端驱动协商。

HTTP状态码

  1. 状态码负责表示HTTP请求的返回结果,根据返回状态码的不同,我们可以判断请求是成功还是失败了,失败的原因是什么。

  2. 状态码分为1xx、2xx、3xx、4xx、5xx 五大类,主要掌握2xx表示成功、3xx表示重定向,客户端需要执行一些特殊处理、4xx表示客户端请求错误、5xx表示服务器内部发生错误。

与HTTP协作的服务器

  1. 为了提高请求速率,代理服务器作缓存服务器,对已发送的请求结果进行缓存,客户端再次请求时就不用请求源服务器,直接返回缓存的数据,但需注意数据的有效性。

确保安全的HTTPS

  1. HTTP 的缺点:明文通信,内容容易被窃听(抓包)。不验证用户身份,容易遭遇伪装。获取的请求信息可能已经被篡改。

  2. HTTPS = HTTP + 加密 + 认证 + 完整性保护。在HTTP与TCP通信中,增加一层SSL,HTTP先与SSL通信,再由SSL与TCP通信。

  3. SSL协议是独立于HTTP的协议,是目前应用最广泛的网络安全技术。(本书写于2014年,技术进步太快,但目前还是在用https)

  4. SSL协议采用公开密钥加密的加密处理方式,使用一对非对称加密密钥,一把公钥,一把私钥。发送请求时,使用公钥对内容进行加密,服务器解密的过程是对离散对数进行求值,破解的可能性不大。

  5. SSL协议存在的问题是无法证明公开密钥的正确性,你以为拿到的公开密钥可能并不是你实际请求的服务器的公开密钥。为此,有一个叫数字证书认证机构(CA,Certificate Authority)为公开密钥颁发证书(做公证),以保证拿到的公钥就是实际请求的服务器的公钥。

确认访问用户身份的认证

  1. 由于HTTP协议无状态的特性,我们需要核对“登录者本人才知道的信息”来认证用户的身份。通常有:账号密码,动态密令,数字证书,生物证书(指纹、虹膜),IC卡等。

基于HTTP的功能追加协议

  1. 由于时代的发展,人们对web的使用不单单是展示信息的网页,而HTTP协议的限制渐渐成为发展的瓶颈,在此基础上,人们需要添加更多的新功能以支持发展的需求。

  2. Google在2010年发布了SPDY,新增了如下功能: 多路复用流(单一的TCP连接可以处理多个HTTP请求)、赋予请求优先级(解决因带宽低而导致响应慢的问题)、压缩头部信息(减少通信的数据包数量)、推送功能(服务器可以主动向客户端推送数据)

  3. WebSocket协议,由客户端发起连接,一旦建立连接,客户端和服务器端都可以直接向对方发送报文。实现推送功能并能减少通信量。

  4. HTTP/2,发布于2015年,在SPDY + WebSocket的基础上建立,主要特性:服务器推送、头部信息压缩、多路复用、数据流、二进制协议(头部和数据实体都是二进制,解析更方便)

WEB攻击技术

  1. 介绍了几种常见的攻击技术:SQL注入、XSS脚本攻击、CSRF跨站请求伪造、OS命令注入、会话劫持等。

  2. 介绍网站可能存在的安全漏洞:未对特殊字符转义、不正确的错误消息处理,为下一次提供了提示信息、遭遇密码破解(穷举法、字典攻击)。

常见面试题

TCP/IP 协议族分为几层,分别的作用是什么?

TCP/IP 协议族分为 应用层、传输层、网络层和数据链路层。

应用层决定提供什么样的服务(HTTP、TCP)

传输层决定使用什么传输协议(TCP、UDP)

网络层处理数据包,选择数据包的传输地址(IP协议)

数据链路层是连接网络的硬件部分,如操作系统、硬件驱动、光缆等

URI 和 URL 分别是什么,区别在哪里?

URI 全称 Uniform Resource Identifier,统一资源标识符。URI 可以分为 URL、URN 和同时具备locator及name特性的东西。

URL 指向的是资源的绝对定位,通过url是可以直接访问到资源的,可以说是提供了访问机制的URI。

所以 URL 和 URN 是 URI 的子集。

相关资料分享

互联网协议入门(一)
互联网协议入门(二)
HTTP 协议入门
SSL/TLS协议运行机制的概述
图解SSL/TLS协议