HTTP&网络
# 网络
# 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协议族进行网络通信时,会通过分层顺序与对方通信。发送端从应用层往下,接收端从数据链路层往上。
# 流程示例
- 发送端的客户端在应用层发出一个请求
- 在传输层把应用层发出的请求数据进行分割,并在报文上打上标记序号及端口号后转发给网络层
- 网络层增加作为通信目的地的MAC地址后转发给链路层
- 接收端在链路层收到数据后,按序往应用层发送。当传输到应用层,才算真正接收到由客户端发送的HTTP请求。
发送端在层与层之间传输数据时,每经过一层必定会被打上一个该层所属的首部信息。反之接收端则把对应的首部消去。
# TCP协议的三次握手
- 发送端发送带有
SYN
标识的数据包给接收端。 - 接收端在接收到数据后,向发送方发送
SYN/ACK
标识的数据包以表示确认信息。 - 发送端接收到由接收端回应的数据包后,再向接收端发送带有
ACK
标识的数据包,以表示“握手”结束。
# 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报文大致可分为首部和报文主体两块。
# 报文结构
分别为请求报文、响应报文结构:
实例:
- 请求行:包含了请求的方法,请求的URI和HTTP版本。
- 状态行:包含了表明响应结果的状态码,原因短语和HTTP版本。
- 首部字段:包含了表示请求和响应的各种条件和属性的各类首部。
# HTTP状态码
# 类别
# 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 | 资源的最后修改日期时间 |