前言
HTTP,全称是 Hyper Text Transfer Protocol,译为“超文本传输协议”(超文本转移协议)。
正文
在很久很久以前,人们为了在世界范围内轻松知识共享,提出了 Web(World Wide Web)的概念。简单来说,就是在 Web 浏览器的地址栏输入 Web 页面对应的 URL,Web 浏览器从 Web 服务器端获取到文件资源等信息,从而显示出 Web 页面。它使用 HTTP 协议为规范,完成在客户端与服务端一系列的运作流程。
最初,HTTP 协议出现是为了解决文本传输的难题。但由于协议本身非常简单,现在 HTTP 协议已经超出了 Web 这个框架,被运用到各种场景里。
尽管我们常说,在 Web 中客户端与服务器端是通过 HTTP 协议进行通信的,但不代表这个通信的全过程都由 HTTP 就能完成的。
通常使用的的网络是在 TCP/IP 协议簇的基础上运作的,而 HTTP 属于它内部的一个子集。
概念
协议(Protocol)
在计算机与网络设备进行通信,双方需要基于相同的方法。不同的硬件、操作系统之间的通信,所有的这一切都需要一种规则,这种规则被称为“协议”。
TCP/IP 协议(簇)
TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议)是指能够在多个不同网络间实现信息传输的协议簇(Protocol Suite,也有译作“协议族”)。TCP/IP 协议不仅仅指的是 TCP 和 IP 两个协议,而是指由 FTP、SMTP、TCP、IP 等协议构成的协议簇。由于在 TCP/IP 协议中 TCP 协议和 IP 协议最具代表性,因此被称为 TCP/IP 协议。
计算机网络体系结构分层
OSI(Open System Interconnect)七层模型:
OSI 七层模型与 TCP/IP 四层模型的区别:
OSI 七层模型:
应用层(Application Layer) 网络服务与最终用户的一个接口。 协议有:HTTP、FTP、TFTP、SMTP、SNMP、DNS、TELNET、POP3、DHCP 等。 表示层(Presentation Layer) 数据的表示、安全、压缩。 格式有 JPEG、ASCII、EBCDIC、加密格式等。 会话层(Session Layer) 建立、管理、终止会话。 对应主机进程,指本地主机与远程主机正在进行的会话。 传输层(Transport Layer) 定义传输数据的协议端口号,以及流控和差错校验。 协议有:TCP、UDP,数据包一旦离开网卡即进入网络传输层。 网络层(Network Layer) 进行逻辑地址寻址,实现不同网络之间的路径选择。 协议有:ICMP、IGMP、IP(IPv4、IPv6)。 数据链路层(Data Link Layer) 建立逻辑连接、进行硬件地址寻址、差错校验等功能。(由底层网络定义协议) 将比特组合层字节进而组合成帧,用 MAC 地址访问介质,错误发现但不能纠正。 物理层(Physical Layer) 建立、维护、断开物理连接。(由底层网络定义协议)
TCP/IP 四层模型:
TCP/IP 协议簇按层次分别分为:应用层、传输层、网络层和数据链路层。
应用层: 应用层决定了向用户提供应用服务时通信的活动。 TCP/IP 协议簇内预设了各类通用的应用服务。比如:FTP、DNS 服务就是其中两类。 HTTP 协议也处于该层。 传输层: 传输层对应上层应用层,提供处于网络连接中的两台计算机之间的数据传输。 在传输层有两个性质不同的协议:TCP 和 UDP。 网络层(网络互连层): 网络层用来处理在网络上流动的数据包。数据包是网络传输的最小数据单位。该层规定了通过怎样的路径(所谓的传输路线)到达对方计算机,并把数据包传送给对方。 与对方计算机之间通过多台计算机或网络设备进行传输时,网络层所起的作用就是在众多的选项内选择一条传输线路。 链路层(数据链路层、网络接口层) 用来处理连接网络的硬件部分。包括控制操作系统、硬件的设备驱动、NIC(网络适配器,即网卡)、及光纤等物理可见部分(还包括连接器等一切传输媒介)。硬件上的范畴均在链路层的作用范围之内。
三、HTTP
HTTP 状态码
2XX(成功) 200 OK:表示请求在服务端被正常处理了。 204 No Content:表示请求已正常处理,但在返回的响应报文中不含实体的主体部分。 206 Partial Content:表示客户端进行了范围请求,而服务器成功执行了这部分的 GET 请求。 3XX(重定向) 301 Moved Permanently:表示永久重定向。它会按照响应报文的 Location 字段重新发起请求。 302 Found:表示临时重定向。与 301 相似,但它只是临时性质的,换句话说,资源对应 URI 未来还有可能发生改变。 303 See Other:表示请求对应的资源存在着另一个 URI,应使用 GET 方法定向获取请求的资源。 304 Not Modified:表示服务器端资源未发生改变,可直接使用客户端未过期的缓存。尽管 304 被划分在 3XX 类别中,但它和重定向没有关系。 307 Temporary Redirect:临时重定向,与 302 Found 有着相同的含义。但它不会从 POST 变成 GET。 4XX(客户端错误) 400 Bad Request:表示请求报文中存在语法错误。 401 Unauthorized:表示用户认证失败,即请求需要有认证信息。 403 Forbidden:表示对请求资源的访问被服务器拒绝了。 404 Not Found:表示服务器上无法找到请求的资源。 5XX(服务器错误) 500 Internal Server Error:表示服务器端在执行 请求时发生了错误。 503 Service Unavailable:表示服务器暂时处于超负载或正在进行停机维护,现在无法处理请求。
HTTP 报文
报文首部 空行 报文主体 报文首部分为:请求报文首部、响应报文首部 请求报文包括:请求行、首部字段(请求首部字段、通用首部字段、实体首部字段)、其他 响应报文包括:状态行、首部字段(响应首部字段、通用首部字段、实体首部字段)、其他 请求行:由方法、URI、HTTP 版本组成 状态行:由HTTP 版本、状态码(数字和原因短语)组成
未完待续...