Http权威指南笔记(一)——概述

Web浏览器、服务器和应用程序之间的通信都可以听过Http协议实现,本篇先对Http协议中的几个概念做一个总体的介绍。

1 Web服务端和客户端

一般Web服务器是用于存储Web内容的,负责向客户端提供数据。其中的内容可以被Web客户端通过HTTP协议进行访问,服务器在客户端提出HTTP请求后,会做在HTTP响应中回送所请求的数据。而HTTP客户端一般最常见的就是我们的浏览器,不过现在很多移动端的APP也可以看做是一个HTTP客户端。一次客户端和服务端之间的通信,一般如下所示:
HTTP服务端和客户端

2 资源

Web服务器就是Web资源的宿主,Web服务的主要目的之一就是提供Web资源给客户端使用。Web服务器上存放的那些静态文件就是最简单的一种Web资源,如:“文本文件、 HTML 文件、微软的 Word 文件、 Adobe 的 Acrobat 文件、 JPEG 图片文件、 AVI 电影文件,或所有其他你能够想到的格式。虽然静态文件是一种Web资源,但是Web资源并不一定就是静态文件,还有可能是由程序动态生成的数据,比如你再购物网站上搜索你感兴趣的商品,所展示的页面的数据就是由程序动态的根据你的搜索添加从数据库中检索出来的。

2.1 媒体类型

因为Web服务器上所有的内容来源我们都可以称之为资源。所以Web资源是非常庞大的,数据类型是非常繁多的,为了区分和处理,HTTP协议给各种资源都打上了一种称为媒体类型**(MIME TYPE)的标签。最初设计MIME的目的是用于邮件系统,但是由于其非常好用,所以HTTP协议中也采纳MIME用于标记多媒体内容(如:img/jpeg表示内容是一张jpeg格式的图片,video/quickTime表示数据是一段视频)。有了MIME-TYPE的好处在于,可以告诉HTTP客户端(浏览器)如果去处理数据内容,如:是显示一张图片,还是播放一段视频等。

2.2 URI

上面先总体说了Web资源的概念和其媒体类型的特征,但是我们怎么去获取服务器上的资源呢?这就需要用到URI了。URI被称为统一资源标识符(Uniform Resource Identier,URI)其意义就类似于我们实际生活中的地址一样。如果我们有了某个人的具体地址,就能很轻松的找到这个人,所以Web服务器上的资源了有了唯一的URI,那我们也就能很轻松的定位并获取该资源了。

2.2.1 URL

