HTTP概述【HTTP权威指南-翻译-第一章】

HTTP概述

下一个阶段,我们马上要进入javaweb开发的学习,而web开发是围绕HTTP协议进行的,所以对于它的理解程度决定了我们任意一门语言对于web开发的理解深度。

http:因特网的多媒体速递

HTTP:互联网的多媒体速递http快速、方便、可靠地将这些信息从世界各地的Web服务器转移到人们桌面上的Web浏览器。由于HTTP使用可靠的数据传输协议,它可以保证您的数据在传输过程中不会受到损坏或扰,即使来自地球的另一端也是如此。这对用户是有好处的,因为您可以访问信息而不必担心其完整性。作为Internet应用程序开发人员,可靠的传输对您也有好处,因为您不必担心HTTP通信在传输过程中会被破坏、复制或扭曲。您可以专注于编写应用程序的不同细节,而不必担心Internet的缺陷和缺陷。让我们更仔细地看看HTTP是如何传输Web流量的。

web客户端与服务端

Web内容存在于Web服务器上。Web服务器使用HTTP协议,因此它们通常被称为HTTP服务器。这些HTTP服务器存储Internet的数据,并在HTTP客户端请求时提供数据。客户端向服务器发送HTTP请求,服务器在HTTP响应中返回请求的数据,如图1-1所示。HTTP客户机和HTTP服务器共同构成万维网的基本组件。

i9HucD.png

您可能每天都使用HTTP客户端。最常见的客户端是Web浏览器,例如Microsoft Internet Explorer或Netscape Navigator。Web浏览器从服务器请求HTTP对象并在屏幕上显示对象。当浏览到http://www.baidu.com/index.html等页面时,浏览器向服务器www.baidu.com发送HTTP请求(见图1-1)。服务器试图找到所需的对象(在本例中为“/index.html”),如果成功,则在HTTP响应中将对象连同对象的类型、对象的长度和其他信息一起发送到客户端。

web资源

Web服务器承载Web资源。Web资源是Web内容的来源。最简单的Web资源是Web服务器文件系统上的静态文件。这些文件可以包含任何内容:它们可能是文本文件、HTML文件、Microsoft Word文件、AdobeAcrobat文件、JPEG图像文件、AVI电影文件或任何其他您可以想到的格式。但是,资源不必是静态文件。资源也可以是按需生成内容的软件程序。这些动态内容资源可以根据您的身份、所请求的信息或一天中的时间生成内容。他们可以显示相机的实时图像,或者让你交易股票,搜索房地产数据库,或者从网上商店购买礼物(见图1-2)。

i97WTI.png

总之,资源是任何类型的内容源。包含公司销售预测电子表格的文件是一种资源。浏览本地公共图书馆书架的网络网关是一种资源。互联网搜索引擎是一种资源。

媒体类型

由于Internet承载了数千种不同的数据类型,所以HTTP会小心地用称为MIME类型的数据格式标签标记每个通过Web传输的对象。MIME(多用途因特网邮件扩展)最初是为解决在不同电子邮件系统之间移动消息时遇到的问题而设计的。MIME对于电子邮件非常有效,HTTP采用它来描述和标记自己的多媒体内容。Web服务器将MIME类型附加到所有HTTP对象数据(参见图1-3)。当Web浏览器从服务器获取对象时,它会查看相关的MIME类型,以确定它是否知道如何处理该对象。大多数浏览器可以处理数百种流行的对象类型:显示图像文件、解析和格式化HTML文件、通过计算机扬声器播放音频文件或启动外部插件软件来处理特殊格式。

i97R0A.png

MIME类型是文本标记,表示为主对象类型和特定子类型,由斜杠分隔。例如:

  • HTML格式的文本文档将被标记为text/html类型。
  • 普通的ASCII文本文档将被标记为text/plain. 。
  • 图像的JPEG版本将是Image/jpeg
  • GIF格式的图像将是Image/gif.
  • Apple QuickTime电影将是video/quicktime.
  • Microsoft PowerPoint演示文稿将是application/vnd.ms-powerpoint.

更多的可以上网查询。

URI

每个Web服务器资源都有一个名称,因此客户端可以指出他们感兴趣的资源。服务器资源名称为统一资源标识符(URI)。URIsare就像互联网的邮政地址,唯一地标识和定位世界各地的信息资源。以下是Joe五金店Web服务器上图像资源的URI:

http://www.joes-hardware.com/specials/saw-blade.gif图1-4显示了URI如何指定HTTP协议来访问joe商店服务器上的锯片GIF资源。给定URI,HTTP可以检索对象。URI有两种类型,即URL和URN。现在让我们看看每种类型的资源标识符。

i97T1S.png

URL

统一资源定位器(URL)是最常见的资源标识符形式。URL描述特定服务器上资源的特定位置。他们会告诉你如何从一个精确的、固定的位置获取一个资源。图1-4显示了URL如何准确地指示资源的位置以及如何访问它。表1-1显示了几个URL示例.

i97xhV.png

