第一章 了解Web及网络基础
TCP/IP的分层
应用层,传输层,网络层,数据链路层
- 应用层:FTP,DNS,HTTP;
- 传输层:TCP,UDP;
- 网络层:IP,处理网络上流动的数据包;
- 数据链路层:处理连接网络的硬件部分。
域名-IP-MAC
DNS-客户端-HTTP请求报文-TCP将HTTP报文分为多个报文段-IP路由器中转-TCP重组报文-HTTP处理请求-服务器
URI用字符串标识某一互联网资源,而URL表示资源的地点(互联网上所处的位置)。可见URL是URI的子集。
第二章 简单的HTTP协议
HTTP协议使用URI定位互联网上的资源
告知服务器意图的HTTP方法:
- GET(获取资源)
- POST(传输实体主体)
- PUT(传输文件)
- HEAD(获取报文首部)
- DELETE(删除文件)
- OPTIONS(询问支持的方法)
- TRACE(追踪路径,可能会有代理服务器中转)
- CONNECT(要求用隧道协议连接代理)
持久连接节省通信量
HTTP初始版本中,每进行一次HTTP通信就要断开一次TCP连接。
例如:浏览一个网页,获取HTML文档一次,获取图片一次。。。
解决办法:
- 持久连接:只要任意一端没有明确提出断开连接,则保持TCP连接状态,HTTP/1.1中默认持久连接
- 管线化:不用等待响应可直接发送下一个请求
使用Cookie的状态管理
HTTP是无状态协议,不对之前发生过的请求和响应状态进行状态。
Cookie技术通过在请求和响应报文中写入Cookie信息来控制客户端的状态。
- Cookie会根据从服务器端发送的响应报文内的一个叫做Set-Cookie的首部字段信息,通知客户端保存Cookie。
- 当下次客户端再往该服务器发送请求时,客户端会自动在请求报文中加入Cookie值后发出去。
- 服务器发现客户端发送过来的Cookie后,会检查究竟是从哪一个客户端发来的连接请求,然后对比服务器上的记录,最后得到之前的状态信息。
第三章 HTTP报文内的HTTP信息
1.HTTP报文
- 报文首部:通用首部(请求响应报文都有),请求首部(请求报文),响应首部(响应报文),实体首部(请求响应报文都有),Cookie,其他
- 空行(CR+LF)
- 报文主体
2.编码提升传输效率
报文主体和实体主体:
- 报文:HTTP通信基本单位,8位组字节流组成
- 实体:请求或响应的有效载荷数据,分为实体首部,实体主体
HTTP报文的主体用于传输请求或响应的实体主体。
通常报文主体等于实体主体,只有当传说中有编码操作时,实体主体内容发生变化,导致它和报文主体产生差异
内容编码:
- 应用在实体内容上的编码格式,并保持实体信息原样压缩。编码后的实体由客户端接收并解码。
- 编码类型:gzip,compress,deflate,identity
分割发送的分块传输编码
- HTTP通信过程中,请求的编码实体资源尚未全部传输完成之前,浏览器无法显示请求页面。
- 在传输大容量数据时,通过把数据分割成多块,能够让浏览器逐步显示页面。功能称为分块传输编码(Chunked Transfer Coding)
3.发送多种数据的多部分对象集合
发送邮件时,可以添加多份附件,这是采用了MIME机制,允许处理文本,图片,视频等不同类型的数据。
在MIME扩展中会使用一种称为多部分对象集合(Multipart)的方法,来容纳多份不同类型的数据。
4.获取部分内容的范围请求
- 下载大尺寸的图片过程中如果网络中断,那就必须重头开始。
- 为了解决问题,需要恢复机制,即从之前下载中断处恢复下载
- 要实现恢复需要指定下载实体范围,指定范围发送的请求叫做范围请求。
- 针对范围请求,响应会返回状态码==206 Partial Content==
- 5001~10000字节:Range:bytes=5001-10000
5.内容协商返回最合适的内容
- 同一个Web网站有可能存在着多份相同内容的页面。比如英语版和中文版的Web页面。
- 内容协商机制是指客户端和服务器就响应的资源内容进行交涉,然后提供给客户端最为适合的资源。
- 内容协商会以响应资源的语言、字符集、编码方式等作为判断的基准。
- 请求报文中的某些首部字段就是判断的基准。Accept、Accept-Charset、Accept-Encoding、Accept-Language、Content-Language
- 服务器驱动协商:服务器端自动处理
- 客户端驱动协商:用户手动选择
- 透明协商:结合体
第四章 返回结果的HTTP状态码
状态码类别:
- 1XX - 信息性状态码
- 2XX - 成功状态码
- 3XX - 重定向状态码
- 4XX - 客户端错误状态码
- 5XX - 服务器错误状态码
实际上经常使用的大概只有14种
2XX
- 200 OK
- 204 No Content 返回的响应报文中不含实体的主体部分
- 206 Partial Content 客户端进行了范围请求
3XX
- 301 Moved Permanently 永久性重定向,表示请求的资源已被分配了新的URI
- 302 Found 临时性重定向,本次能使用新的URI访问,URI还可能改变
- 303 See Other 与302功能相同,但必须用GET方法定向获取
- 304 Not Modified 服务器端资源未改变,可直接使用客户端未过期的缓存
- 307 Temporary Redirect 临时性重定向,与302功能相同,不会从POST变成GET
4XX
- 400 Bad Request 请求报文存在语法错误
- 401 Unauthorized 发送的请求需要通过HTTP认证(BASIC认证,DIGEST认证)
- 403 Forbidden 请求资源的访问被服务器拒绝了
- 404 Not Found 服务器上无法找到请求的资源
5XX
- 500 Internal Server Error 服务器端执行请求时发生错误
- 503 Service Unavailable 服务器暂时处于超负载或正在进行停机维护,现在无法处理请求
第五章 与HTTP协作的Web服务器
一台Web服务器可搭建多个独立域名的Web网站,也可作为通信路径上的中转服务器提升传输效率。
用单台虚拟主机实现多个域名
即使物理层面只有一台服务器,但只要使用虚拟主机的功能,则可以假象已具有多台服务器。
互联网上,域名通过DNS服务映射到IP地址之后访问目标网站。当请求发送到服务器时,已经是IP地址形式了。
在相同的IP地址下,由于虚拟主机可以寄存多个不同主机名和域名的Web网站,因此在发送HTTP请求时,必须在Host首部内完整指定主机名或域名的URI。
通信数据转发程序:代理、网关、隧道
HTTP通信时,除客户端和服务器外,还有一些用于通信数据转发的应用程序,例如代理、网关和隧道。
- 代理:有转发功能的应用程序,会添加Via首部信息,可分为缓存代理(会预先将资源的副本缓存)和透明代理(不加工报文)
- 网关:转发其他服务器通信数据的服务器,提高安全性
- 隧道:在相隔甚远的客户端和服务器之间中转,并保持通信连接的应用程序。隧道是透明的,可以使用SSL加密通信。
保存资源的缓存
缓存是指代理服务器或客户端本地磁盘内保存的资源副本。利用缓存可减少对源服务器的访问,因此节省了通信流量和时间。
- 缓存有效期限:
即使存在缓存,也会因此客户端的要求、缓存的有效期等因素,向源服务器确认资源的有效性。若判断缓存失效,缓存服务器将会再次从源服务器上获得新资源。 - 客户端的缓存:缓存不仅存在与缓存服务器内,还可以存在客户端浏览器中。和缓存服务器一样,当判定缓存过期后,会向源服务器确认资源的有效性。