统一资源定位符(URL)是资源标识符最常见的形式。大部分URL都遵循一种标准格式,这种格式由三部分组成:

  • scheme:说明访问资源所使用的协议,如:HTTP协议(http://)
  • 第二部分为服务器的地址,如:www.example.com
  • 其余部分用于指定服务器上的具体某个资源,如:/doc/guide.html

2.2.2 URN

统一资源名(URN)为URI的第二种形式。其是作为当前资源特定名称使用,和其所在地无关。也就是说,我们从一个地方将该资源转移到另外一个地方,不会影响他的URN,我们还是能通过其URN定位到该资源

3 事务

所谓的事务就是指一条HTTP请求和一条HTTP响应组成,这种通信是通过HTTP报文(一种格式化数据)进行。整个请求过程中涉及到多个HTTP协议组成部分,下面分开说明。

3.1 方法

HTTP协议支持多种不同的请求命令,这些命令就被称之为HTTP方法(HTTP method)。每种方法都代表了一种具体需要执行的动作,常见的HTTP方法如下:
HTTP方法

3.2 状态码

每条HTTP响应报文都好办一个状态码,其是一个三位数的数字,告知客户端本次请求的结果(是否成功,或者还需要采取其他动作),常见的状态码:
HTTP状态码
一般状态码的后面 都会紧跟着该状态码的一条解释语句,如:200 OK。后面的的’OK‘就是一条解释语句。

3.3 一项任务和事务的关系

上面说到一般一次请求和返回组成一个事务。这里的一次请求仅仅就是一次HTTP请求。并不表示一个页面的所有请求。这里将整个页面所有数据的请求和展示称之为“一项任务”的话,那一项任务可能会包含多个事务,比如一个页面由文字、图片、视频三部分组成。那么一般第一次请求的时候,仅仅将页面的文字部分数据获取到客户端,接着客户端还要根据获得的信息去请求图片和视频。这里请求图片、或者是请求视频都会作为另外一项事务。

报文

HTTP报文是由一行一行简单的字符串组成的,其都是纯文本的,所以非常方便阅读,一个简单的报文如下:
HTTP报文
报文一般包括如下几个部分:

  • 起始行:报文的第一行就是起始行,请求报文中该部分用于说明客户端需求是什么,响应报文中的该部分用于说明本次操作出现的情况和结果。
  • 首部字段:起始行后面会有0个或者多个首部字段,每个首部字段都是键值对形式,键和值之间用“:”隔开,最后首部以一个空行结束。
  • 主体:这里面就是本次报文中的数据了,请求报文中的主体数据是发给服务器的,响应报文中的主体数据是给客户端的。主体和前面的起始行、首部字段有个不同之处在于,主体可以是纯文本也可以是二进制数据,但是起始行和首部字段都是纯文本内容。

4 连接

之前的内容都是在讨论HTTP协议的构成内容,但是客户端和服务器到底是怎么完成通信的呢,这就涉及到连接的问题了。HTTP 是个应用层协议。HTTP 无需操心网络通信的具体细节;它把联网的细节都交给了通用、可靠的因特网传输协议 TCP/IP。
TCP 提供了:

  • 无差错的数据传输;
  • 按序传输(数据总是会按照发送的顺序到达);
  • 未分段的数据流(可以在任意时刻以任意尺寸将数据发送出去)。

只要建立了 TCP 连接,客户端和服务器之间的报文交换就不会丢失、不会被破坏,也不会在接收时出现错序了。
用网络术语来说,HTTP 协议位于 TCP 的上层。HTTP 使用 TCP 来传输其报文数据。与之类似,TCP 则位于 IP 的上层,典型的TCP/IP五层模型如下:
TCP/IP五层模型

4.1 IP地址和端口号

TCP/IP连接的时候,需要用到IP地址和端口号。IP地址和端口号就有点类似于我们打电话的时候,IP地址是总机号码,但是为了找到具体的人,还需要分机号(端口号)。那怎么获取IP地址和端口号呢?就是通过前面说的URL,我们看两条典型的URL:

一般一个URL中Scheme之后就是服务器地址了,可以直接像第一条URL一样,直接用数字形式的IP地址表示,也是像第二条一样,用文本形式的域名表示(域名只是为了方便人类记忆和使用的,最终也会被域名服务(Domain Name Servce, DNS))转为IP地址。端口号一般是紧跟在IP地址或者域名之后,比如两条URL中的80就代表端口号。

5 协议版本

这里对协议版本没有做重点介绍,总的俩说,HTTP协议经历了又四个版本:

  • HTTP/0.9:原始版本,仅仅支持GET方法,不支持MIME类型,首部数据,和版本号
  • HTTP/1/0:比较成熟的版本,也是得到广泛使用的一个版本,加入了MIME类型,首部数据,版本号等
  • HTTP/1.0+:一些其他三方添加的一些HTTP协议属性,没有得到官方的认可
  • HTTP/1/1:吸收和借鉴了1.0+中的部分内容,然后对1.0的版本优化了涉及机构、删除了一些不好的特性。该版本是目前广泛使用的版本。

6 Web的结构组件

除了上述提到的Web服务器和客户端,Web应用程序时间的通信和交互过程中还有很多组件的参与。

  • 代理:位于客户端和服务端之间的HTTP实体,可以转发客户端和服务器之间的请求和响应,也可以对其内容进行过滤。
  • 缓存: HTTP的仓库,可以使经常用的页面的副本保存在距离客户端跟进的地方,可以加快客户端的获取速度
  • 网关:连接其他应用程序的特殊Web服务器。可以将HTTP流量转为其他的协议,比如一个HTTP/FTP网关,会将一个使用HTTP协议请求文档的的请求,转为FTP协议,从另外一个FTP服务器获取文档后,在封装为一个HTTP响应返回给客户端。
  • 隧道:对HTTP通信报文进行盲转发的特殊代理。一般用来在一条或者多条HTTP连接上转发非HTTP数据,比如:通过HTTP连接来承载加密的安全套接字层(SSL, Secure Sockets Layer)流量。
  • Agent代理:发起自动HTTP请求的半智能客户端。所有发布Web请求的应用程序都可以成为Agent代理,比如:浏览器、蜘蛛爬虫等。

概述部分的学习到这就完了,后续会对上面提到的内容进行展开详细说明进行学习记录。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值