http权威指南 第一章HTTP概述 读书笔记

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

HTTP可以从世界各地的Web服务器上将各种图片、html、视频等互联网资源显示在web浏览器上。使用HTTP通讯能够保证数据在传输过程中不被损坏。

1.2Web客户端和服务器

我们在浏览一个页面http://www.oreilly.com/index.html时,浏览器会向服务器www.oreilly.com发送一条http请求,参见图1-1。服务器会寻找期望的对象,本例为/index.html。如果成功,就将对象对象类型对象长度以及其他一些信息放在http响应中发送给客户端。

图1-1 客户端和服务器的一次交互过程

1.3资源

Web服务器是Web资源(Web resource)的宿主,资源包括静态文件,例如html、视频、文件以外,还包括动态生成的资源。


图1-2 Web资源

1.3.1媒体类型

因特网上有数千种不同的数据类型,Web服务器会为所有的对象数据附加一个MIME(Multipurpose Internet Mail Extension,多用途因特网邮件扩展)类型(参见图1-3)。当web浏览器从服务器中取回一个对象时,会去查看其MIME类型,继而采取相应的处理方式。

大多数浏览器都可以处理数百种常见的对象类型:显示图片、解析并格式化html文件、通过计算机声卡播放音频文件或者运行外部插件来处理特殊格式的数据等。

图1-3 MIME类型

MIME类型是一种文本标记表示一个主要的对象类型和一个特定的子类型,中间用‘/’来分隔

  • html格式的文本文档:text/html
  • 普通的ASCII文本文档:text/plain
  • jpeg格式的图片:image/jpeg
  • gif格式的图片:image/gif
  • Apple的QuickTime电影:video/quicktime
  • 微软的PowerPoint文件:application/vnd.ms-powerpoint等

1.3.2URI

Web服务器上的每个资源都有一个名字,他们被称为统一资源标识符(Uniform Resource Identifier,URI)。这是Joe的五金商店的Web服务器上一个图片资源的URI:http://www.joes-hardware.com/specials/saw-blade.gif

图1-4显示了URI是怎样指示HTTP协议去访问Joe商店的图片资源的。给定了URI,HTTP就可以解析出对象。

图1-4 URI如何精确地说明某资源的位置以及如何去访问它

表1-1 几个URL实例

URI有两种形式,分别称为URLURN

1.3.3URL

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

  • URL的第一部分被称为方案(scheme),说明了访问资源所使用的协议类型。这部分通常就是HTTP协议(还有ftp协议等)
  • 第二部分给出了服务器的因特网地址,比如:www.joes-hardware.com
  • 第三部分指定了web服务器上的某个资源,比如:/specials/saw-blade.gif

现在,几乎所有的URI都是URL

1.3.4URN

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

比如,不论因特网标准文档PFC2141位于何处,(甚至可以将其复制到多个地方),都可以用下列URN来命名它:urn:ietf:rfc:2141

URN仍然处于试验阶段,还未大范围使用。URN需要一个支撑架构来解析资源的位置,而此类架构的缺乏也延缓了其被采用的进度。本书的其余部分讨论的基本上是URL

1.4事务

一个HTTP事务由一条请求命令和一条响应结果组成,这种通信通过名为http报文(HTTP message)的格式化数据块进行的,如图1-5所示。

图1-5 一次http通信

1.4.1方法

HTTP支持几种不同的请求命令,这些命令被称为HTTP方法(HTTP method)。它会告诉服务器要执行什么动作,例如:获取web页面、运行网关程序、删除文件等。表1-2列出了五种常见的HTTP方法

表1-2 一些常见的HTTP方法

1.4.2状态码

每条HTTP响应都会携带一个三位数字的状态码,用于告知客户端此次响应的状态。

表1-3 一些常见的HTTP状态码

HTTP还会发送一条解释性的“原因短语”,目的是为了进行简单描述。参见上图1-5。

1.5报文

图1-7 HTTP请求、响应报文

HTTP报文(HTTP message)分为请求报文(request message)和响应报文(response message),他们的格式很类似。
HTTP报文包括以下三个部分

  • 起始行:报文的第一行就是起始行,在请求报文中用来说明要做些什么,在响应报文说明了响应情况
  • 首部字段:起始行后面有零个或多个首部字段,每个字段都为key:value形式。便于解析,两者用冒号(:)分隔。首部以一个空行结束。
  • 主体
    请求主体包括发送给web服务器的数据,响应主体包括返回给客户端的数据。起始行和首部都是文本形式且是结构化的,而主体不是,主体可以包含任意的二进制数据(如:图片、视频、音频、软件程序、文本等)。

一个简单的报文实例

图1-8中,浏览器请求资源http://www.joes-hardware.com/tools.html

HTTP请求

  • 起始行:有一个GET命令,且本地资源为/tools.html,使用1.0版的http协议。
  • 请求首部:User-agent包含了请求的浏览器类型、操作系统、使用语言等。大多数浏览器发起的请求中,User-agent为Mozilla/...开头,一些爬虫软件则不是。我们可以通过此信息初步判断请求是否为浏览器发起,参考HTTP 协议的User-Agent相关信息
    Host:请求的域名;Accept表示支持的MIME类型,从前往后代表优先顺序;
    Accept-language:表示支持的语言类型。参考详细解读HTTP请求头
  • 请求主体:没有主体。

HTTP响应

  • 起始行:http版本(HTTP/1.0)、成功状态码(200)、描述性的原因短语(OK)
  • 响应首部:Content-length:响应主体的长度;Content-type:说明了响应的MIME类型。
  • 响应主体:html页面
图1-8 http://www.joes-hardware.com/tools.html的GET事务实例

1.6连接

