HTTP
超文本传输协议(HTTP,HyperText Transfer Protocol) 是互联网上应用最为广泛的一种应用层协议。万维网的文档传输都是基于这个标准。HTTP使用了面向连接的TCP作为运输层协议,所以不考虑数据在途中的丢弃和重传。但HTTP协议本身是无连接的,所以它在通信前不需要先建立HTTP连接。我们通过下图这一通信来了解HTTP的工作过程。
1. 浏览器分析URL
2. 浏览器向DNS请求解析URL: www.tsinghua.edu.cn 的IP地址
3. 浏览器获得DNS解析出的IP地址 166.111.4.100
4. 浏览器与服务器(IP:166.111.4.100 端口:80)建立TCP连接
5. 浏览器发出GET命令: GET /chn/yxsz/index.htm
6. 服务器响应请求,发回文件index.htm 到浏览器
7. 释放TCP连接
8. 浏览器显示 index.htm 文本内容
建立TCP连接需要三次握手,客户端HTTP请求报文在发出TCP第三次握手时一并发出,服务器响应报文收到请求后把请求文档发给客户端。期间,经过了两个往返时间RTT。因为 HTTP 1.0版本是非持续性连接,所以每一次请求都要建立TCP连接,这无疑是给服务器造成很大负担。所以 HTTP 1.1 协议使用了持续连接,即服务器在发送响应后仍然在一段时间内保持这条TCP连接,避免频繁的建立连接。同时,HTTP/1.1 还支持流水线通信方式,即客户端可以发出连续的请求,服务器也可以发出连续的响应。
HTTP报文
HTTP的两类报文:HTTP报文使用ASCII码,各字段长度可变
1. 请求报文 :
比如前文提到的 www.tsinghua.edu.cn 的访问
GET (空格) /chn/yxsz/index.htm (空格) HTTP/1.1
Host: www.tsinghua.edu.cn
Connection: close (告知服务器发送完响应可以断开连接)
Accept - Language: cn (告知服务器用户希望优先得到中文文档)
2. 响应报文
短语:短语是给人看的,浏览器和服务器不理会。
Cookie
HTTP是无状态的,也就是说你每一次访问,他都以为是第一次访问。这样的话,我们淘宝都买不了东西咯,所以HTTP提出了Cookie来标识我们,把我们的访问信息保存在其数据库。
Cookie是这样的,当你访问某服务器时,服务器生成唯一的识别码,并在响应HTTP报文添加字段名为 Set - cookie 的首部行 : Set - cookie :12345678 。你收到这个响应,取出里面的Cookie 识别码,保存在本地浏览器。而服务器根据识别码这个索引在数据库生成一个项目,你所有对服务器的操作都保存在该项目下。
为了让服务器知道是你,你后续发出的HTTP请求都添加已保存在浏览器的Cookie首部行 Cookie :12345678 。服务器通过这个唯一的Cookie来验证是不是你。
HTTPS
HTTP 协议通常承载于 TCP 协议之上,有时也承载于 TLS 或 SSL 协议层之上,这个时候,就成了我们常说的 HTTPS。
HTTP的端口号为 80,HTTPS 的端口号为 443
与HTTP对比,HTTPS 两端使用了安全套接字,加密了数据。使数据在网络中可以安全的传输。
代理服务器
代理服务器(proxy server)就是一个服务器,它被称为万维网高速缓存(Web cache)。顾名思义,它的工作就是缓解服务器的压力,它将最近的一些请求和响应保存在自己的磁盘,当有人访问时,发现有过一样的请求,它就返回已存的响应。避免频繁的访问远方的服务器,这样就缓解了压力。