HTTP的相关知识

Web基础

Web 浏览器、服务器和相关的 Web 应用程序都是通过 HTTP 相互通信的。HTTP 是
现代全球因特网中使用的公共语言。
带着以下这些问题开始吧

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

    HTTP——因特网的多媒体信使

    每天都有很多图片信息、文字信息、音频、视频信息在网上传播,那些信息可能是来自地球的另一边,但是我们也可以快速流畅尽情地浏览,这要归功于HTTP使用的是可靠的数据传输协议,所以开发人员可以专注于应用程序的细节功能开发,而不用担心信息在互联网的传播过程中受到破坏。那我们一起来学习一下HTTP的一些原理与知识。

    Web客户端与服务器是如何通信的;

    网页的内容是存放在Web服务器中的,因为Web服务器使用的是HTTP协议,所以Web服务器又称为HTTP服务器。服务器存储了因特网中的数据,如果HTTP客户端发出请求的话,它们会提供相应的数据。客户端向服务器发送 HTTP请求,服务器会在 HTTP响应中回送所请求的数据,HTTP客户端和HTTP服务器共同构成了万维网的基本组件。
    最常见的客户端就是Web浏览器,比如我们常用的360浏览器、Google Chrome等等之类。
    比如我们在浏览器中输入:http://allen.men。 那么浏览器就向allen.men域名绑定的服务器发送请求,然后服务器再返回相应的内容显示在你的浏览器上,供你浏览。返回的那些内容是存放在服务器上的,通俗来说,服务器就是一台硬盘很发达,系统很稳定,24小时不关机的电脑。

    资源来自何方;

    前面说过Web内容都是存放在服务器上,那有哪些资源呢?
    静态的有html页面、word文档、MP3、视频等等,反正你能想到的想不到的所有格式的文件都是存放在HTTP服务器上的。
    除了静态资源外还有动态资源,服务器根据你登陆的账号不同返回不同的信息,或根据你操作的时间不同返回不同的东西,或都你上网看股票这些等等都是动态资源。所有的一切都是存放在服务器上。

    浏览器怎么区别不同类型的资源?

    这确实是个难题,从服务器得到的资源多种多样,只有你想不到的类型。那浏览器跟服务器们是如果区别不同类型的呢?
    HTTP仔细地给每种要通过 Web 传输的对象(资源)都打上了名为 MIME 类型(MIME type)的数据格式标签。当 Web浏览器从服务器中取回一个对象时,会去查看相关的 MIME 类型,确定类型再选择处理的方式。是图片就以图片的格式显示,是音频就要准备播放。大多数浏览器都可以处理数百种常见的对象类型。
    MIME类型是一种文本标记,表示一种主要的对象类型和一个特定的子类型,中间
    由一条斜杠来分隔。下面列举几个常用的类型。
  • HTML格式的文本文档: text/html
  • 普通的ASCII文本文档: text/plain
  • JPEG格式的图片为 image/jpeg
  • GIF格式的图片为 image/gif
  • Apple的QuickTime电影: video/quicktime
  • 微软的PowerPoint演示文件: application/vnd.ms-powerpoint

    URI

    每个Web 服务器的资源都有一个名字,小到一张图片,小到一个文档。这样客户端就可以说明它们感兴趣的资源是什么了。服务器资源名被称为统一资源标识符(Uniform Resource Identifier,URI)。URI 就像因特网上的邮政地址一样,在世界范围内唯一标识并定位信息资源。URI 有两种形式,分别称为 URL 和 URN。
    现在我们分别来看看这些资源标识符类型。
  • URL
    统一资源定位符(URL)是资源标识符最常见的形式。URL 描述了一台特定服务器
    上某资源的特定位置。它们可以明确说明如何从一个精确、固定的位置获取资源。
    大部分 URL 都遵循一种标准格式,这种格式包含三个部分。
    例如你正在浏览的博文的URL是:http://allen.men/blog/http/2017/07/09/
    1.URL 的第一部分被称为方案(scheme),说明了访问资源所使用的协议类型。这
    部分通常就是 HTTP 协议http://
    2.第二部分给出了服务器的因特网地址allen.men
    3.其余部分指定了 Web 服务器上的某个资源blog/http/2017/07/09/
    现在,几乎所有的 URI 都是 URL。
  • URN
    URI 的第二种形式就是统一资源名(URN)。URN 是作为特定内容的唯一名称使用
    的,与目前的资源所在地无关。使用这些与位置无关的 URN,就可以将资源四处搬移。
    URN 仍然处于试验阶段,还未大范围使用。为了更有效地工作,URN 需要一个支撑架构来解析资源的位置。而此类架构的缺乏也延缓了其被采用的进度。但 URN确实为未来发展作出了一些令人兴奋的承诺。在这里我们偏重于学习理解URL。

Web 事务是怎样工作的;

客户端是怎样通过 HTTP 与 Web 服务器及其资源进行事务处理的。一个 HTTP 事务由一条(从客户端发往服务器的)请求命令和一个(从服务器发回客户端的)响应结果组成。这种通信是通过名为 HTTP 报文(HTTP message)的格式化数据块进行的。
HTTP方法(HTTP method)
HTTP 支持几种不同的请求命令,这些命令被称为 HTTP 方法(HTTP method)。每
条 HTTP 请求报文都包含一个方法。这个方法会告诉服务器要执行什么动作(获取
一个 Web 页面、运行一个网关程序、删除一个文件等)。
常见的方法有以下几种

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