大多数URL遵循三个主要部分的标准化格式:

  • URL的第一部分称为方案,它描述了用于访问资源的协议。这通常是HTTP协议(http:/)。
  • 第二部分给出了服务器的Internet地址(例如,www.joes-hardware.com)。
  • 其余的则为Web服务器上的资源命名((e.g., /specials/saw-blade.gif )。

URN

URI的第二种风格是统一的资源名称,即URN。urn作为特定内容的唯一名称,独立于资源当前所在的位置。这些位置无关的瓮允许资源从一个地方移动到另一个地方。URN还允许多个网络访问协议访问资源,同时保持相同的名称。例如,以下URN可以用于将Internet标准文档命名为“RFC 2141”,而不管它位于何处(它甚至可能在几个地方复制):urn:IETF:RFC:2141 URN仍然是试验性的,尚未被广泛采用。为了有效运作,它需要一个支持性的基础设施来解决资源位置问题;由于缺乏这样的基础设施,这些设施的采用速度也放慢了。但是它对未来确实有一些令人兴奋的希望。所以我们更多的是讨论URL。

HTTP交互

让我们更详细地研究客户机如何使用HTTP与Web服务器及其资源进行交互处理。HTTP事务由请求命令(从客户端发送到服务器)和响应结果(从服务器发送回客户端)组成。这种通信发生在被称为HTTP消息的格式化数据块中,如图1-5所示。

i972md.png

方法

HTTP支持几个不同的请求命令,称为HTTP方法。每个HTTP请求消息都有一个方法。该方法告诉服务器执行什么操作(获取网页、运行网关程序、删除文件等)。表1-2列出了五种常见的HTTP方法

i97hkt.png

状态码

每个HTTP响应消息都会返回一个状态代码。状态代码是一个三位数字的数字代码,它告诉客户端请求是否成功,或者是否需要其他操作。一些常见的状态代码如表1-3所示.

i974tP.png

http还向每个数字状态代码发送解释性文本“原因短语”(参见图1-5中的响应消息)。文本短语仅用于描述性目的;数字代码用于所有处理。HTTP软件对下列状态代码和原因短语进行了相同的处理:

200 OK
200 Document attached
200 Success
200 All's cool, dude

网页可以由多个对象组成

应用程序通常会发出多个HTTP交互来完成任务。例如,Web浏览器发出一连串的HTTP请求,以获取和显示图形丰富的网页。浏览器执行一个请求来获取描述页面布局的HTML“框架”,然后为每个嵌入式图像、图形窗格、Javaapplet等发出额外的HTTP请求。这些嵌入式资源甚至可能驻留在不同的服务器上,如图1-6所示。因此,“网页”通常是资源的集合,而不是单一的资源。

i975ff.png

消息

现在,让我们快速查看HTTP请求和响应消息的结构。后面研究HTTP消息,HTTP消息是简单的、面向行的字符序列。因为它们是纯文本,而不是二进制,所以人们很容易读和写它们。 图1-7显示了一个简单事务的HTTP消息。 一些程序员抱怨HTTP解析的困难,这可能很棘手而且容易出错,特别是在设计高速软件时。二进制格式或更严格的文本格式可能更容易处理,但大多数HTTP程序员都欣赏HTTP的可扩展性和可调试性。

i97op8.png

从Web客户端发送到Web服务器的http消息称为请求消息。从服务器到客户端的消息称为响应消息。没有其他类型的HTTP消息。HTTP请求和响应消息的格式非常相似。

开始行

消息的第一行是开始行,指示对请求执行什么操作或响应发生了什么。

标题

字段零或多个标头字段在起始线后面。每个标头字段由一个名称和一个值组成,用冒号(:)分隔,以便于解析。标题以空行结尾。添加标题字段就像添加另一行一样简单。空行后面的主体是包含任何类型数据的可选消息体。请求体将数据传送到Web服务器;响应体将数据带回客户端。

主题/正文

与文本和结构化的起始线和头不同,正文可以包含任意二进制数据(例如图像、视频、音频轨道、软件应用程序)。当然,正文也可以包含文本。

一个简单的消息示例

图1-8显示了可能作为简单事务的一部分发送的HTTP消息。浏览器请求资源http:/www.joes-hardware.com/tools.html。

i97O7n.png

在图1-8中,浏览器发送HTTP请求消息。请求在开始行中有一个get方法,本地资源是/ToeS.HTML。请求指示它是HTTP协议的版本1。请求消息没有正文,因为不需要请求数据来从服务器获取简单文档。
服务器发送一个HTTP响应消息。响应包含HTTP版本号(HTTP/1.0)、成功状态代码(200)、描述性原因短语(OK)和响应头字段块,所有后面跟着包含所请求文档的响应主体。在内容长度标题中注意响应体长度,并且在内容类型头中注意文档的MIME类型。

连接

现在我们已经大致描述了HTTP的消息是什么样子的,让我们讨论一下消息是如何通过传输控制协议(TCP)连接从一个地方移动到另一个地方的。

TCP/IP

HTTP是一种应用层协议。http不担心网络通信的细节;相反,它将网络的细节留给了流行的可靠Internet传输协议TCP/IP。TCP提供:

  • 无错误的数据传输
  • 有序传递(数据总是按照发送的顺序到达)
  • 非分段数据流(可以随时传输任意大小的数据)

互联网本身基于tcp/ip,这是世界各地计算机和网络设备所使用的一组流行的分组交换网络协议。TCP/IP隐藏了各个网络和硬件的特点和缺点,使计算机和任何类型的网络能够可靠地进行通信。

一旦建立了TCP连接,客户端和服务器计算机之间交换的消息就不会丢失、损坏或无法正常接收。在网络术语中,HTTP协议是在TCP之上分层的。HTTP使用TCP传输其消息数据。同样,TCP是在IP之上分层的(参见图1-9)。

i9776g.png

连接、IP地址和端口号

在HTTP客户端向服务器发送消息之前,它需要使用Internet协议(IP)地址和端口号在客户端和服务器之间建立TCP/IP连接。首先,你拨公司的电话号码。这能让你找到合适的组织。然后,你拨打你要联系的人的特定扩展。在TCP中,你需要服务器计算机的IP地址和与在服务器上运行的特定软件程序相关联的TCP端口号。这一切都很好,但首先如何获得HTTP服务器的IP地址和端口号?为什么,网址,当然!我们在前面提到过,URL是资源的地址,所以很自然,它们可以为拥有资源的机器提供IP地址。让我们来看看几个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没有数字IP地址;它有一个文本域名或主机名(“www.net儿e.com”)。主机名只是IP地址的友好别名。主机名可以很容易地通过一个名为域名服务(DNS)的工具转换成IP地址,所以我们也在这里设置好了。

最后的URL没有端口号。当HTTP URL中缺少端口号时,您可以假定端口80的默认值。通过IP地址和端口号,客户端可以很容易地通过TCP/IP进行通信。图1-10显示了浏览器如何使用HTTP来显示驻留在远程服务器上的简单HTML资源。

下面是具体的步骤:

  1. 浏览器从URL中提取服务器的主机名。
  2. 浏览器将服务器的主机名转换为服务器的IP地址。
  3. 浏览器从URL中提取端口号(如果有的话)
  4. 浏览器与Web服务器建立TCP连接。
  5. 浏览器向服务器发送HTTP请求消息。
  6. 服务器将HTTP响应发送回浏览器。
  7. 连接关闭,浏览器显示文档。

i97HXQ.png

实际案例

一次输入

telnet www.baidu.com 80

二次输入

GET /index.html HTTP/1.1
Host: www.baidu.com

三次两回车,返回响应




HTTP/1.1 200 OK
Accept-Ranges: bytes
Cache-Control: no-cache
Connection: Keep-Alive
Content-Length: 14615
Content-Type: text/html
Date: Thu, 06 Sep 2018 02:21:53 GMT
Etag: "5b7b7f40-3917"
Last-Modified: Tue, 21 Aug 2018 02:56:00 GMT
P3p: CP=" OTI DSP COR IVA OUR IND COM "
Pragma: no-cache
Server: BWS/1.1
Set-Cookie: BAIDUID=621DAE383FFE9BD142F0C44B69C335D8:FG=1; expires=Thu, 31-Dec-3
7 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com
Set-Cookie: BIDUPSID=621DAE383FFE9BD142F0C44B69C335D8; expires=Thu, 31-Dec-37 23
:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com
Set-Cookie: PSTM=1536200513; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=214748
3647; path=/; domain=.baidu.com
Vary: Accept-Encoding
X-Ua-Compatible: IE=Edge,chrome=1

<!DOCTYPE html><!--STATUS OK-->
<html>
<head>
        <meta http-equiv="content-type" content="text/html;charset=utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=Edge">
        <link rel="dns-prefetch" href="//s1.bdstatic.com"/>
        <link rel="dns-prefetch" href="//t1.baidu.com"/>
        <link rel="dns-prefetch" href="//t2.baidu.com"/>
        <link rel="dns-prefetch" href="//t3.baidu.com"/>
        <link rel="dns-prefetch" href="//t10.baidu.com"/>
        <link rel="dns-prefetch" href="//t11.baidu.com"/>
        <link rel="dns-prefetch" href="//t12.baidu.com"/>
        <link rel="dns-prefetch" href="//b1.bdstatic.com"/>
        <title>鐧惧害涓€涓嬶紝浣犲氨鐭ラ亾</title>
        <link href="http://s1.bdstatic.com/r/www/cache/static/home/css/index.css
" rel="stylesheet" type="text/css" />
        <!--[if lte IE 8]><style index="index" >#content{height:480px\9}#m{top:2
60px\9}</style><![endif]-->
        <!--[if IE 8]><style index="index" >#u1 a.mnav,#u1 a.mnav:visited{font-f
