HTTP

370 阅读14分钟

一 HTTP概述

本章主要内容:

  • web客户端与服务器如何通信
  • 资源来自何方
  • web事务是怎样工作的
  • HTTP通信所使用的报文格式
  • 底层TCP网络传输
  • 不同的HTTP协议变体
  • 因特网上安装 大量HTTP架构组件中的一部分

1.1 HTTP--因特网的多媒体信使

主要讲http在我们使用web时的角色, 此处照搬

每天,都有数以亿万计的JPEG图片、HTML页面、文本文件、MPEG电影、WAV音频文件、Java小程序和其他资源在因特网上游弋。HTTP可以从遍布全世界的Web服务器上将这些信息块迅速、便捷、可靠地搬移到人们桌面上的Web浏览器上去。

HTTP使用的是可靠的数据传输协议,因此即使数据来自地球的另一端,它也能够确保数据在传输的过程中不会被损坏或产生混乱。这样,用户在访问信息时就不用担心其完整性了,因此对用户来说,这是件好事。而对因特网应用程序开发人员来说也同样如此,因为这样就无需担心HTTP通信会在传输过程中被破坏、复制或产生畸变了。开发人员可以专注于应用程序特有细节的编写,而不用考虑因特网中存在的一些缺陷和问题。

下面,就让我们来近距离地观察一下HTTP是如何传输Web流量的。

1.2 web客户端与服务器

web内容都是存储在Web服务器上的。Web服务器所使用的是HTTP协议,因此经常会被称为HTTP服务器。

客户端也就是我们的主机, 服务器就是存储我们东西的主机 我们浏览内容实际上就是访问其他电脑上存储的东西 而专门提供东西给我们访问的主机就被形象地称为服务器

我们(客户端)访问服务器的时候需要发送请求, 成为HTTP请求 服务器对我们的请求做反应就是HTTP响应

1.3 资源

web服务器存储着web资源, 也就是web服务器是web资源的宿主 最简单的web资源就是web服务器文件系统中的静态文件,如文本为文件, html文件, word文件, adobe的acrobat文件, jpeg图片文件, avi电影文件等等等等

资源不一定必须是静态文件 还可以是根据需要生成内容的软件程序 如返回你需要的时间: return "用户你好, 现在是" + 获取现在时间

总之,所有类型的内容来源都是资源

1.3.1 媒体类型

HTTP仔细地给每种要通过Web传输的对象都打上了名为MIME类型(MIME type)的数据格式标签。

MIME类型(是一种文本标记)表示:

content-type: image/jpeg

中间有一条斜杠

  • html格式的文本文档: text/html
  • 普通ASCII文本文档: text/plain
  • jpeg格式的图片: image/jpeg
  • GIF格式的图片: image/gif
  • Apple的quickTime电影: video/quicktime
  • 微软的PowerPoint: application/vnd.mspowerpoint

常见的MIME类型有数百个, 实验性或用途有限的MIME类型更多

1.3.2 URI

Uniform Resource Identifier

每个Web服务器资源都有一个名字,这样客户端就可以说明它们感兴趣的资源是什么了

服务器资源名被称为统一资源标识符(Uniform Resource Identifier, URI), 在世界范围内唯一标识并定位信息资源

例如:

http://www.joes-hardware.com/specials/saw-blade.gif

使用HTTP协议
进入www.joes-hardware.com
获取specials文的件夹下名为saw-blade.gif

1.3.3 URL

Uniform Resource Locator

URI是指某个资源如何被独一无二地标识出来, 这个标志就叫URI 而URL是以定位来标识的, 是URI的一种实现

大部分URL都遵循一种标准格式, 此格式包含三部分:

  • 第一部分(方案, scheme): 说明了资源使用的协议类型, 如常见的http://
  • 第二部分: 给出了服务器的因特网地址
  • 第三部分: 指定了web服务器上的某个资源

现在几乎所有的URI都是使用URL

URL的缺点: 更改资源位置后你需要更换URL

1.3.4 URN

Uniform Resource Name

URN是作为特定内容 的唯一名称使用的, 与目前的资源所在地无关

缺乏支撑框架, 目前未被大规模采用

和url对比, 好比一个是家庭地址(URL), 另一个是身份证号码(URN) 而URI则指如何确定一个人

1.4 事务

事务 由 一条请求命令(从客户端发往服务器, 告诉服务器我需要什么) 和 一个响应结果(从服务器发回客户端, 告诉客户端好的, 你要的在这里) 组成

这种通信是通过名为HTTP报文的格式化数据块进行的

1.4.1 方法

HTTP支持几种不同的请求命令, 这些命令被称为HTTP方法

