前端进阶之HTTP篇

前言

作为一名非科班出生的前端开发,对HTTP零零散散了解了一些,但一直没有在脑海中构成系统的知识体系。所以花时间学习了一番,并作了一些总结。

HTTP的定义

在这里先对HTTP做一个简单的定义,方便内容的展开。

HTTP是在万维网上进行通信时所使用的协议方案,常用于Web浏览器和Web服务器之间的双工通信。

报文

如果说HTTP是因特网的信使,那么HTTP报文就是它用来搬东西的包裹了。

一、起始行

所有的HTTP报文都以一个起始行作为开始。请求报文的起始行说明要做些什么,响应报文的起始行说明发生了什么。

1. 方法

请求的方法描述了服务器应该执行的操作。

  • get:请求指定的资源信息,并返回实体主体。
  • hard:类似get请求,但是返回的响应中没有具体的内容,用于获取报头。
  • post:向指定资源提交数据并进行处理请求。数据被包含在请求体中。POST请求可能会导致资源的新增、删除、修改。
  • put:从客户端向服务器传送数据,并取代指定资源的内容。
  • delete:请求服务器删除指定的资源。
  • option:获取服务器支持的请求方式和预检请求(检查服务端的许可名单中是否有当前域名)。

2. URL

请求的URL描述了要对哪个资源执行方法 。

  • URL的第一部分被称为方案,说明了访问资源所使用的协议类型(HTTP协议、HTTPS协议)。
  • 第二部分给了服务器的网址。
  • 其余部分指定了Web服务器上的某个资源。

3. 状态码

响应的状态码用来告诉客户端发生了什么事情。

  • 1xx:代表请求已被接受,需要继续处理。这类响应是临时响应,只包含状态行和某些可选的响应头信息,并以空行结束。(信息)
  • 2xx:代表请求已成功被服务器接收、理解、并接受。(成功)
  • 3xx:表示要完成请求,需要进一步操作。通常,这些状态代码用来重定向。(重定向)
  • 4xx:代表了客户端看起来可能发生了错误,妨碍了服务器的处理。(客户端错误)
  • 5xx: 表示服务器无法完成明显有效的请求。这类状态码代表了服务器在处理请求的过程中有错误或者异常状态发生。(服务器错误)

4. 原因短语

原因短语为状态码提供了文本形式的解释。比如HTTP/1.0 200 OK中,OK就是原因短语。

5. 版本号

版本号会以HTTP x/y的形式出现在请求和响应报文的起始行中。为HTTP应用程序提供了一种将自己所遵循的协议版本告知对方的方式。

二、首部

HTTP首部字段向请求和响应报文中添加了一些附加信息,可以是零个,也可以是多个。

  • Date:Tue,30ct 1997 02:16:03 GMT 服务器产生响应的日期。
  • Content-length:15040 实体的主体部分包含了15040字节的数据。
  • Content-type:image/gif 实体的主体部分是一个GIF图片。
  • Accept:image/gif, image/jpeg, text/html 客户端可以接收GIF图片和JPEG图片以及HTML。

三、主体

HTTP主体就是要传输的内容。HTTP报文可以承载许多类型的数字数据:图片、视频、HTML文档、软件应用程序、信用卡事务、电子邮件等。

缓存

缓存分为强缓存和协商缓存,缓存的时间、缓存类型都由服务器控制。

一、缓存的处理步骤

  • 接收:缓存从网络中读取抵达的请求报文。
  • 解析:缓存对报文进行解析,提取出URL和各种首部。
  • 查询:缓存查看是否有本地副本可用,如果没有,就获取一份。
  • 新鲜度检测:缓存查看已缓存副本是否足够新鲜,如果不是,就询问服务器是否有任何更新。
  • 创建响应:缓存会用新的首部和已缓存的主体来构建一条响应报文。
  • 发送:缓存通过网络将响应发回给客户端。
  • 日志:缓存可选地创建一个日志文件条目来描述这个事务。

二、强缓存

在缓存文档不新鲜之前,缓存可以任意频率地被使用,无需与服务器联系。

  • Cache-Control:响应首部中的Cache-Control: max-age值定义了文档的最大使用期,以秒为单位。eg:Cache-Control: max-age=484200。
  • Expires:响应首部中的Expire指定一个绝对的过期时间。eg:Expires: Fri, 05 Jul 2002, 05:00:00 GMT。

三、协商缓存

缓存不新鲜了,会向服务器请求验证服务器资源是否发生了变化,如果没有变化,只需更新缓存中报文的首部后,将资源发送给客户端。如果发生了变化,则需要生成新的报文,资源缓存后,再发送给客户端。

  • If-Modified-Since:请求首部中的If-Modified-Since与响应首部中的Last-Modified对比,验证资源的最后修改时间。如果不同,则资源发生修改。
  • If-None-Match:请求首部中的If-None-Match与响应首部中的Etag进行对比。如果无法匹配,则资源发生修改。

TCP/IP

世界上几乎所有的HTTP通信都是由TCP/IP承载的,TCP/IP是全球计算机及网络设备都在使用的一种常用的分组交换网络分层协议集。

HTTP要传送一条报文时,会以流的形式将报文数据的内容通过一条打开的TCP连接按序传输。TCP收到数据流之后,会将数据流砍成被称作段的小数据块,并将段封装在IP分组中,通过因特网进行传输。

浏览器收到URL时,会进行的步骤:

  1. 域名解析。
  2. 获得主机的IP地址。
  3. 获得端口号。(一台设备上可能存在多个服务,通过端口号区别)
  4. 建立连接。(三次握手)
  5. 发送报文。
  6. 读取响应报文。
  7. 关闭连接。(四次挥手)

HTTPS

HTTPS就是在安全的传输层上发送的HTTP。在发送已加密的HTTP报文之前,客户端和服务器要进行一次SSL握手,建立通信连接。

  • 交换协议版本号。
  • 选择一个两端都了解的密码。
  • 对两端的身份进行认证。
  • 生成临时的会话密钥,以便加密信道。

代理

HTTP的代理服务器既是Web服务器又是Web客户端。接收客户端的请求,并返回响应;向服务器发送请求,并接收响应。

  • 文档访问控制:用于Web资源的访问控制,创建审核追踪机制,比如访问某些隐秘资料需要对应的账号权限或者密码。
  • 安全防火墙:在某一安全节点上限制数据的流入或流出。
  • 代理缓存:在服务器很远的情况下,在最近的代理服务器上缓存数据,节约访问成本。
  • 反向代理:通过代理服务器向目标服务器请求数据,可以解决跨域问题和目标服务器IP地址在当前网络被过滤的情况。
  • 内容路由器:根据不同的情况,将请求导向不同的Web服务器。
  • 转码器:在客户端的内容发送给服务器前,对数据进行处理。

网关

网关是一种简化的HTTP代理,像一个门:进去一个条请求,出来一个响应。

代理连接的是两个或多个使用相同协议的应用程序,而网关连接的则是两个或多个使用不同协议的端点,比如HTTP/HTTPS。

结束语

如果觉得意犹未尽的话,不妨看看《HTTP权威指南》,这本书是本文的重要参考。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享