第一章 了解Web及网络基础
- Web是建立在Http上通信的
- TCP/IP协议族按层次分为4层:应用层,传输层,网络层,数据链路层
- 应用层:决定了向用户提供应用服务时通信的活动,该层的协议有 FTP,DNS,HTTP等
- 传输层:对上层应用层,提供处于网络连接中的两台计算机之间的数据传输。协议有TCP,UDP.
- 网络层:处理在网络上流动的数据包,数据包是网络传输的最小数据单位。与对方计算机通过多台计算机或网络设备进行传输时,网络层所起的作用就是在众多选项内选择一条传输路线。
- 链路层:处理连接网络的硬件部分,包括控制操作系统,意见的设备驱动,NIC(网卡),及光纤等物理课件部分,硬件上的范畴均在链路层作用范围之内。
- TCP/IP传输流
利用TCP/IP协议族进行网络通信时,会通过分层顺序与对方进行通信。发送端从应用层往下走,接收端则往上走。
- 首先,作为发送端的客户端在应用层(HTTP协议)发出一个想看某个Web页面的HTTP请求。
- 接着,为了传输方便,在传输层(TCP)把应用层处收到的数据(HTTP请求报文)进行分割,并在各个报文上打上标记序号及端口号后转发给网络层
- 在网络层(IP协议),增加座位通信目的地的MAC地址后转发给链路层。
- 接收端的服务器在链路层接收到数据,按序往上层发送,一直到应用层,当传输到应用层,才能算真正接受到由客户端发送过来的HTTP请求。
- 在TCP/IP协议族中与HTTP密不可分的3个协议(IP、TCP、DNS)
- 负责传输的IP协议:IP协议位于网络层,IP协议的作用是把各种数据包传送给对方,从而保证确实传送到对方那里,则需要满足各类条件,其中最重要的条件是IP地址和MAC地址。IP地址指明了节点被分配到的地址,MAC地址是指网卡所属的固定地址。
- 使用ARP协议凭借MAC地址进行通信:用以解析地址的协议,根据通信方的IP地址可以查出MAC地址。属于网络层,ARP报文是由以太网帧进行封装传输的。没有封装进IP包。
- 确保可靠性的TCP协议:提供可靠的字节流服务。为了传输方便,将大块数据分割成报文段为单位的数据包进行管理。为了准确无误地将数据送达至目标处,TCP采用了三次握手,握手使用的标识:SYN和ACK。三次握手成功之后,客户端和服务器开始传送数据。
- 负责域名解析的DNS服务:DNS协议通过域名查找IP地址。
第二章 简单的HTTP协议
- HTTP是无状态协议,为了实现保持状态功能,引入Cookie
- 告知服务器意图的HTTP方法。
- GET 获取资源
请求:GET /index.html HTTP/1.1
Host:www.hackr.jp
响应:If-Modified-Since:Thu,12,Jul 2012 07:30:00
#仅返回2012年7月12日7点30分以后更新过的index.如果没更新,则以状态码304Not Modified
作为响应。 - POST :传输实体主体
- PUT:传输文件。要求在请求报文的主体中包含文件内容,然后保存到请求URI指定的位置。HTTP/1.1自身不带验证机只,一般的Web网站不用该方法。若配合Web应用程序的验证机制,或架构设计采用REST标准的同类Web网站,就可能会开放使用PUT方法。
- HEAD:获得报文首部。和GET方法一样,只是不返回报文主题部分。用于确认URI的有效性及资源更新的日期时间等。
- DELETE:删除文件,与PUT相反的方法,按请求URI删除指定的资源。
- OPTIONS:询问支持的方法,用来查询请求URI指定的资源支持的方法。
- TRACE:追踪路径,让Web服务器将之前的请求通信环回给客户端的方法。一般不用。且容易引发XST(跨站追踪)攻击
- CONNET:要求用隧道协议链接代理。在与代理服务器通信时建立隧道,实现用隧道协议进行TCP通信。主要使用SSL和TLS协议把通信内容加密后网络隧道传输。
- GET 获取资源
- 持久链接节省通信量。
- 持久连接:在建立1次TCP连接后进行多次请求和响应的交互。只要任一端没有明确提出断开连接,则保持TCP连接状态。
- 管线化:持久连接使的多数请求以管线化方式发送成为可能。能够做到同时并发多个请求,不需要一个接一个等待响应。
- 使用Cookie进行状态管理
第三章 HTTP报文内的HTTP信息
- 请求报文及响应报文的结构
- 报文主体和实体主体的区别:
- 报文:HTTP通信中的基本单位,由8位组字节流组成,通过HTTP通信传输。
- 实体:作为请求或响应的有效载荷数据,被传输,其内容由实体首部和实体主体组成。
通常,报文主体等于实体主体,只有当传输中进行编码操作时,实体主体的内容发生变化,才导致它和报文主体产生差异。
- 编码提升传输效率。编码操作需要计算机完成,所以需要消耗更多的cpu等资源
- 压缩传输的内容编码
- 分割发送的分块传输编码:在传输大容量数据时,通过把数据分割成多块,能够让浏览器逐步显示页面。将实体分割多个部分(块),每一块会用十六进制来标记块的大小,而实体主体的最后一块会使用“0(CR+LF)”来标记。分块传输编码的实体主体会由接收的客户端负责解码,恢复到编码前的实体主体。
- 发送多种数据的多部分对象集合
在HTTP报文中使用多部分对象集合时,需要在首部字段上加上Content-type. - 获取部分内容的范围请求:执行范围 请求时,会用到首部字段Range来指定资源的byte范围。
- 内容协商返回最合适的内容:同一个Web网站可能存在多个相同内容的页面,比如英文版和中文版的页面。
内容协商机制以相应资源的语言、字符集、编码方式等作为判断依据。
- 服务器驱动协商:以请求的首部字段为参考,在服务器段自动处理。但并不一定能筛选出最优内容
- 客户端驱动协商:由客户端进行内容协商的方式。浏览器显示的可选列表中手动选择。
- 透明协商:服务器驱动和客户端驱动的结合提,是由服务器端和客户端各自进行内容协商的一种方法
第四章 返回结果的HTTP状态码
- 状态码的类别
- 2×× 成功:
- 200 OK
- 204 No Content:服务器接收的请求已经正确处理,但在返回的报文中没有实体的主体部分,也不允许返回任何实体的主体。一般在只需要从客户端忘服务器发送信息,而对客户端不需要发送新信息内容的情况下使用。
- 206 Partial Content:客户端进行了范围请求,服务器也成功执行了这个部分的请求。
- 3×× 重定向:
- 301 Moved Permanently:永久性重定向。请求的资源已经被分配了新的URI
- 302 Found:临时性重定向。请求的资源已经分配了新的URI,并希望本次使用新的URI访问
- 303 See Other:请求对应的资源还村在另一个URI,应使用GET方法定向获取请求的资源。
- 304 Not Modified:客户端发送附带条件的请求时,服务端允许请求访问资源,但未满足条件的情况,304状态码返回时,不包含任何响应的主体部分。 304虽然被划分在3××类别中,但和重定向无任何关系。
- 307 Temporary Rediret:临时重定向。和Found有着相同的含义。307会按照遵照浏览器标准,不会从GET变成POST
- 4×× 客户端错误:
- 400 Bad Request:请求中存在语法错误。
- 401 Unauthorized:发送的请求需要有通过HTTP认证的认证信息,如果已经请求过一次,则表示用户认证失败。
- 403 Forbidden:请求的资源的访问被服务器拒绝了。
- 404 Not Found:服务器上无法找到请求的资源。
- 5×× 服务器错误:
- 500 Internal Server Error:服务器执行请求的时候发生了错误。也有可能是Web应用存在的bug或某些临时的故障。
- 503 Service Unavailable:服务器暂时处于超负载或者正在进行停机维护,现在无法处理请求。
第五章 与HTTP协作的Web服务器
- 通信数据转发程序:代理、网关、隧道
- 代理:持有资源实体的服务器被称为源服务器。从源服务器返回的响应经过代理服务器后再传给客户端。每次通过代理服务器转发请求或相应是,会追加写入Via首部信息用以标记经过的主机信息。
- 缓存代理:会预先将资源的副本(缓存)保存在代理服务器上。当代理再次接收到对相同资源的请求时,就可以不从源服务器那里获取资源,而是将之前缓存的资源作为响应返回。
- 透明代理:转发请求或响应时,不对报文做任何加工
- 网关,工作机制和代理十分相似。网关能使通信线路上的服务器提供非HTTP协议服务。利用网关能提高通信的安全性,因为可以在客户端与网关之间的通信线路上加密以确保连接的安全。比如,网关可以连接数据库,使用 SQL 语句查询数据。另外,在 Web 购物网站上进行信用卡结算时,网关可以和信用卡结算系统联动。
- 隧道,安全的通信线路,可按要求建立起一条与其他服务器的通信线路,届时使用 SSL 等加密手段进行通信。隧道的目的是确保客户端能与服务器进行安全的通信。隧道本身不会去解析HTTP请求。隧道会在通信双方断开连接时结束。
- 代理:持有资源实体的服务器被称为源服务器。从源服务器返回的响应经过代理服务器后再传给客户端。每次通过代理服务器转发请求或相应是,会追加写入Via首部信息用以标记经过的主机信息。
- 保存资源的缓存:缓存是指代理服务器或客户端本地磁盘内保存的资源副本。利用缓存可减少对源服务器的访问,因此也就节省了通信流量和通信时间。
- 即使存在缓存,也会因为客户端的要求、缓存的有效期等因素,向源服务器确认资源的有效性。若判断缓存失效,缓存服务器将会再次从源服务器上获取“新”资源。
- 缓存不仅可以存在于缓存服务器内,还可以存在客户端浏览器中。
第六章 HTTP首部
- 使用首部字段是为了给浏览器和服务器提供报文主体大小、所使用的语言、认证信息等内容。
第七章 确保Web安全的HTTPS
- HTTP的不足:
- 通信使用明文,内容可能会被窃听
- 不验证通信方的身份,因此可能遭遇伪装
- 无法证明报文的完整性,可能已遭篡改
- 通信的加密
- 一种方式就是将通信加密。HTTP 协议中没有加密机制,但可以通过和 SSL(Secure Socket Layer,安全套接层)或 TLS(Transport Layer Security,安全层传输协议)的组合使用,加密 HTTP 的通信内容。与SSL组合使用的HTTP成为HTTPS(HTTP Secure)
- 另一种方式就是将内容加密。
- 通常,HTTP 直接和 TCP 通信。当使用 SSL 时,则演变成先和 SSL 通信,再由 SSL 和 TCP 通信了。简言之,所谓 HTTPS,其实就是身披 SSL 协议这层外壳的 HTTP。