初识HTTP

Posted 竹石

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了初识HTTP相关的知识,希望对你有一定的参考价值。

HTTP是现代全球因特网中使用的公共语言。Web浏览器、服务器和相关的Web应用程序都是通过HTTP相互通信的。

本篇简单介绍Web应用程序是如何使用HTTP进行通信的。主要介绍以下内容:

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

Web服务器:存储Web内容。

Web客户端:最常见的客户端就是浏览器,如微软的IE,谷歌的Chrome等。

Web服务器使用的是HTTP协议,如果HTTP客户端发出请求的话,他们会提供数据。HTTP客户端和HTTP服务器共同构成了万维网的基本组件。浏览器向服务器请求HTTP对象,并将这些对象显示在你的屏幕上。

如浏览页面http://www.dayidingpei.com/index.html,浏览器会向服务器www.dayidingpei.com 发送一条HTTP请求,服务器去寻找期望的对象/index.html,如果成功就将对象、对象类型、对象长度以及其他一些信息放在HTTP相应中发送给客户端。

 

2.(表示Web内容的)资源来自何方;

Web服务器是Web资源的宿主。Web资源是Web内容的源头。最简单的Web资源就是Web服务器文件系统中的静态文件。这些文件可以包含任意内容 如文本,html文件,图片、视频文件等。

但资源不一定得是静态文件。资源还可以是根据需要生成内容的软件程序,这些动态内容资源可以根据你的身份、所请求的信息或每天的不同时段来产生内容。总之,所有类型的内容来源都是资源。

2.1媒体类型

因特网上有数千种不同的数据类型,HTTP给每种要通过Web传输的对象都打上了名为MIME类型。Web服务器会为所有会为所有HTTP对象数据附加一个MIME类型。当浏览器从服务器中取回一个对象时,会去查看相关的MIME类型,看看它是否知道应该如何处理这个对象。大多数浏览器都可以处理数百种常见的对象类型。MIME类型是一种文本标记,表示一种主要的对象类型和一个特定的子类型,中间由一条斜杠来分隔。如:

  • HTML格式的文本文档由 text/html类型来标记
  • ASCII文本文档由  text/plain 类型来标记
  • JPEG格式的图片为  image/jpeg 类型
  • GIF格式的图片为  image/gif 类型
  • Apple的QuickTime电影为  video/quicktime 类型。
  • 微软的PowerPoint演示文件为  application/vnd.ms-powerpoint 类型

 

2.2 URI

每个Web服务器资源都有一个名字,这样客户端就可以说明他们感兴趣的资源是什么了。服务器资源名被称为统一资源标识符(Uniform Resource Identifier,URI)。URI就像因特网上的邮政地址一样,在世界范围内唯一标识并定位信息资源。

 URI有两种形式 分别为URL和URN。

2.3 URL

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

大部分URL都遵循一种标准格式,这种格式包含三个部分。

  1.   URL的第一部分被称为方案(scheme),说明了访问资源所使用的协议类型。这部分通常就是HTTP协议(http://)
  2.   第二部分给出了服务器的因特网地址(如:www.dayidingpei.com)
  3.   其余部分指定了Web服务器上的某个资源(如:/index.html)

 现在几乎所有的URI都是URL

2.4 URN

URI的第二种形式就是统一资源名(URN),URN是作为特定内容的唯一名称使用的,与目前的资源所在地无关。使用这些与位置无关的URN,就可以将资源四处搬移。通过URN还可以用同一个名字通过多种网络访问协议来访问资源。URN仍然处于实验阶段,还未大范围使用。

3.Web事务是如何工作的;

一个HTTP事务由一条(从客户端发往服务器的)请求命令和一个(从服务器发回客户端的)响应结果组成。这种通信是通过名为报文(HTTP message)的格式化数据块进行的。

3.1  HTTP方法

HTTP支持几种不同的请求命令,这些命令被称为HTTP方法。每条HTTP请求报文都包含一个方法。这个方法会告诉服务器要执行什么动作(获取一个html页面,运行一个网关程序、删除一个文件等)。一下是5中常见的HTTP方法:

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

3.2  状态码

每条HTTP响应报文返回时都会携带一个状态码。状态码是一个3位数字的代码,告知客户端请求是否成功,或者是否需要采取其他动作。常见的状态码如下:

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

伴随着每个数字状态码,HTTP还会发送一条解释性的“原因短语”文本,文本短语主要是用来描述,所有的处理过程使用的都是数字码。

3.3  Web页面中可以包含多个对象

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

HTTP报文是由简单字符串组成,是纯文本不是二进制代码,所以可以很方便地对其读写。从客户端发往服务器的HTTP报文称为请求报文,从服务器发往客户端的报文称为响应报文。此外没有其他类型的报文。HTTP报文包含三个部分:起始行、首部字段、主体。

5.底层TCP网络传输

5.1 TCP/IP

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

  1. 无差错的数据传输;
  2. 按顺序传输;
  3. 未分段的数据流;

只要建立了TCP连接,客户端和服务器之间的报文交换就不会丢失、不会被破坏,也不会在接收时出现错序。

HTTP协议位于TCP的上层,HTTP使用TCP来传输其报文数据。TCP则位于IP的上层。

5.2 连接、IP地址及端口号

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

在TCP中,你需要知道服务器的IP地址,以及与服务器上运行的特定软件相关的TCP端口号。获取HTTP服务器IP地址和端口号的方式是URL。

基本的浏览器连接处理步骤如下:

  1. 浏览器从URL中解析出服务器的主机名;
  2. 浏览器将服务器的主机名转换成服务器的IP地址;
  3. 浏览器将端口号(如果有的话)从URL中解析出来;
  4. 浏览器建立一条与Web服务器的TCP连接;
  5. 浏览器向服务器发送一条HTTP请求报文;
  6. 服务器向浏览器回送一条HTTP响应报文;
  7. 关闭连接,浏览器显示文档;

6.不同的HTTP协议变体

目前仍在使用的版本如下:

HTTP/0.9  HTTP的1991原型版本,只支持GET方法,不支持多媒体内容的MIME类型、各种HTTP首部,或者版本号。

HTTP/1.0 添加了版本号、各种HTTP首部、一些额外的方法,以及对多媒体对象的处理。

HTTP/1.0+ 包括持久的keep-alive连接、虚拟主机支持以及代理连接支持

HTTP/1.1 校正HTTP设计中的结构性缺陷,明确语义引入重要的性能优化措施,并删除一些不好的特性。

HTTP-NG (又名HTTP/2.0)性能的大幅优化,以及更强大的服务逻辑远程执行框架。

7.因特网上安装的大量HTTP架构组件中的一部分(Web的结构组件)。

代理:位于客户端和服务器之间的HTTP中间实体。

缓存:HTTP的仓库,使常用页面的副本可以保存在离客户端更近的地方。

网关:连接其他应用程序的特殊Web服务器。

隧道:对HTTP通信报文进行盲转发的特殊代理。

Agent代理:发起自动HTTP请求的半智能Web客户端。

 

以上是关于初识HTTP的主要内容,如果未能解决你的问题,请参考以下文章

http初识

HTTP初识

HTTP2 协议初识

http 初识

初识HTTP

Equeue初识