前言
我们从一道面试题说起:相信很多人在前端面试都遇到了这个问题:从输入URL到页面加载发生了什么
。这道题的答案涉猎的范围很广,牵扯了许许多多的知识点。而对于这道题来说,答案可以简单,也可以复杂;但是不管你是简单的回答,还是复杂完整的回答,都绕不开一个点:HTTP协议
。而对于一个前端工程师来说,HTTP协议,也是必须要掌握的。
因此,我打算开这么一个关于HTTP协议相关知识点的系列,希望大家有所收获。
基本组件
构成HTTP协议的基本组件是:HTTP服务器和HTTP客户端。客户端发起HTTP请求,向HTTP服务器请求相关的资源,而后HTTP服务器接收到请求后,作出HTTP响应发送给客户端,给予客户端相应的资源。
主要的概念
下面我们来知悉一些主要的概念:
资源
媒体类型:又叫MIME type 用于标志当前资源所属的数据格式标签,即用于HTTP服务器该用什么方式去处理当前对象。MIME type是一种文本标记,表示一种主要的对象类型和一个特定的子类型。
- text/html: HTML格式的文本文档
- text/plain:普通的ASCII文本文档
- image/jpeg:jpeg格式的图片
URI:统一资源标识符,用于服务器资源唯一标识并定位信息资源。其有2 种表现形式:URL和URN
URL:统一资源定位符,是资源标识符的常见形式。用于描述一台服务器上某资源的特定位置。可以明确说明如何从一个精确、固定的位置获取资源。
- 组成:scheme(方案)://address(服务器地址)/path(资源路径)
URN:统一资源名,URI的第二种形式。URN作为特定内容的唯一名称使用,与目前资源所在地无关,这样来一来最大的好处就是资源可以随意移动,而不会影响访问。目前,URN仍处于试验阶段,还未大范围使用。
事务
一个HTTP事务由一个HTTP请求和一个HTTP响应组成,组成部分则是HTTP报文(格式化数据块)
方法:每条HTTP请求都包含一个方法,这些方法会告诉HTTP服务器要执行什么操作
- GET、POST、PUT、DELETE、HEAD
状态码:一个三位数的代码,告知客户端的请求状态,是否成功或者采取其他动作。伴随每个状态码,HTTP还会发送对应的解释性短语
- 200(OK)、302(Redirect)、404(Not Found)、500(Server Error)
报文:用于让HTTP客户端,服务端通信的格式化数据库。由一行一行的简单字符串组成。HTTP报文都是纯文本,非二进制代码。
- 请求报文 和 响应报文
GET /index.html HTTP/1.0 | 起始行 |
---|---|
Accept: text/html | 以下为首部 |
Accept-Language: zh-CN,zh |
HTTP/1.0 200 OK | 起始行 |
---|---|
Content-Type: text/html | 以下为首部 |
Content-length: 1024 | |
一些主体内容 | 主体 |
链接
主要为TCP/IP链接,HTTP报文就是通过TCP协议进行传输的。因特网自身就是基于TCP/IP协议的,而TCP/IP协议也是全世界的计算机网络设备常用的层次化分组网络协议集,因此了各种网络和硬件的特点以及缺点,使得各设备能够进行可靠通信。
TCP/IP:提供了无差错、按顺序的数据传输,以及未分段的数据流(可以在任意时刻以任意尺寸将数据发送出去),建立连接后,客户端和服务端直接的报文便不会丢失,不会破坏,不会在接收时出现错误。
IP地址、端口号:ip:port,构成一个地址。同一个ip不同端口也是不同地址。如果端口号不写,则默认为80,ssl的情况下则为:443
- 192.168.1.1
- 192.168.1.1:8080
协议版本
协议发展至今有多个版本,HTTP程序应该尽可能的兼容不同的HTTP协议版本.
- HTTP/0.9
- HTTP/1.0
- HTTP/1.0+
- HTTP/1.1
- HTTP-NG(HTTP/2.0)
Web的结构组件
- 代理:位于客户端和服务器之间的HTTP中间实体。用于接收客户端请求后,转发给服务器(这个过程可能对请求进行修改)。
- 缓存:是一种特殊的代理服务器,可以将经过代理传送的常用文档复制保存起来,提供给下一个请求同样文档的客户端使用。
- 网关:一种特殊的服务器,作为其他服务器的中间实体使用。通常是将HTTP流量转换为其他协议。如:一个HTTP/FTP网关会通过HTTP请求接收FTP URI的请求。
- 隧道:对HTTP通信报文进行盲转发的特殊代理。常见的就是HTTP/SSL(HTTPS),既:在HTTP链接承载加密的安全的套接字层SSL流量。
- Agent 代理:发起自动HTTP请求的半智能化WEB客户端。