图解HTTP - 再读解析

353 阅读7分钟

网络基础TCP/IP

为了理解HTTP,我们先了解一下TCP/IP协议族。

概念:TCP/IP 是互联网相关的各类协议族的总称 特点:分层管理

  • 应用层 应用层决定了向用户提供应用服务时通信的活动

    • FTP-文件传输协议
    • DNS-域名系统
    • HTTP协议
  • 传输层 传输层对上层应用层,提供处于网络连接中的两台计算机之间的数据传输

    • TCP-传输控制协议
    • UDP-用户数据报协议
  • 网络层 网络层用来处理在网络上流动的数据包。数据包是网络传输的最小数据单元。该层规定了通过怎样的路径,到达对方计算机,并把数据包传递给对方

  • 链路层(又名数据链路层,网络接口层) 用来处理连接网络的硬件部分

与HTTP关系密切的协议:IP、DNS、TCP

负责传输的IP协议

IP协议的作用是把各种数据包传送给对方,而要保证确定传送到对方那里,需要满足各类条件,其中最重要的条件是IP地址和MAC地址

  • IP 地址指明了节点被分配的地址
  • MAC 地址是指网卡所属的固定地址

IP 地址可以和MAC 地址进行匹配,IP 地址可变,但MAC地址基本上不会更改

使用ARP 协议凭借MAC 地址进行通信

确保可靠性的TCP协议

为了准确的将数据送达目标,TCP 协议采用了三次握手策略

  • 发送端首先会发送一个带SYN标志的数据包给对方
  • 接收端收到后,回传一个带有SYN/ACK标志的数据包以示传达确认信息
  • 最后,发送端在回传一个带ACK标志的数据包,代表“握手”结束

负责域名解析的DNS服务

提供域名到IP地址之间的解析服务

各种协议与HTTP协议的关系

HTTP 协议

HTPP(HyperText Transfer Protocol) 是一种超文本传输协议,用于客户端和服务器之间,通过请求和响应的交换来达成通信

HTTP 是无状态的

HTTP 是一种无状态协议,自身不对请求和响应之间的通信状态进行存储。 优点:更快速地处理大量事物,确保协议的可伸缩性,减少服务器的CPU及内存资源的消耗 缺点:无法对之前的状态进行处理。例如登录状态,解决方法是使用Cookie进行状态管理

使用Cookie 进行状态管理

Cookie会根据从服务器端发送的响应报文内的一个叫做Set-Cookie的首部字段信息,通知客户端保存Cookie。当下次客户端再往该服务器发送请求时,客户端会自动在请求报文中加入Cookie值后发送出去。服务器端发现客户端发送过来的Cookie后,会去检查究竟是从哪一个客户端发来的连接请求,然后对比服务器上的记录,最后得到之前的状态信息

持久链接/管线化

HTTP协议的初始版本中,每进行一次HTTP通信就要断开一次TCP连接。所以如果当请求的资源很多时,会造成无谓的TCP连接建立和断开,增加通信量的开销。为解决TCP连接的问题,产生了keep-alive的方法,其特点是:只要任意一端没有明确提出断开连接,则保持 TCP连接状态(在HTTP/1.1中,所有的连接默认都是持久连接)

持久连接也使管线化成为可能,即不用等待响应即可发送下一个请求,这样就能够做到同时并行发送多个请求。

HTTP 请求方法

HTTP1.0 定义了三种请求方法: GET, POST 和 HEAD方法。

HTTP1.1 新增了六种请求方法:OPTIONS、PUT、PATCH、DELETE、TRACE 和 CONNECT 方法。

序号 方法 描述
1 GET 请求指定的页面信息,并返回实体主体
2 HEAD 类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头
3 POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST 请求可能会导致新的资源的建立和/或已有资源的修改
4 PUT 从客户端向服务器传送的数据取代指定的文档的内容
5 DELETE 请求服务器删除指定的页面
6 CONNECT HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器
7 OPTIONS 允许客户端查看服务器的性能
8 TRACE 回显服务器收到的请求,主要用于测试或诊断
9 PATCH 是对 PUT 方法的补充,用来对已知资源进行局部更新

HTTP 状态码

类别 原因短语
1XX Informational(信息性状态码) 接收的请求正在处理
2XX Success(成功状态码) 请求正常处理完毕
3XX Redirection(重定向状态码) 需要进行附加操作以完成请求
4XX Client Error(客户端错误状态码) 服务器无法处理请求
5XX Server Error(服务端错误状态码) 服务端处理请求出错

2XX 成功

  • 200 OK 表示从客户端发来的请求在服务器端被正常处理
  • 204 No Content 表示服务器接收请求已成功处理,但在返回的响应报文中,不包含实体的主体部分。一般在只需要从客户端往服务器端发送信息,而对客户端不需要发送新信息内容的情况下使用
  • 206 Partial Content 表示客户端进行了范围请求,而服务器成功执行了这部门GET请求

3XX 重定向

  • 301 Moved Permanently 永久重定向,表示请求的资源已被分配了新的URI,以后应使用资源现在所指的URI
  • 302 Found 临时重定向,表示请求的资源已被分配了新的URI,希望本次能使用新的URI 访问。不是被永久移动,而是临时性质的
  • 303 See Other 表示请求对应的资源存在着另一个URI,应使用GET 方法定向获取请求的资源
  • 304 Not Modified 表示客户端发送附带条件的请求时,服务器端允许请求访问资源,但因为发生请求未满足条件的情况后,直接返回 304 Not Modified(服务器端资源未改变,可直接使用客户端未过期的缓存)
  • 307 Temporary Redirect 临时重定向,遵守浏览器标准,不会从POST变成GET

4XX 客户端错误

  • 400 Bad Request 表示请求报文中存在无法错误,需修改请求的内容后再次发送请求
  • 401 Unauthorized 表示发送的请求需要通过HTTP认证(BASIC认证、DIGEST认证)的认证信息
  • 403 Forbidden 表示对请求的资源的访问被服务器拒绝了(例如:未获得文件系统的访问授权等)
  • 404 Not Found 表示服务器上无法找到请求的资源
  • 405 Method Not Allowed 表示客户端请求中的方法被禁止

5XX 服务器错误

  • 500 Internal Server Error 表示服务器端在执行请求时发生了错误,也有可能是web应用存在的bug 或某些临时故障
  • 501 Not Implemented 服务器不支持请求的功能,无法完成请求
  • 502 Bad Gateway 表示作为网关或者代理工作的服务器尝试执行请求时,从远程服务器接收到了一个无效的响应
  • 503 Service Unavailable 表示服务器暂时处于超负载或正在进行停机维护,现在无法处理请求
  • 504 Gateway Time-out 表示充当网关或代理的服务器,未及时从远端服务器获取请求
  • 505 HTTP Version not supported 表示服务器不支持请求的HTTP协议的版本,无法完成处理

本文来源

图解HTTP-作者:上野 宣;译者:于均良