1.TCP/IP协议族
- 把互联网相关联的协议集合起来总称TCP/IP。
- HTTP基于TCP/IP协议族,HTTP属于它内部的一个子集。
- TCP/IP分层管理
TCP/IP按层次分为:应用层,传输层,网络层和链路层。
- 应用层:决定了向用户提供应用服务时通信的活动。
FTP(文件传输协议),DNS(域名系统),HTTP(超文本传输协议) - 传输层:提供处于网络连接中的两台计算机之间的数据传输。
TCP(传输控制协议),UDP(用户数据报协议) - 网络层(网络互联层):用来处理网络上流动的数据包。数据包是网络传输的最小单位。该层规定了通过怎样的路径到达对方计算机,并把数据包传送给对方。
- 链路层(网络接口层):用来处理连接网络的硬件部分。包括控制操作系统、硬件的设备驱动、NIC(网卡)以及光纤等物理可见部分。
- TCP/IP通信传输流
发送端在层与层之间传输数据时,每经过一层必定会被打上一个该层所属的首部信息。反之,接收端在层与层传输数据时,每经过一层时会把对应的首部消去。
这种把数据信息包装起来的做法称为封装。如下图所示。 - 与HTTP关系密切的协议:IP、TCP和DNS
- IP协议的作用是将数据包传输给对方,两个重要条件:IP地址和MAC地址。IP地址指明了节点被分配到到地址,MAC地址是指网卡所属固定地址。在网络上,通常要经过多台计算机和网络设备中转才能连接到对方,可以利用中转设备的MAC地址搜索下一个中转目标。
- TCP协议提供可靠的字节流服务,TCP协议为了更容易传送大数据而把数据分隔,而且TCP协议能够确认数据是否送达对方。
为了准确无误地将数据送达目的,TCP协议采用了三次握手策略。握手过程中使用了TCP的标志–SYN和ACK。发送端首先发送一个带有SYN标志的数据包给对方。接收端收到后,回传一个带有SYN/ACK标志的数据包以示传达确认信息。最后,发送方再回传一个带ACK标志的数据包,代表“握手”结束。 - DNS服务和HTTP协议一样位于应用层的协议,提供域名到IP地址之间的解析服务。
- URI
URI就是由某个协议方案表示的资源的定位标识符。采用HTTP协议时,协议方案就是http。
URI的格式如下图所示:
2.简单的HTTP协议(1.1)
请求访问文本等资源的一端称为客户端,而提供资源的一端称为服务端。肯定从客户端开始建立通信,服务端在没有接收到请求之前不会发出响应。
- 请求报文是由请求方法,请求URI,协议版本,可选的请求首部字段和内容实体构成。
- 响应报文基本上由协议版本,状态码,解释状态码的原因短语,可选的响应首部字段以及实体主体构成。
- HTTP是不保存状态的协议
协议本身不保留之前一切的请求和响应报文的信息,这是为了更快地处理大量食物,确保协议的可伸缩性,而特意把HTTP协议设计成如此简单。但是假如用户登陆了某界面,需要保存用户登陆过这个事实该怎么办?于是引入了Cookie技术。于是乎就可以管理状态了。 - 告知服务器意图的HTTP方法
- GET:获取资源,如果为资源则保持原样返回,如果为程序则返回程序执行后的结果。
- POST:传输实体主体
- PUT:用来传输文件,要求在请求报文的主体中包含文件内容,然后保存到请求URI指定的位置。(自身不带验证机制,存在安全问题,一般不使用该方法)
- HEAD:与GET方法类似,只是不返回报文主体部分。用于确认URI的有效性及资源更新的日期时间等。
- DELETE:与put相反,表示删除某资源,一般不适用。
- OPTIONS:询问支持的方法。
- TRACE:追踪路径,将web服务器之前等请求通信环给客户端的方法。(不常用)
- CONNECT:要求用隧道协议连接代理,实现用隧道协议进行TCP通信。(使用SSL和TLS)
- 持续连接节省通信量
传统每请求一次就要三次握手连接tcp四次握手断开,但是原来传输量特别小,所以影响不大,但是当下一个html可能包含n多图片,会造成过多无谓大通信量。
- 持久连接:只要任意一段没有明确提出断开连接,则保持TCP连接。HTTP1.1默认所有连接都是持久连接。
- 管线化:曾经是发送请求后需要等待并收到响应,才会发送下一个请求。管线化技术不用等待响应亦可直接发送下一个请求。可以让更多请求更快结束。(速度快很多)
- 使用Cookie的状态管理
如果让服务器管理全部客户端状态会成为负担。故引入Cookie技术解决该矛盾:Cookie会根据从服务端发送的响应报文中一个叫做set-Cookie的首部字段信息,通知客户端保存Cookie。当下次客户端再往该服务器发送请求时,客户端会自动在请求报文中加入Cookie的值发送出去。
服务器发现客户端发送过来的Cookie后,会去检查究竟是从哪一个客户端发来的连接请求,然后对比服务器上的纪录,得到最终状态信息。
3.返回结果的HTTP状态码
状态码的类别:
4.与HTTP协作的Web服务器
- 用单台虚拟主机实现多个域名
HTTP/1.1允许一台HTTP服务器搭建多个Web站点,即物理层面只有一台服务器,但只要使用虚拟主机的功能,则可以假想已具有多台服务器。
相同IP下,由于虚拟主机可以寄存多个不同主机名或域名的Web网站,因此在发送HTTP请求时,必须在Host首部内完整指定主机名或者域名的URI。 - 通信数据转发程序:代理、网关、隧道
- 代理:接收客户端请求并转发给服务器,同时也接收服务器返回的响应再转发给客户端。
- 网关:网关是转发其他服务器通信数据的服务器,接收从客户端发送来的请求时,它就像自己拥有资源的服务器一样对请求进行处理,客户端自身可能察觉不到。
- 隧道:隧道是在相隔甚远的客户端和服务器两者之间进行中转,保持双方通信连接的应用程序。
- 保存资源的缓存
缓存指代理服务器或客户端本地磁盘内保存的资源副本。利用缓存可减少对源服务器的访问。
5.确保Web安全的HTTPS
- HTTP缺点
- 通信使用明文,内容可能被窃听
- 不验证通信方身份,因此可能遭遇伪装(不能验证真正的拥有资源方和真正的提出请求方)
- 无法证明报文的完整性,所以有可能已遭篡改
- HTTP+加密+认证+完整性保护 = HTTPS
HTTPS是身披SSL外壳的HTTP。
SSL采用一种叫做公开密钥加密的加密处理方式。
- 共享密钥加密的困境:加密解密用同一个密钥的方式称为共享密钥加密。
- 使用两把密钥的公开密钥加密,使用一对非对称的密钥。一把叫做私有密钥,一把叫做公有密钥。发送密文的一方使用对方的公钥进行加密,接收方使用自己的私钥进行解密,利用这种方式,不需要发送用来解密的私有密钥。
- HTTPS采用混合加密机制:若密钥能够实现安全交换,那么有可能会考虑仅使用公开密钥加密来,但是公开密钥加密处理速度比共享密钥要慢。故:交换密钥环节使用公开密钥加密方式,之后建立通信交换报文阶段采用共享密钥加密。
- 证明公开密钥正确性的证书
- https的安全通信机制
参考书籍:《图解HTTP》