每条HTTP请求报文都包含一个方法

服务器根据方法执行动作

HTTP方法:

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

1.4.2 状态码

每条HTTP响应报文返回时都会携带一个状态码 状态码表示服务器对你的请求的响应的结果如何 状态码为三位数的数字, 加上一个短语(解释性的原因短语文本) 例如: 200 ok 表示文档正确返回

再如熟悉的404 not found, 表示无法找到这个资源

第三章将详细解释HTTP状态码

1.4.3 web页面中可以包含多个对象

应用程序完成一项任务时通常会发布多个HTTP事务 如某个页面有很多图片, 那么浏览器将发布一系列HTTP事务获取并显示这些图片

浏览器会执行一个事务来获取描述页面布局的HTML"框架"

任何发布另外的HTTP事务来获取每个嵌入式图片, 图像面板, java小程序等

这些嵌入式资源可能不在同一个服务器上, 因此一个web页面通常不是单个资源而是一组资源的集合

1.5 报文

第三章将深入研究HTTP报文

HTTP请求和响应报文的大致结构: HTTP报文是纯文本, 由多行简单字符串组成 例如:

  1. 请求报文:
// 起始行
GET /test/something.txt HTTP/1.0

首部
Accept: text/*
Accept-Language: en,fr
  1. 响应报文
// 起始行
HTTP/1.0 200 ok

// 首部
Content-type: text/plain
Content-length: 19

// 主体
hi, here are some message!
  • 请求报文

从web客户端发往web服务器的HTTP报文成为请求报文

  • 响应报文

从服务器发往客户端的报文成为响应报文

HTTP报文结构:

  1. 起始行

    报文的第一行就是起始行 在请求报文中用来说明要做说明 在响应报文中说了什么情况

  2. 首部字段

    起始行后有0个或多个首部字段 每个首部字段都包含一个名字和一个值 二者使用:来分割 首部以一个空行结束

  3. 主体

    包含了所有类型的数据 请求主体: 包含了要发送给web服务器的数据 响应主题: 装载了要返回给客户端的数据 起始行和首部都是文本形式且都是结构化的 而主体可包含任意的二进制数据(如图片, 视频, 软件程序等) 主体当然也可以包含文本

简单的报文实例: 学完vue想做项目, 要用到axios, 但是对于计算机网络的了解不大够, 虽然学校开了计算机网络这门课, 但介绍的主要是tcp/ip, 而前端需要更多的则是http! 你们随意, 我重开了T_T

一 HTTP概述

本章主要内容:

  • web客户端与服务器如何通信
  • 资源来自何方
  • web事务是怎样工作的
  • HTTP通信所使用的报文格式
  • 底层TCP网络传输
  • 不同的HTTP协议变体
  • 因特网上安装 大量HTTP架构组件中的一部分

1.1 HTTP--因特网的多媒体信使

主要讲http在我们使用web时的角色, 此处照搬

每天,都有数以亿万计的JPEG图片、HTML页面、文本文件、MPEG电影、WAV音频文件、Java小程序和其他资源在因特网上游弋。HTTP可以从遍布全世界的Web服务器上将这些信息块迅速、便捷、可靠地搬移到人们桌面上的Web浏览器上去。

HTTP使用的是可靠的数据传输协议,因此即使数据来自地球的另一端,它也能够确保数据在传输的过程中不会被损坏或产生混乱。这样,用户在访问信息时就不用担心其完整性了,因此对用户来说,这是件好事。而对因特网应用程序开发人员来说也同样如此,因为这样就无需担心HTTP通信会在传输过程中被破坏、复制或产生畸变了。开发人员可以专注于应用程序特有细节的编写,而不用考虑因特网中存在的一些缺陷和问题。

下面,就让我们来近距离地观察一下HTTP是如何传输Web流量的。

1.2 web客户端与服务器

web内容都是存储在Web服务器上的。Web服务器所使用的是HTTP协议,因此经常会被称为HTTP服务器。

客户端也就是我们的主机, 服务器就是存储我们东西的主机 我们浏览内容实际上就是访问其他电脑上存储的东西 而专门提供东西给我们访问的主机就被形象地称为服务器

我们(客户端)访问服务器的时候需要发送请求, 成为HTTP请求 服务器对我们的请求做反应就是HTTP响应

1.3 资源

web服务器存储着web资源, 也就是web服务器是web资源的宿主 最简单的web资源就是web服务器文件系统中的静态文件,如文本为文件, html文件, word文件, adobe的acrobat文件, jpeg图片文件, avi电影文件等等等等

资源不一定必须是静态文件 还可以是根据需要生成内容的软件程序 如返回你需要的时间: return "用户你好, 现在是" + 获取现在时间

总之,所有类型的内容来源都是资源

1.3.1 媒体类型

HTTP仔细地给每种要通过Web传输的对象都打上了名为MIME类型(MIME type)的数据格式标签。

MIME类型(是一种文本标记)表示:

content-type: image/jpeg

中间有一条斜杠

  • html格式的文本文档: text/html
  • 普通ASCII文本文档: text/plain
  • jpeg格式的图片: image/jpeg
  • GIF格式的图片: image/gif
  • Apple的quickTime电影: video/quicktime
  • 微软的PowerPoint: application/vnd.mspowerpoint

常见的MIME类型有数百个, 实验性或用途有限的MIME类型更多

1.3.2 URI

Uniform Resource Identifier

每个Web服务器资源都有一个名字,这样客户端就可以说明它们感兴趣的资源是什么了

服务器资源名被称为统一资源标识符(Uniform Resource Identifier, URI), 在世界范围内唯一标识并定位信息资源

例如:

http://www.joes-hardware.com/specials/saw-blade.gif

使用HTTP协议
进入www.joes-hardware.com
获取specials文的件夹下名为saw-blade.gif

1.3.3 URL

Uniform Resource Locator

URI是指某个资源如何被独一无二地标识出来, 这个标志就叫URI 而URL是以定位来标识的, 是URI的一种实现

大部分URL都遵循一种标准格式, 此格式包含三部分:

  • 第一部分(方案, scheme): 说明了资源使用的协议类型, 如常见的http://
  • 第二部分: 给出了服务器的因特网地址
  • 第三部分: 指定了web服务器上的某个资源

现在几乎所有的URI都是使用URL

URL的缺点: 更改资源位置后你需要更换URL

1.3.4 URN

Uniform Resource Name

URN是作为特定内容 的唯一名称使用的, 与目前的资源所在地无关

缺乏支撑框架, 目前未被大规模采用

和url对比, 好比一个是家庭地址(URL), 另一个是身份证号码(URN) 而URI则指如何确定一个人

1.4 事务

事务 由 一条请求命令(从客户端发往服务器, 告诉服务器我需要什么) 和 一个响应结果(从服务器发回客户端, 告诉客户端好的, 你要的在这里) 组成

这种通信是通过名为HTTP报文的格式化数据块进行的

1.4.1 方法

HTTP支持几种不同的请求命令, 这些命令被称为HTTP方法

每条HTTP请求报文都包含一个方法

服务器根据方法执行动作

HTTP方法:

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

1.4.2 状态码

每条HTTP响应报文返回时都会携带一个状态码 状态码表示服务器对你的请求的响应的结果如何 状态码为三位数的数字, 加上一个短语(解释性的原因短语文本) 例如: 200 ok 表示文档正确返回

再如熟悉的404 not found, 表示无法找到这个资源

第三章将详细解释HTTP状态码

1.4.3 web页面中可以包含多个对象

应用程序完成一项任务时通常会发布多个HTTP事务 如某个页面有很多图片, 那么浏览器将发布一系列HTTP事务获取并显示这些图片

浏览器会执行一个事务来获取描述页面布局的HTML"框架"

任何发布另外的HTTP事务来获取每个嵌入式图片, 图像面板, java小程序等

这些嵌入式资源可能不在同一个服务器上, 因此一个web页面通常不是单个资源而是一组资源的集合

1.5 报文

第三章将深入研究HTTP报文

HTTP请求和响应报文的大致结构: HTTP报文是纯文本, 由多行简单字符串组成 例如:

  1. 请求报文:
// 起始行
GET /test/something.txt HTTP/1.0

首部
Accept: text/*
Accept-Language: en,fr
  1. 响应报文
// 起始行
HTTP/1.0 200 ok

// 首部
Content-type: text/plain
Content-length: 19

// 主体
hi, here are some message!
  • 请求报文

从web客户端发往web服务器的HTTP报文成为请求报文

  • 响应报文

从服务器发往客户端的报文成为响应报文

HTTP报文结构:

  1. 起始行

    报文的第一行就是起始行 在请求报文中用来说明要做说明 在响应报文中说了什么情况

  2. 首部字段

    起始行后有0个或多个首部字段 每个首部字段都包含一个名字和一个值 二者使用:来分割 首部以一个空行结束

  3. 主体

    包含了所有类型的数据 请求主体: 包含了要发送给web服务器的数据 响应主题: 装载了要返回给客户端的数据 起始行和首部都是文本形式且都是结构化的 而主体可包含任意的二进制数据(如图片, 视频, 软件程序等) 主体当然也可以包含文本

简单的报文实例: