HTTP&网络

原创💡 Abner Mai 2021-08-30 HTTP
  • HTTP
  • Internet
  • 网络
约 2810 字 大约 9 分钟

# 网络

# OSI 模型

# 网络分层

OSI网络分层分为七部分,由上而下分别为:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。

# 各分层职责

  • 应用层: 与其他计算机进行通讯的一个应用,它是对应应用程序的通信服务。如:TELNET、HTTP、FTP、NFS、SMTP等。
  • 表示层:主要功能是定义数据格式及加密。
  • 会话层:定义如何开始、控制和结束一个会话,包括对多个双向消息的控制和管理,以便在只完成了连续消息的一部分时可以通知应用,从而使表示层看到的数据是连续的,在某些情况下,如果表示层收到了所有的数据,则用数据代表表示层。例如: RPC,SQL等。
  • 传输层:包括是否选择差错恢复协议还是无差错恢复协议,及在同一主机上对不同应用的数据流的输入进行复用,还包括对收到的顺序不对的数据包的重新排序功能。例如:TCP、UDP、SPX。
  • 网络层:对端到端的包传输进行定义,它定义了能够标识所有节点的逻辑地址,还定义了路由实现的方式和学习的方式。为了适应最大传输单元长度小于包长度的传输介质,还定义了将一个包分解成更小的包的分段方法。例如:IP、IPX等。
  • 数据链路层:定义在单个链路上如何传输数据。例如:ATM、FDDI等。
  • 物理层:有关传输介质的特性,这些规范通常也参考了其他组织指定的标准。如:Rj45,802.3等。

# TCP/IP 协议

# 网络分层

TCP/IP协议族按层次分别分为以下4层:应用层、传输层、网络层、数据链路层。

# 各分层职责

  • 应用层:决定了向用户提供应用服务时通信的活动。
  • 传输层:传输层对上层应用层,提供处于网络链接中的两台计算机之间的数据传输。
  • 网络层(又称为网络互连层):用来处理在网络上流动的数据包。数据包是网络传输的最小数据单位。该层规定了通过怎样的路径到达对方计算机,并把数据包传送给对方。
  • 数据链路层(有称为数据链路层、网络接口层):用来处理连接网络的硬件部分。包括控制操作系统、硬件的设备驱动、NIC(网络适配器,即网卡),及光纤等物理可见部分。

# TCP/IP通信传输流

利用TCP/IP协议族进行网络通信时,会通过分层顺序与对方通信。发送端从应用层往下,接收端从数据链路层往上。

image-20210711105418550

# 流程示例

  • 发送端的客户端在应用层发出一个请求
  • 在传输层把应用层发出的请求数据进行分割,并在报文上打上标记序号及端口号后转发给网络层
  • 网络层增加作为通信目的地的MAC地址后转发给链路层
  • 接收端在链路层收到数据后,按序往应用层发送。当传输到应用层,才算真正接收到由客户端发送的HTTP请求。

image-20210711112249691

发送端在层与层之间传输数据时,每经过一层必定会被打上一个该层所属的首部信息。反之接收端则把对应的首部消去。

# TCP协议的三次握手

  • 发送端发送带有SYN标识的数据包给接收端。
  • 接收端在接收到数据后,向发送方发送SYN/ACK标识的数据包以表示确认信息。
  • 发送端接收到由接收端回应的数据包后,再向接收端发送带有ACK标识的数据包,以表示“握手”结束。

image-20210711112819689

# URI与URL

URI用字符串标识某一互联网资源,而URL表示资源的地点。

URL是URI的子集

# HTTP

HTTP:超文本传输协议。

HTTP协议规定,请求从客户端发出,最后服务器端相应该请求并返回。

# HTTP 是不保存协议状态的协议

HTTP是一种不保存状态,即无状态的协议。HTTP协议自身不对请求和响应之间的通信状态进行保存。

每一次新的请求发送时,就会有对应的新响应产生。协议本身并不保留之前一切请求的响应报文信息。这时为了更快的处理大量的事务,确保协议的可伸缩性。

# 请求方法

  • GET:获取资源。
  • POST:传输实体主题。
  • PUT:传输文件。鉴于HTTP/1.1的PUT方法自身不带验证机制,任何人都可以上传文件,存在安全问题,因此一般的WEB网站不使用该方法。若存在验证机制,就会开发使用。
  • HEAD:获取报文首部。用于确认URI的有效性及资源更新的日期时间等
  • DELETE:删除文件。鉴于HTTP/1.1的PUT方法自身不带验证机制,任何人都可以删除文件,存在安全问题,因此一般的WEB网站不使用该方法。若存在验证机制,就会开发使用。
  • OPTIONS:询问支持方式。用来查询针对请求URI指定资源支持的方法。
  • TRACK:追踪路径。是让WEB服务器将之前的请求通信环回给客户端的方法。这种方法存在危险,容易引发攻击,不会使用。
  • CONNECT:要求用隧道协议连接代理。

