http概述

http 概述

感性认知

  每天,都有数以亿万计的图片,视频,文本文件,音频文件等等资源在因特网上游戈。http 可以从遍布全世界的 wev 服务器上将这些信息块迅速、便捷、可靠地搬移到人们桌面上的web 浏览器

  http 使用的是 可靠 的数据传输协议,即使数据来自地球的另一端,它也能够确保数据在传输的 过程中不会被损坏或产生混乱(能不能传到是另一回事),因此,用户在访问信息时就不用担心其完整性了,这对用户 / 开发者来说都是一好事。

  现在我们来观察一下 http 是如何传输 web 流量的

web 客户端和服务器

  web 的内容 都是存储在 web 服务器上的 。web 服务器所使用的是 http 协议,因此也被称为http 服务器。这些 http 服务器存储了因特网中的数据,如果 http 客户端发出 请求 的话,它们会提供数据。

1.png

  这里的 Nginx 只是举个例子,它是目前应用范围最广的 服务器软件 之一,由纯 C 语言编写,具有的极高的性能,极小的内存占有和可扩展性,类似的服务器软件有很多,不再一一赘述。

  如上图所示,浏览器首先向服务器(可以在世界上的任何一台电脑,里面装有若干软件)说,“把 index.html 发给我”,这个语言就是 http,用 http 语言说的话(请求 ), 服务器软件正好可以听懂 ,然后会根据请求内容去寻找期望的对象(在这里是 index.html),如果找到了,就把它的格式,它的内容,以及它的长度都一起打包发回给浏览器( 响应 ),用的语言也是 http,浏览器可以听懂。这就是最简单的 http 模型

  

资源

  web 服务器是 web 资源的宿主,web 资源是 web 内容的源头,最简单的 web 资源就是 web 服务器文件系统中的静态文件。这些文件可以是 任何内容 ,以本人能想到的,有:文本文件,HTML 文件,JPEG 图片文件,AVI 电影文件等等。

  但资源 不一定全是静态文件 ,还可以是根据需要生成内容的 软件程序 。这些动态内容资源可以根据你的身份,所请求的信息或每天的不同时间段来产生内容。它们可以帮你进行股票交易,搜索房产数据库,或者从在线商店中购买礼物。

  总之, 所有能够提供 web 内容的都是 web 资源

媒体类型

  因特网上有数千种不同的数据类型,http 仔细的给每种要通过 web 传输的对象都打上了名为 MIME 类型的数据格式标签。最初设计 MIME(多用途因特网邮件扩展)是为了解决在不同的电子邮件系统之间搬移报文时存在的问题。MIME 在电子邮件系统中工作的非常良好,因此 http 也接纳了它,用它来描述并标记多媒体内容。

  web 服务器会为所有 http 对象数据附加一个 MIME 类型,当 web 浏览器从服务器中取回一个对象时,会去查看相关的 MIME 类型,看看它是否知道应该如何处理这个对象。

  1. HTML 格式的文本文件用 text/html 类型来标记
  2. 普通的 ASCII 文本文档用 text/plain 类型来标记
  3. JPEG 版本的图片用 image/jpeg 类型来标记
  4. GIF 格式的图片用 image/gif 类型来标记
  5. Apple 的 QuickTime 电影为 video/quicktime 类型
  6. 微软的 PowerPoint 演示文件为 application/vnd.ms-powerpoint 类型

URI

   每个 web 资源对象都有一个名字 ,这样客户端就可以说明想要的资源是什么了。服务器资源名词被称为 URI(统一资源标识符),就像因特网上的邮政地址一样。