状态码
每条 HTTP 响应报文返回时都会携带一个状态码。状态码是一个三位数字的代码,
告知客户端请求是否成功,或者是否需要采取其他动作。
例如我们常见的404错误,就是一个404状态码,表示没找到资源。

  • 200: OK。文档正确返回
  • 302: Redirect(重定向)。到其他地方去获取资源
  • 404: Not Found(没找到)。无法找到这个资源

Web页面中可以包含多个对象
应用程序完成一项任务时通常会发布多个 HTTP 事务。比如,你正在用浏览器看我的博文,而你现在所看的内容并不是来自一个服务器。浏览器会执行一个事务来获取描述页面布局的 HTML“框架”,这部分内容是由我博客框架的服务器提供。而你们看到的文字是由github的服务器提供,因为我的博文是存放在免费的github服务器上的。

HTTP 通信所使用的报文格式;

HTTP 报文是由一行一行的简单字符串组成的。HTTP 报文都是纯文本,不是二进制代码,所以人们可以很方便地对其进行读写。
有两种报文,1、从 Web 客户端发往 Web 服务器的 HTTP 报文称为请求报文(request message)。2、从服务器发往客户端的报文称为响应报文(response message)。
HTTP 请求和响应报文的格式很类似。
HTTP 报文包括以下三个部分。

  • 起始行
    报文的第一行就是起始行,在请求报文中用来说明要做些什么,在响应报文中说明出现了什么情况。
  • 首部字段
    起始行后面有零个或多个首部字段。每个首部字段都包含一个名字和一个值,为了便于解析,两者之间用冒号(:)来分隔。首部以一个空行结束。添加一个首部字段和添加新行一样简单。
  • 主体
    空行之后就是可选的报文主体了,其中包含了所有类型的数据。请求主体中包括了要发送给 Web 服务器的数据;响应主体中装载了要返回给客户端的数据。起始行和首部都是文本形式且都是结构化的,而主体则不同,主体中可以包含任意的二进制数据(比如图片、视频、音轨、软件程序)。当然,主体中也可以包含文本。

举个访问我的博文的例子:
HTTP 请求报文
起始行:GET blog/http/2017/07/09 HTTP/1.0
GET获取内容的命令,资源的路径,使用的是 1.0 版的 HTTP 协议。
首部字段:Accept: text/* Accept-Language:zh-Hans-CN
有两条命令,请求的是文本、语言是中文。请求报文没有主体,因为从服务器上 GET 一个简单的文档不需要请求数据。
HTTP 响应报文
HTTP/1.0 200 OK
这条响应中包含了 HTTP 的版本号(HTTP/1.0)、一个成功状态码(200)、一个描述性的原因短语(OK)。
Content-type: text/html Content-length: 403
首部字段说明了响应主体的长度, 说明了文档的 MIME 类型。
在所有这些内容之后跟着包含了所请求文档的响应主体。这里是md转换成的HTML代码,太长了就不贴出来了。

底层 TCP 网络传输;

HTTP 是个应用层协议。HTTP 无需操心网络通信的具体细节,因为它把联网的细节都
交给了通用、可靠的因特网传输协议 TCP/IP。
传输控制协议(Transmission Control Protocol,TCP)有三个特点,无差错数据传输、数据总是会按照发送的顺序到达、可以在任意时刻以任意尺寸将数据发送出去。
因特网自身就是基于 TCP/IP 的,TCP/IP 是全世界的计算机和网络设备常用的层次
化分组交换网络协议集。TCP/IP 隐藏了各种网络和硬件的特点及弱点,使各种类型
的计算机和网络都能够进行可靠地通信。
只要建立了 TCP 连接,客户端和服务器之间的报文交换就不会丢失、不会被破坏,
也不会在接收时出现错序了。

  • 连接、IP地址及端口号
    在 HTTP 客户端向服务器发送报文之前,需要用网际协议(Internet Protocol,IP)地址和端口号在客户端和服务器之间建立一条 TCP/IP 连接。
    在 TCP 中,你需要知道服务器的 IP 地址,以及与服务器上运行的特定软件相关的TCP 端口号。
    那怎么得到IP和端口号的呢?
    例如以下三个网址:
    http://210.38.243.2:8081/moodle/  
    http://allen.men:80/blog/http/2017/07/09/#more
    http://allen.men/blog/http/2017/07/09/#more
    
    第一个网址是我学校交作业的网址,用的是http协议,服务器IP是210.38.243.2,端口是8081/,资源路径是moodle。我想不明白为什么学校不购买个域名呢?
    第二个是这篇博文的网址,用的是github的服务器192.30.255.113,但是没有显示出来,因为github.com有用域名映射了,然后我又自己购买了一个域名allen.men再射了一次。第二跟第三的区别是第二个有端口号,如果没有端口号就默认是80.

    不同的 HTTP 协议变体;

    因特网上安装的

    大量 HTTP 架构组件中的一部分。

Allen151 wechat
评论功能没弄好,如果有问题,欢迎在我公众号上提问!!
坚持原创,您的支持将鼓励我继续创作!