介绍了HTTP报文的构成之后,我们讨论报文是如何通过传输控制协议(Transmission Control Protocol,TCP)连接从一个地方搬移到另一个地方去。

1.6.1TCP/IP

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

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

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

图1-9 HTTP网络协议栈

1.6.2连接、IP地址及端口号

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

建立TCP连接和给公司办公司某个人打电话类似。首先拨打公司电话,进入正确的机构后,拨打要联系的那个人的分机号。在TCP中,需要知道服务器的IP地址,以及与服务器上运行的程序的TCP端口号。我们通过URL就能获取到这些信息。

几个URL:

  • http://207.200.83.29:80/index.html
  • http://www.netscape.com:80/index.html
  • http://www.netscape.com/index.html

第一个URL使用了机器的IP地址,207.200.83.29以及端口号80
第二个URL使用了域名(或称为主机名),可以通过域名服务(Domain Name Service,DNS)的机制将主机名转换为IP地址。
第三个URL没有端口号,如果HTTP请求访问的URL没有端口号,默认访问80端口。

图1-10 基本的浏览器连接处理

1.6.3使用Telnet实例

我们可以通过Telnet程序打开一条道某台机器某个端口的TCP连接,然后向它输入一些字符来直接和web服务器进行对话。web服务器会将Telnet程序作为一个web客户端来处理。

我们用Telnet与一个世纪的web服务器进行交互:使用Telnet获取http://www.joes-hardware.com:80/tools.html所指向的文档(读者可以换一个URL,我在编写此读书笔记的时候,该网站已经不维护了)

例1-1显示了对http://www.joes-hardware.com:80/tools.html的HTTP请求实例,我们输入的内容用粗体字表示

例1-1 一个使用Telnet的HTTP事务

1.7协议版本

各个HTTP的版本

1.8web的结构组件

本章的前部分,我们重点介绍了两个web应用程序:web浏览器和web服务器。还有其他的应用如下:

  • 代理:位于客户端和服务器之间的HTTP中间实体
  • 缓存:HTTP的仓库,使常用页面的副本可以保存在离客户端更近的地方
  • 网关:连接其他应用程序的特殊web服务器
  • 隧道:对HTTP通信报文进行盲转发的特殊代理
  • Agent代理:发起自动HTTP请求的半智能web客户端

1.8.1代理

HTTP代理服务器是web安全、应用集成以及性能优化的重要组成模块。

如图1-11,代理位于客户端和服务器之间,接收所有客户端的HTTP请求,并将这些请求转发给服务器(可能会对请求进行修改之后转发)。对用户来说,代理服务器代表用户访问服务器

图1-11 在客户端和服务器之间转发流量的代理

出于安全考虑,通常会将代理作为转发所有web流量的可信任中间节点使用。代理还可以对请求和响应进行过滤。比如对下载的应用进行病毒检测,屏蔽网站等。

1.8.2缓存

web缓存(Web cache)或代理缓存(proxy cache)是一种特殊的HTTP代理服务器。可以将经过代理传送的常用文档复制保存起来,下一个请求同一文档的客户端就可以享受缓存的私有副本所提供的服务了。

图1-12 保存常用文档本地副本以提高性能的代理缓存

客户端从附近的缓存下载文档会比从远程web服务器下载快得多。

1.8.3网关

网关(gateway)是一种特殊的服务器,作为其他服务器的中间实体使用。通常用于将HTTP流量转换成其他的协议。网关接收请求时就好像自己是资源的源端服务器一样,客户端可能并不知道自己正在与一个网关进行通信。

例如,一个HTTP/FTP网关会通过HTTP请求接收对FTP URI的请求,但通过FTP协议来获取文档。得到的文档会被封装成一条HTTP报文,发送给客户端。

图1-13 HTTP/FTP网关

1.8.4隧道

HTTP隧道(tunnel)的一种常见用途是通过HTTP连接承载加密的安全套接字层(secure sockets layer ssl)流量,这样SSL流量就可以穿过只允许web流量通过的防火墙了。如图1-14,HTTP/SSL隧道收到一条HTTP请求,要求建立一条到目的地址和端口的输出连接,然后在HTTP通过上通过隧道传输加密的SSL流量,这样就就可以将其盲转发到目的服务器上去了。

图1-14 隧道可以在非HTTP网络上转发数据(显示的是HTTP/SSL隧道)

1.8.5Agent代理

Agent代理是代表用户发起HTTP请求的客户端程序。所有发布web请求的应用程序都是HTTP Agent代理。

图1-15 自动搜索引擎“网络蜘蛛”就是Agent代理,可以从全世界范围内获取Web页面
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,793评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,567评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,342评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,825评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,814评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,680评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,033评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,687评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,175评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,668评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,775评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,419评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,020评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,206评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,092评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,510评论 2 343

推荐阅读更多精彩内容

  • 第一章、HTTP概述1、Web浏览器、服务器和相关的Web应用程序都是通过HTTP相互通信的,HTTP是现代全球因...
    横冲直撞666阅读 634评论 0 1
  • (本文参考课本是《HTTP权威指南》,文中的书写结构是根据自己的阅读理解的个人思路,如有不懂可以自行参考原书) 第...
    Andrew_bao阅读 526评论 1 3
  • 不要自作自受自己创造伤悲 谁都可以忘记谁 —《唐人》 分开,双方一定会变得更差劲且痛不欲生吗?难道,当初分开的情绪...
    宫骁葵阅读 244评论 0 2
  • 感恩五个人 感恩老公几乎是周末才会回来,但是今天为我们做早餐。我简直不能太惊喜,谢谢你,感恩。 感恩孩子带给我的甜...
    黛儿微笑阅读 312评论 1 0