图解系列书籍,是一系列简单易读的介绍计算机相关知识的书籍。最近在读《图解HTTP》,下面是一些感悟:
通过 HTTP 访问 web
TCP/IP协议族
计算机与网络设备要相互通信,双方就必须基于相同的方法。比如,如何探测到通信目标、由哪一边先发起通信、使用哪种语言进行通信、怎样结束通信等规则都需要事先确定。不同的硬件、操作系统之间的通信,所有的这一切都需要一种规则。而我们就把这种规则称为协议(protocol)
把与互联网相关联的协议集合起来总称为TCP/IP。也有说法认为,TCP/IP是指TCP和IP这两种协议。还有一种说法认为,TCP/IP是在IP协议的通信过程中,使用到的协议族的统称。
TCP/IP的分层管理
TCP/IP协议族按层次分别分为以下4层:应用层、传输层、网络层和数据链路层。
每层只要考虑分派给自己的任务,不需要弄清整个协议链路的细节。
应用层
应用层决定了向用户提供应用服务时通信的活动。TCP/IP协议族内预存了各类通用的应用服务。比如,FTP(File TransferProtocol,文件传输协议)和DNS(Domain Name System,域名系统)服务就是其中两类。HTTP协议也处于该层。
传输层
传输层对上层应用层,提供处于网络连接中的两台计算机之间的数据传输。在传输层有两个性质不同的协议:TCP(Transmission Control Protocol,传输控制协议)和UDP(User Data Protocol,用户数据报协议)。
网络层
网络层用来处理在网络上流动的数据包。数据包是网络传输的最小数据单位。该层规定了通过怎样的路径(所谓的传输路线)到达对方计算机,并把数据包传送给对方。
与对方计算机之间通过多台计算机或网络设备进行传输时,网络层所起的作用就是在众多的选项内选择一条传输路线。
链路层(又名数据链路层,网络接口层)
用来处理连接网络的硬件部分。包括控制操作系统、硬件的设备驱动、NIC(Network Interface Card,网络适配器,即网卡),及光纤等物理可见部分(还包括连接器等一切传输媒介)。硬件上的范畴均在链路层的作用范围之内。
IP/TCP/DNS
负责传输的IP协议,在网络层
IP协议的作用是把各种数据包传送给对方。而要保证确实传送到对方那里,则需要满足各类条件。其中两个重要的条件是IP地址和MAC地址(Media AccessControl Address)
IP地址指明了节点被分配到的地址,MAC地址是指网卡所属的固定地址。IP地址可以和MAC地址进行配对。IP地址可变换,但MAC地址基本上不会更改。
IP间的通信依赖MAC地址。在网络上,通信的双方需要多只传输才能把数据传到对方。此时通常会利用下一站中转设备的MAC地址来搜索下一个中转目标。此时会用到ARP,ARP协议Address Resolution Protocol
是一种用以解析地址的协议,根据通信方的IP地址就可以反查出对应的MAC地址。
确保可靠性的TCP协议,在传输层
TCP协议为了更容易传送大数据才把数据分割,而且TCP协议能够确认数据最终是否送达到对方。
为了准确无误地将数据送达目标处,TCP协议采用了三次握手(three-wayhandshaking)策略。
即SYN(synchronize, 同步) => SYN/ACK => ACK(acknowledgement,确认)
负责域名解析的DNS服务,在应用层
DNS协议提供通过域名查找IP地址,或逆向从IP地址反查域名的服务。
URI和URL
标准的URI协议方案有30种左右,如 ftp、mailto、telnet、file等
URI用字符串标识某一互联网资源,而URL表示资源的地点(互联网上所处的位置)。可见URL是URI的子集。
URI格式如下图:
简单的 HTTP 协议
通常 HTTP 协议由客户端发起,服务端接收
我们常
使用 GET 来获取资源
使用 POST 传输实体主题
使用 PUT 传输文件
使用 DELETE 删除文件
使用 OPTIONS 询问支持的方法(常常在跨域的场景中使用)
使用TRACE 获取访问路径
使用 CONNECT 用隧道协议链接代理
http 协议是一种无状态协议,不会去记录上一次访问状态,这使得当我们要做类似于登录这样的公能的时候,需要通过 cookie 来进行状态的管理。
持久连接节省通信量
持久连接(HTTP keep-alive)的特点是,只要任意一端没有明确提出断开连接,则保持TCP连接状态。
持久连接的好处在于减少了TCP连接的重复建立和断开所造成的额外开销,减轻了服务器端的负载。
另外,减少开销的那部分时间,使HTTP请求和响应能够更早地结束,这样Web页面的显示速度也就相应提高了。
管线化(pipelining)技术出现后,不用等待响应亦可直接发送下一个请求。
使用Cookie的状态管理
Cookie会根据从服务器端发送的响应报文内的一个叫做Set-Cookie的首部字段信息,通知客户端保存Cookie。
当下次客户端再往该服务器发送请求时,客户端会自动在请求报文中加入Cookie值后发送出去。
服务器端发现客户端发送过来的Cookie后,会去检查究竟是从哪一个客户端发来的连接请求,然后对比服务器上的记录,最后得到之前的状态信息。
HTTP 报文内的 HTTP 信息
压缩传输的内容编码(gzip, compress–UNIX系统的标准压缩, deflate, identity–不进行编码)
分割发送的分块传输编码
在传输大容量数据时,通过把数据分割成多块,能够让浏览器逐步显示页面。
这种把实体主体分块的功能称为分块传输编码(Chunked Transfer Coding)
发送多种数据的多部分对象集合
在HTTP报文中使用多部分对象集合时,需要在首部字段里加上Content-type
获取部分内容的范围请求
1 | // 示例 |
HTTP 状态码
2XX系列
200 OK
204 No Content 没返回内容。一般在只需要从客户端往服务器发送信息,而对客户端不需要发送新信息内容的情况下使用。
206 Partial Content 响应报文中包含由Content-Range指定范围的实体内容。
3XX 系列
301 Moved Permanently 永久性重定向
302 Found 临时性重定向
303 See Other 303状态码明确表示客户端应当采用GET方法获取资源,这点与302状态码有区别
304 Not Modified 资源未更改
307 Temporary Redirect 和302类似,但是307会遵照浏览器标准,不会从POST变成GET
4XX系列
400 Bad Request 请求报文语法错误
401 Unauthorized 表示需要有通过HTTP认证(BASIC认证、DIGEST认证)的认证信息
403 Forbidden 权限不够
404 Not Found 资源未找到
5XX系列
500 Internal Server Error 执行请求遇到了错误
503 Server Unavailable 宕机或停机维护
与 HTTP 协作的 Web 服务器
用单台虚拟主机实现多个域名
在相同的IP地址下,由于虚拟主机可以寄存多个不同主机名和域名的Web网站,因此在发送HTTP请求时,必须在Host首部内完整指定主机名或域名的URI。
通信数据转发程序:代理、网关、隧道
代理
代理服务器的基本行为就是接收客户端发送的请求后转发给其他服务器。
代理不改变请求URI,会直接发送给前方持有资源的目标服务器。
网关
网关的工作机制和代理十分相似。而网关能使通信线路上的服务器提供非HTTP协议服务。
利用网关能提高通信的安全性,因为可以在客户端与网关之间的通信线路上加密以确保连接的安全。
隧道
隧道可按要求建立起一条与其他服务器的通信线路,届时使用SSL等加密手段进行通信。
隧道的目的是确保客户端能与服务器进行安全的通信。
保存资源的缓存
缓存是指代理服务器或客户端本地磁盘内保存的资源副本。
利用缓存可减少对源服务器的访问,因此也就节省了通信流量和通信时间。缓存有时效性。
- 本文作者: Jambo
- 版权声明: 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!
v1.5.2