《图解HTTP》系列笔记之第一二章

104 阅读6分钟

近日在系统复习基础和算法,主要是看些经典,比如红宝书,labuladong的算法小抄,以及图解HTTP,这是图解HTTP系列笔记

Web和网络基础

TCP/IP协议族

不同操作系统之间的通信需要一种规则,这种规则就是协议。

与互联网相关的各类协议族的总称就是TCP/IP协议

TCP/IP的分层管理

TCP/IP协议族按层次分为4层:应用层,传输层,网络层和数据链路层

分层可以让改动更简单,设计也变得简单,应用只需考虑分派给自己的任务,而不需要弄清对方的传输线路

各层功能:

应用层

决定向用户提供服务时通信的活动

HTTP协议属于应用层

传输层

提供处于网络连接中的两台计算机间的数据传输。在传输层有2个性质不同的协议:TCP(Transmission Control Protocol传输控制协议)和UDP(User Data Protocol用户数据报协议)

网络层

处理在网络上流动的数据包。该层规定了传输路径,即在众多的选项中选择一条传输路线

数据链路层

处理连接网络的硬件部分

TCP/IP通信传输流

利用TCP/IP通信时,会通过分层顺序与对方通信。发送端从应用层往下走,接收端从链路层往上走,直到应用层

以HTTP为例:

在应用层发出HTTP请求

在传输层分隔数据(请求报文),并在报文上打上标记序号和端口号,最后转发给网络层

在网络层,增加作为通信目的地的MAC地址后转发给链路层

服务器接受到数据后,按序往上层发送,一直到应用层。当传输到应用层,才算真正接收到由客户端发送过来的HTTP请求。

发送端在层与层之间传输数据时,数据每经过一层就会被打上一个该层所属的首部信息。接收端在层与层之间传输数据时,数据的首部每经过一层就会被消去。这种把数据包装起来的做法叫做封装

IP协议

IP协议属于网络层。IP协议作用是把各种数据包传送给对方。要确保数据确实传送到对方需要满足各类条件。其中2个重要条件是IP地址和MAC地址

IP间的通信依赖MAC地址。在网络上,通信双方需要经过多台计算机中转才能连接到对方。中转时会利用MAC地址搜索下一个中转目标,这时会采用ARP协议解析MAC地址。IP协议就是一边中转一边传输数据。

TCP协议

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

可靠的传输服务是指,能够把数据准确地传输给对方

字节流服务是指,将大块的数据分割成报文段进行管理

TCP三次握手

为了确保数据能到达目标,TCP采用三次握手。过程中使用了TCP的标志:SYN和ACK。

  1. 发送端先发送一个带SYN标志的数据包给对方
  2. 接收端收到后,回传一个带有SYN/ACK标志的数据包表示确认
  3. 最后发送端回传一个带有ACK标志的数据包,代表握手结束

DNS协议

DNS位于应用层,提供域名到IP地址之间的解析服务

用户通常使用主机名或域名来访问对方的计算机,主机名或域名由字母和数字组成,易于记,IP地址是纯数字。计算机更擅长处理数字,所以要将域名转为IP地址。DNS协议就产生了,它可以通过域名查找IP地址,或者从IP地址反查域名

统一资源标识符

URI (Uniform Resource Identifier)

Uniform 统一的格式方便处理不同类型的资源

Resource 资源是可标识的任何东西

Identifier 标识符

URI就是由某个协议方案表示的资源的定位标识符。URI用字符串标识某一互联网资源,而URL表示资源的地点。URL是URI的子集。

URI的格式
  • 绝对URI
  • 绝对URL
  • 相对URL 是从基本URI处指定URL

绝对URI的格式

绝对URI.png

使用绝对URI必须指定服务器地址

带层次的文件路径:指定服务器上的文件路径来定位特指的资源

查询字符串 :针对已指定的文件路径内的资源

请求报文

GET /index.htm HTTP/1.1
Host:hackr.jp

GET 请求方法

/index.htm 请求访问的资源对象,也叫请求URI

HTTP/1.1 协议版本

请求报文是由请求方法,请求URI,协议版本,请求首部(可选)和内容实体构成的

HTTP/1.1 200 OK                //协议版本,状态码,用于解释状态码的原因短语
Date:Tue,10 Jul 2012 06:50:15 GMT//首部字段
Content-Length:362
Content-Type:text/html
​
<html>//资源实体的主体

响应报文由协议版本,状态码,用于解释状态码的原因短语,首部字段以及资源实体的主体构成

HTTP是不保存状态的协议

HTTP协议自身不保留之前一切的请求或响应报文信息。有些场景需要保存状态,比如,用户跳转到其他页面后继续保持登录状态,就引入了cookie。cookie配合HTTP协议可以管理状态

指定URI的方式:

  1. URI为完整的URI

GET http://hakr.jp/index.htm HTTP/1.1
  1. 在首部字段Host中写明网络或IP地址

    
    GET /index.htm HTTP/1.1
    Host:hackr.jp
    

HTTP1.1中可使用的方法

GET方法用来请求资源

POST用来传输实体的主体

PUT用来传输文件

HEAD获得报文首部,用于确认URI的有效性和资源更新的时间

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

CONNECT 要求在与代理服务器通信时建立隧道,实现用隧道下而已进行TCP通信,主要使用SSL和TLS协议把通信内容加密后经网路隧道传输

​ SSL:Secure Sockets Layer 安全套接层

​ TLS:Transport layer Security传输层安全

响应之后进入网络隧道

持久连接节省通信量

HTTP初始版本中,每进行一次HTTP通信就要断开一次TCP连接。这样,请求一份包含多张图片的HTML文档对应的Web页面会产生大量的通信开销

为了解决上述TCP连接的问题,HTTP1.1出现了持久连接,持久连接的特点是,只要任意一端没有明确提出断开连接,则保持TCP连接状态。

好处:

  1. 减少了TCP连接重复建立和断开所造成的额外开销,减轻了服务器端的负载
  2. HTTP响应速度更快,web页面的显示速度也相应提高

使用cookie的状态管理

HTTP是无状态协议,如果页面要求登录认证,那么每次跳转新页面都需要在请求报文中附加参数来管理登录状态

cookie交互过程:

  1. 客户端发送请求
  2. 服务器收到请求,生成cookie,在响应中添加cookie后返回
  3. 客户端在请求中添加cookie后发送请求
  4. 服务端检查cookie就可以识别客户端了