# 持久连接

关键词: keep-alive

HTTP初始版本,每一次的HTTP通信都会建立和断开TCP连接,增加了通信开销。为解决这个问题,提出了HTTP keep-alive(持久连接)。

持久连接的特点是,只要任意一端没有明确提出断开连接,则保持TCP连接状态。

持久连接减少了TCP连接的重复建立和断开所造成的额外开销,减轻了服务器的负载。另外,减少开销的那部分时间,使HTTP请求和响应能更快的结束。

# HTTP报文

用于HTTP协议交互的信息被成为HTTP报文,请求端的HTTP报文叫做请求报文,响应端的叫做响应报文。HTTP报文本身是由多行数据构成的字符串文本。

HTTP报文大致可分为首部和报文主体两块。

# 报文结构

分别为请求报文、响应报文结构:

image-20210711165648609

实例:

image-20210711165746356

  • 请求行:包含了请求的方法,请求的URI和HTTP版本。
  • 状态行:包含了表明响应结果的状态码,原因短语和HTTP版本。
  • 首部字段:包含了表示请求和响应的各种条件和属性的各类首部。

# HTTP状态码

# 类别

image-20210711170456434

# 2XX 成功

  • 200 OK:表示从客户端法拉的请求在服务器端被正常处理了。
  • 204 No Content:表示请求成功,但是返回的响应报文中没有实体资源返回。
  • 206 Partial Content:表示客户端进行了范围请求,而服务端成功执行了这部分请求。响应报文中包含了由Content-Range指定范围的实体内容。

# 3XX 重定向

  • 301 Moved Permanently:永久性重定向。表示资源已经被分配了新的URI,以后应使用资源现在所知的URI。
  • 302 Found:临时重定向。表示请求的资源已被分配了新的URI,希望用户本次能使用新的URI访问。
  • 303 See Other:表示请求对应的资源存在着另一个URI,应使用GET方法定向获取请求的资源。
  • 304 Not Modified:表示客户端发送附带条件的请求,服务器允许请求访问资源,但未满足条件的情况。
  • 307 Temporary Redirect:临时重定向。

# 4XX 客户端错误

  • 400 Bad Request:表示请求报文中存在语法错误(如参数错误)。
  • 401 Unauthorized:表示请求未通过认证。
  • 403 Forbidden:请求资源的访问被服务器拒绝。
  • 404 Not Found:服务器无法找到请求的资源。

# 5XX 服务器错误

  • 500 Internal Server Error:服务 器端在执行请求时发生了错误。
  • 503 Service Unavailable:服务器暂时处于超负载或正在进行停机维护,无法处理请求。

# HTTP首部字段

格式:

首部字段名: 字段值

# 通用首部字段

首部字段名 说明
Cache-Control 控制缓存的行为
Connection 逐跳首部、连接的管理
Date 创建报文的日期时间
Pragma 报文指令
Trailer 报文末端的首部一览
Transfer-Encoding 指定报文主体的传输编码方式
Upgrade 升级为其他协议
Via 代理服务器的相关信息
Warning 错误通知

# 请求首部字段

首部字段名 说明
Accept 用户代理可处理的媒体类型
Accept-Charset 优先的字符集
Accept-Encoding 优先的内容编码
Accept-Language 优先的语言(自然语言)
Authorization Web认证信息
Expect 期待服务器的特定行为
From 用户的电子邮箱地址
Host 请求资源所在服务器
If-Match 比较实体标记(ETag)
If-Modified-Since 比较资源的更新时间
If-None-Match 比较实体标记(与 If-Match 相反)
If-Range 资源未更新时发送实体 Byte 的范围请求
If-Unmodified-Since 比较资源的更新时间(与If-Modified-Since相反)
Max-Forwards 最大传输逐跳数
Proxy-Authorization 代理服务器要求客户端的认证信息
Range 实体的字节范围请求
Referer 对请求中 URI 的原始获取方
TE 传输编码的优先级
User-Agent HTTP 客户端程序的信息

# 响应首部字段

首部字段名 说明
Accept-Ranges 是否接受字节范围请求
Age 推算资源创建经过时间
ETag 资源的匹配信息
Location 令客户端重定向至指定URI
Proxy-Authenticate 代理服务器对客户端的认证信息
Retry-After 对再次发起请求的时机要求
Server HTTP服务器的安装信息
Vary 代理服务器缓存的管理信息
WWW-Authenticate 服务器对客户端的认证信息

# 实体首部字段

首部字段名 说明
Allow 资源可支持的HTTP方法
Content-Encoding 实体主体适用的编码方式
Content-Language 实体主体的自然语言
Content-Length 实体主体的大小(单位:字节)
Content-Location 替代对应资源的URI
Content-MD5 实体主体的报文摘要
Content-Range 实体主体的位置范围
Type 实体主体的媒体类型
Expires 实体主体过期的日期时间
Last-Modified 资源的最后修改日期时间
上次编辑于: 2021年10月9日 17:12