amily:simsun}</style><![endif]-->
        <script>var hashMatch = document.location.href.match(/#+(.*wd=[^&].+)/);
if (hashMatch && hashMatch[0] && hashMatch[1]) {document.location.replace("http:
//"+location.host+"/s?"+hashMatch[1]);}var ns_c = function(){};</script>
        <script>function h(obj){obj.style.behavior='url(#default#homepage)';var
a = obj.setHomePage('//www.baidu.com/');}</script>
        <noscript><meta http-equiv="refresh" content="0; url=/baidu.html?from=no
script"/></noscript>
        <script>window._ASYNC_START=new Date().getTime();</script>
</head>
<body link="#0000cc"><div id="wrapper" style="display:none;"><div id="u"><a href
="//www.baidu.com/gaoji/preferences.html"  onmousedown="return user_c({'fm':'set
','tab':'setting','login':'0'})">鎼滅储璁剧疆</a>|<a id="btop" href="/"  onmouse
down="return user_c({'fm':'set','tab':'index','login':'0'})">鐧惧害棣栭〉</a>|<a
 id="lb" href="https://passport.baidu.com/v2/?login&tpl=mn&u=http%3A%2F%2Fwww.ba
idu.com%2F" onclick="return false;"  onmousedown="return user_c({'fm':'set','tab
':'login'})">鐧诲綍</a><a href="https://passport.baidu.com/v2/?reg&regType=1&tpl
=mn&u=http%3A%2F%2Fwww.baidu.com%2F"  onmousedown="return user_c({'fm':'set','ta
b':'reg'})" target="_blank" class="reg">娉ㄥ唽</a></div><div id="head"><div clas
s="s_nav"><a href="/" class="s_logo" onmousedown="return c({'fm':'tab','tab':'lo
go'})"><img src="//www.baidu.com/img/baidu_jgylogo3.gif" width="117" height="38"
 border="0" alt="鍒扮櫨搴﹂椤? title="鍒扮櫨搴﹂椤?></a><div class="s_tab"
 id="s_tab"><a href="http://news.baidu.com/ns?cl=2&rn=20&tn=news&word=" wdfield=
"word"  onmousedown="return c({'fm':'tab','tab':'news'})">鏂伴椈</a>&#12288;<b>?
綉椤?/b>&#12288;<a href="http://tieba.baidu.com/f?kw=&fr=wwwt" wdfield="kw"  on
mousedown="return c({'fm':'tab','tab':'tieba'})">璐村惂</a>&#12288;<a href="http
://zhidao.baidu.com/q?ct=17&pn=0&tn=ikaslist&rn=10&word=&fr=wwwt" wdfield="word"
  onmousedown="return c({'fm':'tab','tab':'zhidao'})">鐭ラ亾</a>&#12288;<a href=
"http://music.baidu.com/search?fr=ps&key=" wdfield="key"  onmousedown="return c(
{'fm':'tab','tab':'music'})">闊充箰</a>&#12288;<a href="http://image.baidu.com/i
?tn=baiduimage&ps=1&ct=201326592&lm=-1&cl=2&nc=1&word=" wdfield="word"  onmoused
own="return c({'fm':'tab','tab':'pic'})">鍥剧墖</a>&#12288;<a href="http://v.bai
du.com/v?ct=301989888&rn=20&pn=0&db=0&s=25&word=" wdfield="word"   onmousedown="
return c({'fm':'tab','tab':'video'})">瑙嗛</a>&#12288;<a href="http://map.baid
u.com/m?word=&fr=ps01000" wdfield="word"  onmousedown="return c({'fm':'tab','tab
':'map'})">鍦板浘</a>&#12288;<a href="http://wenku.baidu.com/search?word=&lm=0&o
d=0" wdfield="word"  onmousedown="return c({'fm':'tab','tab':'wenku'})">鏂囧簱</
a>&#12288;<a href="//www.baidu.com/more/"  onmousedown="return c({'fm':'tab','ta
b':'more'})">鏇村禄</a></div></div><form id="form" name="f" action="/s" class=
"fm" ><input type="hidden" name="ie" value="utf-8"><input type="hidden" name="f"
 value="8"><input type="hidden" name="rsv_bp" value="1"><span class="bg s_ipt_wr
"><input name="wd" id="kw" class="s_ipt" value="" maxlength="100"></span><span c
lass="bg s_btn_wr"><input type="submit" id="su" value="鐧惧害涓€涓? class="bg s
_btn" onmousedown="this.className='bg s_btn s_btn_h'" onmouseout="this.className
='bg s_btn'"></span><span class="tools"><span id="mHolder"><div id="mCon"><span>
杈撳叆娉?/span></div><ul id="mMenu"><li><a href="javascript:;" name="ime_hw">鎵
嬪啓</a></li><li><a href="javascript:;" name="ime_py">鎷奸煶</a></li><li class="
ln"></li><li><a href="javascript:;" name="ime_cl">鍏抽棴</a></li></ul></span><sp
an class="shouji"><strong>鎺ㄨ崘&nbsp;:&nbsp;</strong><a href="http://w.x.baidu.
com/go/mini/8/10000020" onmousedown="return ns_c({'fm':'behs','tab':'bdbrowser'}
)">鐧惧害娴忚鍣紝鎵撳紑缃戦〉蹇?绉掞紒</a></span></span></form></div><div i
d="content"><div id="u1"><a href="http://news.baidu.com" name="tj_trnews" class=
"mnav">鏂伴椈</a><a href="http://www.hao123.com" name="tj_trhao123" class="mnav"
>hao123</a><a href="http://map.baidu.com" name="tj_trmap" class="mnav">鍦板浘</a
><a href="http://v.baidu.com" name="tj_trvideo" class="mnav">瑙嗛</a><a href="
http://tieba.baidu.com" name="tj_trtieba" class="mnav">璐村惂</a><a href="https:
//passport.baidu.com/v2/?login&tpl=mn&u=http%3A%2F%2Fwww.baidu.com%2F" name="tj_
login" id="lb" onclick="return false;">鐧诲綍</a><a href="//www.baidu.com/gaoji/
preferences.html" name="tj_settingicon" id="pf">璁剧疆</a><a href="//www.baidu.c
om/more/" name="tj_briicon" id="bri">鏇村浜у搧</a></div><div id="m"><p id="lg
"><img src="//www.baidu.com/img/bd_logo.png" width="270" height="129"></p><p id=
"nv"><a href="http://news.baidu.com">鏂?nbsp;闂?/a>銆€<b>缃?nbsp;椤?/b>銆€<a
 href="http://tieba.baidu.com">璐?nbsp;鍚?/a>銆€<a href="http://zhidao.baidu.c
om">鐭?nbsp;閬?/a>銆€<a href="http://music.baidu.com">闊?nbsp;涔?/a>銆€<a hr
ef="http://image.baidu.com">鍥?nbsp;鐗?/a>銆€<a href="http://v.baidu.com">瑙?
nbsp;棰?/a>銆€<a href="http://map.baidu.com">鍦?nbsp;鍥?/a></p><div id="fm"><
form id="form1" name="f1" action="/s" class="fm"><span class="bg s_ipt_wr"><inpu
t type="text" name="wd" id="kw1" maxlength="100" class="s_ipt"></span><input typ
e="hidden" name="rsv_bp" value="0"><input type=hidden name=ch value=""><input ty
pe=hidden name=tn value="baidu"><input type=hidden name=bar value=""><input type
="hidden" name="rsv_spt" value="3"><input type="hidden" name="ie" value="utf-8">
<span class="bg s_btn_wr"><input type="submit" value="鐧惧害涓€涓? id="su1" cla
ss="bg s_btn" onmousedown="this.className='bg s_btn s_btn_h'" onmouseout="this.c
lassName='bg s_btn'"></span></form><span class="tools"><span id="mHolder1"><div
id="mCon1"><span>杈撳叆娉?/span></div></span></span><ul id="mMenu1"><div class=
"mMenu1-tip-arrow"><em></em><ins></ins></div><li><a href="javascript:;" name="im
e_hw">鎵嬪啓</a></li><li><a href="javascript:;" name="ime_py">鎷奸煶</a></li><li
 class="ln"></li><li><a href="javascript:;" name="ime_cl">鍏抽棴</a></li></ul></
div><p id="lk"><a href="http://baike.baidu.com">鐧剧</a>銆€<a href="http://wen
ku.baidu.com">鏂囧簱</a>銆€<a href="http://www.hao123.com">hao123</a><span>&nbsp
;|&nbsp;<a href="//www.baidu.com/more/">鏇村&gt;&gt;</a></span></p><p id="lm">
</p></div></div><div id="ftCon"><div id="ftConw"><p id="lh"><a id="seth" onClick
="h(this)" href="/" onmousedown="return ns_c({'fm':'behs','tab':'homepage','pos'
:0})">鎶婄櫨搴﹁涓轰富椤?/a><a id="setf" href="//www.baidu.com/cache/sethelp/
index.html" onmousedown="return ns_c({'fm':'behs','tab':'favorites','pos':0})" t
arget="_blank">鎶婄櫨搴﹁涓轰富椤?/a><a onmousedown="return ns_c({'fm':'behs'
,'tab':'tj_about'})" href="http://home.baidu.com">鍏充簬鐧惧害</a><a onmousedown
="return ns_c({'fm':'behs','tab':'tj_about_en'})" href="http://ir.baidu.com">Abo
ut Baidu</a></p><p id="cp">&copy;2018&nbsp;Baidu&nbsp;<a href="/duty/" name="tj_
duty">浣跨敤鐧惧害鍓嶅繀璇?/a>&nbsp;浜琁CP璇?30173鍙?nbsp;<img src="http://s1
.bdstatic.com/r/www/cache/static/global/img/gs_237f015b.gif"></p></div></div><di
v id="wrapper_wrapper"></div></div><div class="c-tips-container" id="c-tips-cont
ainer"></div>
<script>window.__async_strategy=2;</script>
<script>var bds={se:{},su:{urdata:[],urSendClick:function(){}},util:{},use:{},co
mm : {domain:"http://www.baidu.com",ubsurl : "http://sclick.baidu.com/w.gif",tn:
"baidu",queryEnc:"",queryId:"",inter:"",templateName:"baidu",sugHost : "http://s
uggestion.baidu.com/su",query : "",qid : "",cid : "",sid : "",indexSid : "",stok
en : "",serverTime : "",user : "",username : "",loginAction : [],useFavo : "",pi
nyin : "",favoOn : "",curResultNum:"",rightResultExist:false,protectNum:0,zxlNum
:0,pageNum:1,pageSize:10,newindex:0,async:1,maxPreloadThread:5,maxPreloadTimes:1
0,preloadMouseMoveDistance:5,switchAddMask:false,isDebug:false,ishome : 1},_base
64:{domain : "http://b1.bdstatic.com/",b64Exp : -1,pdc : 0}};var name,navigate,a
l_arr=[];var selfOpen = window.open;eval("var open = selfOpen;");var isIE=naviga
tor.userAgent.indexOf("MSIE")!=-1&&!window.opera;var E = bds.ecom= {};bds.se.mon
 = {'loadedItems':[],'load':function(){},'srvt':-1};try {bds.se.mon.srvt = parse
Int(document.cookie.match(new RegExp("(^| )BDSVRTM=([^;]*)(;|$)"))[2]);document.
cookie="BDSVRTM=;expires=Sat, 01 Jan 2000 00:00:00 GMT"; }catch(e){}</script>
<script>if(!location.hash.match(/[^a-zA-Z0-9]wd=/)){document.getElementById("ftC
on").style.display='block';document.getElementById("u1").style.display='block';d
ocument.getElementById("content").style.display='block';document.getElementById(
"wrapper").style.display='block';setTimeout(function(){try{document.getElementBy
Id("kw1").focus();document.getElementById("kw1").parentNode.className += ' iptfo
cus';}catch(e){}},0);}</script>
<script type="text/javascript" src="http://s1.bdstatic.com/r/www/cache/static/jq
uery/jquery-1.10.2.min_f2fb5194.js"></script>
<script>(function(){var index_content = $('#content');var index_foot= $('#ftCon'
);var index_css= $('head [index]');var index_u= $('#u1');var result_u= $('#u');v
ar wrapper=$("#wrapper");window.index_on=function(){index_css.insertAfter("meta:
eq(0)");result_common_css.remove();result_aladdin_css.remove();result_sug_css.re
move();index_content.show();index_foot.show();index_u.show();result_u.hide();wra
pper.show();if(bds.su&&bds.su.U&&bds.su.U.homeInit){bds.su.U.homeInit();}setTime
out(function(){try{$('#kw1').get(0).focus();window.sugIndex.start();}catch(e){}}
,0);if(typeof initIndex=='function'){initIndex();}};window.index_off=function(){
index_css.remove();index_content.hide();index_foot.hide();index_u.hide();result_
u.show();result_aladdin_css.insertAfter("meta:eq(0)");result_common_css.insertAf
ter("meta:eq(0)");result_sug_css.insertAfter("meta:eq(0)");wrapper.show();};})()
;</script>
<script>window.__switch_add_mask=1;</script>
<script type="text/javascript" src="http://s1.bdstatic.com/r/www/cache/static/gl
obal/js/instant_search_newi_redirect1_20bf4036.js"></script>
<script>initPreload();$("#u,#u1").delegate("#lb",'click',function(){try{bds.se.l
ogin.open();}catch(e){}});if(navigator.cookieEnabled){document.cookie="NOJS=;exp
ires=Sat, 01 Jan 2000 00:00:00 GMT";}</script>
<script>$(function(){for(i=0;i<3;i++){u($($('.s_ipt_wr')[i]),$($('.s_ipt')[i]),$
($('.s_btn_wr')[i]),$($('.s_btn')[i]));}function u(iptwr,ipt,btnwr,btn){if(iptwr
 && ipt){iptwr.on('mouseover',function(){iptwr.addClass('ipthover');}).on('mouse
out',function(){iptwr.removeClass('ipthover');}).on('click',function(){ipt.focus
();});ipt.on('focus',function(){iptwr.addClass('iptfocus');}).on('blur',function
(){iptwr.removeClass('iptfocus');}).on('render',function(e){var $s = iptwr.paren
t().find('.bdsug');var l = $s.find('li').length;if(l>=5){$s.addClass('bdsugbg');
}else{$s.removeClass('bdsugbg');}});}if(btnwr && btn){btnwr.on('mouseover',funct
ion(){btn.addClass('btnhover');}).on('mouseout',function(){btn.removeClass('btnh
over');});}}});</script>
<script type="text/javascript" src="http://s1.bdstatic.com/r/www/cache/static/ho
me/js/bri_7f1fa703.js"></script>
<script>(function(){var _init=false;window.initIndex=function(){if(_init){return
;}_init=true;var w=window,d=document,n=navigator,k=d.f1.wd,a=d.getElementById("n
v").getElementsByTagName("a"),isIE=n.userAgent.indexOf("MSIE")!=-1&&!window.oper
a;(function(){if(/q=([^&]+)/.test(location.search)){k.value=decodeURIComponent(R
egExp["\x241"])}})();(function(){var u = G("u1").getElementsByTagName("a"), nv =
 G("nv").getElementsByTagName("a"), lk = G("lk").getElementsByTagName("a"), un =
 "";var tj_nv = ["news","tieba","zhidao","mp3","img","video","map"];var tj_lk =
["baike","wenku","hao123","more"];un = bds.comm.user == "" ? "" : bds.comm.user;
function _addTJ(obj){addEV(obj, "mousedown", function(e){var e = e || window.eve
nt;var target = e.target || e.srcElement;if(target.name){ns_c({'fm':'behs','tab'
:target.name,'un':encodeURIComponent(un)});}});}for(var i = 0; i < u.length; i++
){_addTJ(u[i]);}for(var i = 0; i < nv.length; i++){nv[i].name = 'tj_' + tj_nv[i]
;}for(var i = 0; i < lk.length; i++){lk[i].name = 'tj_' + tj_lk[i];}})();(functi
on() {var links = {'tj_news': ['word', 'http://news.baidu.com/ns?tn=news&cl=2&rn
=20&ct=1&ie=utf-8'],'tj_tieba': ['kw', 'http://tieba.baidu.com/f?ie=utf-8'],'tj_
zhidao': ['word', 'http://zhidao.baidu.com/search?pn=0&rn=10&lm=0'],'tj_mp3': ['
key', 'http://music.baidu.com/search?fr=ps&ie=utf-8'],'tj_img': ['word', 'http:/
/image.baidu.com/i?ct=201326592&cl=2&nc=1&lm=-1&st=-1&tn=baiduimage&istype=2&fm=
&pv=&z=0&ie=utf-8'],'tj_video': ['word', 'http://video.baidu.com/v?ct=301989888&
s=25&ie=utf-8'],'tj_map': ['wd', 'http://map.baidu.com/?newmap=1&ie=utf-8&s=s'],
'tj_baike': ['word', 'http://baike.baidu.com/search/word?pic=1&sug=1&enc=utf8'],
'tj_wenku': ['word', 'http://wenku.baidu.com/search?ie=utf-8']};var domArr = [G(
'nv'), G('lk'),G('cp')],kw = G('kw1');for (var i = 0, l = domArr.length; i < l;
i++) {domArr[i].onmousedown = function(e) {e = e || window.event;var target = e.
target || e.srcElement,name = target.getAttribute('name'),items = links[name],re
g = new RegExp('^\\s+|\\s+\x24'),key = kw.value.replace(reg, '');if (items) {if
(key.length > 0) {var wd = items[0], url = items[1],url = url + ( name === 'tj_m
ap' ? encodeURIComponent('&' + wd + '=' + key) : ( ( url.indexOf('?') > 0 ? '&'
: '?' ) + wd + '=' + encodeURIComponent(key) ) );target.href = url;} else {targe
t.href = target.href.match(new RegExp('^http:\/\/.+\.baidu\.com'))[0];}}name &&
ns_c({'fm': 'behs','tab': name,'query': encodeURIComponent(key),'un': encodeURIC
omponent(bds.comm.user || '') });};}})();};if(window.pageState==0){initIndex();}
})();document.cookie = 'IS_STATIC=1;expires=' + new Date(new Date().getTime() +
10*60*1000).toGMTString();</script>
</body></html>


 

这里有中文乱码的问题,不过这不是我们的重点,因为win的telnet本身对中文不感冒。

我们重点分析的是这个流程

Telnet查找主机名并打开与www.baidu.com Web服务器的连接,该服务器正在监听端口80。命令后面的三行是Telnet输出的,告诉我们它已经建立了一个连接。然后我们输入基本的请求命令“get/tools.html HTTP/1.1”,然后发送一个主机头,提供原始主机名,然后是空行,要求服务器从服务器www.baidu.com 获取资源“/index.html”。在此之后,服务器将使用响应行、多个响应头、空行以及HTML文档的主体进行响应。请注意,Telnet很好地模仿HTTP客户端,但作为服务器却不能很好地工作。而自动Telnet脚本根本就没有乐趣。要获得更灵活的工具,您可能需要查看NC(Netcat)。NC工具允许您轻松地操作和脚本基于UDP和TCP的通信,包括HTTP。

版本协议

今天使用的HTTP协议有几个版本。HTTP应用程序需要努力处理HTTP协议的不同变体。正在使用的几个版本是:

http/0.9

1991年HTTP原型版本称为HTTP/0.9。该协议包含许多严重的设计缺陷,应该只用于与遗留客户端的互操作。http/0.9只支持GET方法,它不支持多媒体内容、HTTP头或版本号的MIME类型。http/0.9最初是为了获取简单的HTML对象而定义的。它很快被HTTP/1.0取代。

HTTP/1.0

是被广泛部署的HTTP的第一个版本。http/1.0添加了版本号、HTTP头、其他方法和多媒体对象处理。http/1.0使支持具有图形吸引力的网页和交互形式成为现实,这有助于促进万维网的广泛采用。这个规范从来没有得到很好的说明。它代表了协议迅速商业和学术发展的时代的最佳实践的集合。许多流行的Web客户端和服务器在20世纪90年代中期迅速增加了HTTP特性,以满足迅速扩展的、商业上成功的万维网的需求。许多这些特性,包括持久的“保持活力”连接、虚拟主机支持和代理连接支持,都被添加到HTTP中,并成为非官方的、事实上的标准。这种非正式的、扩展的HTTP版本通常称为HTTP/1.0。

HTTP/1.1

HTTP/1.1侧重于纠正HTTP设计中的架构缺陷、指定语义、引入重要的性能优化以及删除错误特性。http/1.1还包括对1990年代后期正在进行的更复杂的网络应用程序和部署的支持。HTTP/1.1是HTTP.NG(a.k.a)的当前版本。

HTTP/2.0

HTTP-NG是HTTP/1.1的架构继承者的一个原型建议,它侧重于显着的性能优化和一个更强大的服务器逻辑远程执行框架。HTTP-NG的研究工作于1998年结束,在撰写本文时,还没有计划推进这一建议,以取代HTTP/1.1。

web体系架构

我们关注两个Web应用程序(Web浏览器和Web服务器)如何来回发送消息以实现基本事务。还有许多其他的Web应用程序,您可以在Internet上进行交互 。,我们将概述其他几个重要应用程序,包括:

服务器代理

介于客户端和服务器之间的HTTP中介

缓存

为客户保存网页副本的http库

网关

连接到其他应用程序的特殊web服务器

网际协议

无知转发HTTP通信的特殊代理

客户端代理

提供自动HTTP请求的半智能Web客户端

Proxies 代理服务器

让我们从HTTP代理服务器开始,这是Web安全、应用程序集成和性能优化的重要构建块,如图1-11所示,代理位于客户端和服务器之间,接收客户端的所有HTTP请求并将请求中继到服务器(可能在修改请求之后)。这些应用程序充当用户的代理,代表用户访问服务器。

i97qmj.png

代理通常用于安全性,充当可信任的中介,所有的网络流量通过它流动。代理还可以过滤请求和响应;例如,检测企业下载中的应用程序病毒,或者过滤远离小学生的成人内容 。

caches缓存

Web缓存或缓存代理是一种特殊类型的HTTP代理服务器,它保存通过代理传递的流行文档的副本。下一个请求相同文档的客户机可以从缓存的个人副本中得到服务(参见图1-12)。

i9Hp1U.png

户端可能比从远程Web服务器更快地从附近的缓存下载文档。http定义了许多工具,以使缓存更有效,并规范缓存内容的新鲜度和隐私性。

Gateways 网关

网关是作为其他服务器的中间层的特殊服务器。它们通常用于将HTTP流量转换为另一种协议。网关总是接收请求,就好像它是资源的源服务器一样。客户端可能不知道它正在与网关通信,例如,HTTP/FTP网关通过HTTP请求接收FTP URI请求,但使用FTP协议获取文档(参见图1-13)。生成的文档被打包成HTTP消息并发送到客户端。

i97L0s.png

Tunnels 网际协议

网际协议是HTTP应用程序,安装后,在两个连接之间盲目地中继原始数据。HTTP隧道通常用于在一个或多个HTTP连接上传输非HTTP数据,而不查看数据。HTTP隧道的一个流行用途是通过HTTP连接携带加密的安全套接字层(SSL)通信,允许SSL通信通过只允许网络流量的公司防火墙。如图1-14所示,HTTP/SSL隧道接收到一个HTTP请求,以建立到目标地址和端口的传出连接,然后继续通过HTTP通道对加密的SSL通信进行隧道,以便能够将其盲目地转发到目标服务器。

i97jkq.png

Agents 客户端代理

用户代理(或仅仅是代理)是代表用户发出HTTP请求的客户端程序。任何发出Web请求的应用程序都是HTTP代理。到目前为止,我们只讨论了一种HTTP代理:Web浏览器。但是还有许多其他类型的用户代理,例如,有一些机器自动用户代理可以自主地在Web上漫游,发出HTTP事务和获取内容,而无需人工监督。这些自动代理通常有五颜六色的名称,如“蜘蛛”或“网络机器人”(参见图1-15)。蜘蛛在网络上漫游,建立有用的网页内容档案,比如搜索引擎的数据库或比较购物机器人的产品目录。

i97vt0.png

可供参考文档

协议

http://www.w3.org/Protocols/

http://www.ietf.org/rfc/rfc2616.txt

http://www.ietf.org/rfc/rfc1945.txt

http://www.w3.org/Protocols/HTTP/AsImplemented.html

历史展望

http://www.w3.org/Protocols/WhyHTTP.html

http://www.w3.org/History.html

http://www.w3.org/DesignIssues/Architecture.html

其它的一些信息

http://www.w3.org

http://www.ietf.org/rfc/rfc2396.txt

http://www.ietf.org/rfc/rfc2141.txt

http://www.ietf.org/rfc/rfc2046.txt

http://www.wrec.org/Drafts/draft-ietf-wrec-taxonomy-06.txt

转载于:https://www.cnblogs.com/qiudaozhang/p/9597225.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值