IP层位于网络层。IP层之间的通信依赖MAC地址;采用ARP协议,根据IP地址解析出MAC地址。根据MAC地址,逐步中转,下一站,下一站,最后到目的MAC地址。

TCP位于传输层,提供可靠的字节流服务。SYN ACK

DNS服务和HTTP服务一样位于应用层协议,提供域名到IP地址的解析服务。

HTTP协议通信过程:

客户端(输入网址)——(请求IP地址)——DNS(解析返回IP地址)

客户端——(HTTP协议生成HTTP请求报文)——(TCP协议将HTTP请求分割成报文段,发送)——(IP协议搜索地址,一边中转一边传送)——(TCP协议接收报文段,重组报文)——(HTTP协议对请求内容处理解析)——服务器——(处理结果同样利用TCP/IP通信协议向用户回传)

URI统一资源标识符

URL统一资源定位符(网址)

绝对URI格式:

​ http://user:pass@www.example.jp:80/dir/index.htm?uid=1#ch1​

http:// 协议方案名

user:pass 登录信息(认证)

www.example.jp 服务器地址

80 服务器端口号

dir/index.htm 带层次的文件路径

uid=1 查询字符串

ch1片段标识符

使用绝对URI必须知道待访问的服务器地址

HEAD方法的和GET方法一样,只是不返回报文主体部分,用于确认URI的有效性及资源更新的日期时间

OPTIONS方法用来查询针对请求URI指定的资源支持的方法

TRACE方法是让Web服务端将之前的请求通信环回给客户端的方法,确认连接过程中发生的一系列操作

CONNECT方法要在在与代理服务器通信时建立隧道,实现用隧道协议进行TCP通信,主要用SSL和TLS协议把通信内容加密后经网络隧道传输。

管线化技术出现后可以同时并行发送多个请求,而不需要一个接一个的等待响应。管线化技术比持久化连接还要快。请求数约到,时间差越明显。

HTTP属于无状态协议,由于不必保存状态,可减少服务器的CPU及内存资源的消耗,使用COOKIE可进行状态管理。

通过在请求和响应报文中写入cookie信息来控制客户端的状态。cookie会根据从服务端发送的响应报文内的一个叫Set-Cookie的首部字段信息,通知客户端保存COOKIE,当下次客户端再往服务器发送请求时,客户端会自动在请求报文中加入cookie值后发送出去。服务端发现客户端发送过来的cookie后,会去检查是哪个客户端发来的连接请求,然后对比服务器上的记录,最后得到之前的状态信息。

在互联网上,域名通过DNS服务映射到IP地址(域名解析)之后访问目标网站。可见,当请求发送到服务器时,已经是以IP地址形式访问了。在相同IP地址下,由于虚拟主机可以寄存多个不同主机名和域名的web网站,因此在发送HTTP请求时,必须在Host首部内完整指定主机名或域名的URI。

通信数据转发程序:代理,网关,隧道;这些应用程序和服务器可以将请求转发给通信线路上的下一站服务器,并且能接收从那台服务器发送的响应再转发给客户端。

代理:一种有转发给你的应用程序,它扮演了位于服务器和客户端中间人的角色,接收由客户端发送的请求并转发给服务器,同时也接收服务器返回的响应并转发给客户端。

网关:用于转发其他服务器通信数据的服务器,接收从客户端发送来的请求时,它就像自己拥有资源的源服务器一样对请求进行处理。有时客户端可能都不会察觉,自己的通信目标是一个网关。

隧道:在相隔甚远的客户端和服务器两者之间进行中转,并保持双方通信连接的应用程序。

使用代理服务器的理由:利用缓存技术减少网络带宽的流量,组织内部针对特定网站的访问控制,以获取访问日志为主要目的。

代理分类:一类是否使用缓存;另一类是否会修改报文。

缓存代理:代理转发响应时,缓存代理会预先将资源的副本保存在代理服务器上。当代理再次接收到对相同资源的请求时,就可以不从源服务器那获取资源,而是将之前缓存的资源作为响应返回。

转发请求或响应时,不对报文做任何加工的代理类型被称为透明代理。反之,对报文内容进行加工的代理被称为非透明代理。

网关的工作机制与代理时分类似,而网关能使通信线路上的服务器提供非HTTP协议服务。利用网关能提高通信的安全性,因为可以在客户端与网关之间的通信线路上加密以确保连接的安全。比如,网关可以连接数据库,使用SQL语句查询数据。另外,在web购物网站上进行信用卡结算时,网关可以和信用卡结算系统联动。

缓存是指代理服务器或客户端本地磁盘内保存的资源副本。利用缓存可减少对源服务器的访问,节省了通信流量和通信时间。

SSL采用公开密钥加密的加密处理方式。

加解密同用一个密钥的方式称为共享密钥加密,也被叫做对称密钥加密。

公开密钥加密使用一对非对称的密钥。一把叫做私有密钥,一把叫做公开密钥。

使用公开密钥加密方式,发送密文的一方使用对方的公开密钥进行加密处理,对方收到被加密的信息后,再使用自己的私有密钥进行解密。根据密文和公开密钥,恢复到信息原文是异常困难的,因为解密过程就是在对离散对数进行求值,这并非轻而易举就能办到。

HTTPS采用混合加密机制,共享密钥加密和公开密钥加密两者并用,若密钥能够实现安全交换,那么有可能会考虑仅适用公开密钥加密来通信。但公开密钥加密与共享密钥加密相比,其处理速度要慢。两者混合并用,在交换密钥环节适用公开密钥加密方式,之后的建立通信交换报文阶段则适用共享密钥加密方式。

Ajax是一种有效利用JavaScript和DOM的操作,以达到局部web页面替换加载的异步通信手段。跟以前的同步通信相比,由于它只更新一部分页面,响应中传输的数据量会减少。

Ajax核心技术是名为XMLHttPRequest的API,通过JavaScript脚本的调用和服务器进行HTTP通信。借由这种手段,就能从已加载完毕的web页面上发起请求,只更新局部页面。而利用Ajax实时地从服务器获取内容,有可能会导致大量请求产生。

以下为调用Websocket API,每50ms发送一次数据的实例

var socket = new WebSocket(‘ws://game.example.com:12010/’);

socket.onopen = function(){

setInterval(function{

if(socket.bufferedAmount == 0)

{

socket.send(getUpdateData());

}

},50);

};

该书中还有部分web安全漏洞及常见web攻击方法的讲解如跨站点脚本攻击,SQL注入攻击等细节,如有需要可再次进一步阅读。

最后推荐一个公众号,一枚IT技术人成长路上关于生活和职场的思考,欢迎书友们前来交流和分享心得

图解HTTP读书笔记_HTTP协议