URL

  URL(统一资源定位符)是统一资源标识符最常见的形式,它描述了一台特定服务器上某资源的特定位置。它们可以明确的说明如何从一个精确,固定的位置获取资源。

  URL 遵循一种标准格式,包括三个部分:

  1. 第一部分为 方案 ,说明了访问资源使用的协议类型,通常就是 http 协议(http://
  2. 第二部分给出了因特网上的地址(www.buaihechengzizhi.com)
  3. 其余部分指定了 web 服务器上的某个资源(/img/logo2.jpg)

几乎所有的 URI 都是 URL

URN

  URN(统一资源名),作为特定内容的唯一名称使用,与目前的资源所在地无关 。使用这些与位置无关的 URN,就可以将资源四处搬移。通过 URN,还可以用同一个名字通过多种网络访问协议来访问资源。

  比如,不论因特网标准文档 RFC 2141 身在何处,也无论被复制了多少份,都可以用下列 URN 命名它:

  urn::ietf::rfc::2141

   遗憾的是,URN 还没有大范围使用 ,它需要一个支撑架构来解析资源的位置,它的成本无疑是非常庞大的。但它确实为未来发展做出了一些令人兴奋的承诺。

以后的内容将不再区分 URI 和 URL

事物

  一个 http 事物由一条(从浏览器发出的) 请求命令 和一个(从服务器返回给浏览器的)响应结果 组成。这种通信是通过名为 http 报文的格式化数据块进行的。

方法

  http 支持不同的请求命令,这些命令被称为 http 方法。每条 http 请求报文都包含一种方法,这些方法会 告诉服务器要进行什么动作

  

HTTP 方法 描述
GET 从服务器向客户端发送命名资源
PUT 将来自客户端的数据存储到一个命名的服务器资源中去
DELETE 从服务器中删除命名资源
POST 将客户端数据发送到一个服务器网关应用程序
HEAD 仅发送命名资源响应中的 http 首部

状态码

  

HTTP 状态码 描述
200OK,文档正确返回
302 重定向,到其他地方去获取资源
404 没找到,无法找到这个资源

报文

2.png

  • 起始行:请求报文中说 要做什么 ,响应报文中说 出现了什么情况
  • 首部:零个或多个键值对,键与值之间用冒号隔开,以一个空行结束
  • 主体:空行之后就是可选的报文主体,包含了所有类型的数据。

连接

TCP/IP

  http 是个应用层协议,无需关心网络通信的具体细节,它把联网的细节都交给了通用、可靠的因特网传输协议 TCP/IP。

TCP 提供了:

  • 无差错的数据传输
  • 按序传输
  • 未分段的数据流

因特网自身就是基于 TCP/IP 的 ,是全世界计算机常用的层次化分组交换网络协议集。只要建立了 TCP 连接,客户端和服务器之间的报文交换就不会丢失,不会被破坏,也不会在接收时出现错序了。

IP 地址及端口号

  在 http 客户端向服务器发送报文前,需要用 IP(网际协议)地址和端口号在客户端和服务器之间建立一条 TCP/IP 连接。

  最初怎么获取服务器的 IP 地址和端口号呢?没错,就是 URL。

  http://47.104.14.19:80/blog/

  http://buaihechengzizhi.com:80/blog/

  http://buaihechengzizhi.com/index.html

  第一个 URL 使用了 IP 地址,47.104.14.19 及端口号 80

  第二个 URL 使用的是文本形式的域名,或者称为 主机名 ,就是 IP 地址比较人性化的别称。可以通过一种称为 DNS(域名服务)的机制将主机名转化为 IP 地址,这样所有问题都解决了。

  最后一个 URL 没有端口号,在 http 协议中,如果没有写端口号,可以假设就是 80 端口。

Web 的结构组件

  • 代理

位于客户端和服务器之间的 http 中间实体

  • 缓存

http 的仓库,使常用页面的缓存可以保存在离客户端更进的地方

  • 网关

连接其他应用程序的特殊 web 服务器

  • 隧道

对 http 通信报文进行盲转发的特殊代理

  • Agent 代理

发起自动 http 请求的半智能 web 客户端

    徐南木
    徐南木  2020-05-05, 15:24

    补充一个505状态码:
    505错误,表示“HTTP版本不受支持”,当服务器不支持请求中所使用的HTTP协议版本时就回返回此错误,最为常见的是 HTTP/1.1。
    解决办法:升级服务器
    大多数浏览器都默认Web服务器支持 1.x 的版本的 HTTP 协议。但实际上如 0.9 版今天已很少使用,关键是因为和新版本的协议比起来它们的安全性和性能都差得多。 所以,如果您在浏览器中看到这个错误,可以升级您的Web服务器软件。如果版本 1.x 的请求失败,很可能是因为您的 Web 服务器不是很好地支持 1.x 协议版本, 而不是根本不支持。

    不爱喝橙子汁
    不爱喝橙子汁  2020-05-05, 20:42

    感谢补充,我在第四节会详细介绍状态码,到时记得来看