HTTP协议基础

HTTP协议基础()

HTTP HyperTextTransferProtocol)是超文本传输协议的缩写,它用于传送WWW方式的数据,关于HTTP协议的详细内容请参考 RFC2616HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求,请求头包含请求的方法、URI、协议版本、以及包含请求修饰符、客户信 息和内容的类似于MIME的消息结构。服务器以一个状态行作为响应,相应的内容包括消息协议的版本,成功或者错误编码加上包含服务器信息、实体元信息以及 可能的实体内容。
  
通常HTTP消息包括客户机向服务器的请求消息和服务器向客户机的响应消息。这两种类型的消息由一个起始行,一个或者多个头域,一个只是头域结束的空行和 可选的消息体组成。HTTP的头域包括通用头,请求头,响应头和实体头四个部分。每个头域由一个域名,冒号(:)和域值三部分组成。域名是大小写无关的, 域值前可以添加任何数量的空格符,头域可以被扩展为多行,在每行开始处,使用至少一个空格或制表符。

通用头域

通用头域包含请求和响应消息都支持的头域,通用头域包含Cache-ControlConnectionDatePragmaTransfer- EncodingUpgradeVia。对通用头域的扩展要求通讯双方都支持此扩展,如果存在不支持的通用头域,一般将会作为实体头域处理。下面简单 介绍几个在UPnP消息中使用的通用头域。

Cache-Control
头域

Cache-Control
指定请求和响应遵循的缓存机制。在请求消息或响应消息中设置Cache-Control并不会修改另一个消息处理过程中的缓存 处理过程。请求时的缓存指令包括no-cacheno-storemax-agemax-stalemin-freshonly-if- cached,响应消息中的指令包括publicprivateno-cacheno-storeno-transformmust- revalidateproxy-revalidatemax-age。各个消息中的指令含义如下:

Public
指示响应可被任何缓存区缓存。

Private
指示对于单个用户的整个或部分响应消息,不能被共享缓存处理。这允许服务器仅仅描述当用户的部分响应消息,此响应消息对于其他用户的请求无效。

no-cache
指示请求或响应消息不能缓存

no-store
用于防止重要的信息被无意的发布。在请求消息中发送将使得请求和响应消息都不使用缓存。

max-age
指示客户机可以接收生存期不大于指定时间(以秒为单位)的响应。

min-fresh
指示客户机可以接收响应时间小于当前时间加上指定时间的响应。

max-stale
指示客户机可以接收超出超时期间的响应消息。如果指定max-stale消息的值,那么客户机可以接收超出超时期指定值之内的响应消息。

Date
头域

Date
头域表示消息发送的时间,时间的描述格式由rfc822定义。例如,Date:Mon,31Dec200104:25:57GMTDate描述的时间表示世界标准时,换算成本地时间,需要知道用户所在的时区。

Pragma
头域

Pragma
头域用来包含实现特定的指令,最常用的是Pragma:no-cache。在HTTP/1.1协议中,它的含义和Cache-Control:no-cache相同。

请求消息

请求消息的第一行为下面的格式:

MethodSPRequest-URISPHTTP-VersionCRLFMethod
表示对于Request-URI完成的方法,这个字段是大小写 敏感的,包括OPTIONSGETHEADPOSTPUTDELETETRACE。方法GETHEAD应该被所有的通用WEB服务器支持, 其他所有方法的实现是可选的。GET方法取回由Request-URI标识的信息。HEAD方法也是取回由Request-URI标识的信息,只是可以在 响应时,不返回消息体。POST方法可以请求服务器接收包含在请求中的实体信息,可以用于提交表单,向新闻组、BBS、邮件群组和数据库发送消息。

SP
表示空格。Request-URI遵循URI格式,在此字段为星号(*)时,说明请求并不用于某个特定的资源地址,而是用于服务器本身。HTTP- Version表示支持的HTTP版本,例如为HTTP/1.1CRLF表示换行回车符。请求头域允许客户端向服务器传递关于请求或者关于客户机的附加 信息。请求头域可能包含下列字段AcceptAccept-CharsetAccept-EncodingAccept-Language AuthorizationFromHostIf-Modified-SinceIf-MatchIf-None-MatchIf- RangeIf-RangeIf-Unmodified-SinceMax-ForwardsProxy-Authorization RangeRefererUser-Agent。对请求头域的扩展要求通讯双方都支持,如果存在不支持的请求头域,一般将会作为实体头域处理。

典型的请求消息:

GEThttp://download.microtool.de:80/somedata.exe

Host:download.microtool.de

Accept:*/*

Pragma:no-cache

Cache-Control:no-cache

Referer:http://download.microtool.de/

User-Agent:Mozilla/4.04[en](Win95;I;Nav)

Range:bytes=554554-

上例第一行表示HTTP客户端(可能是浏览器、下载程序)通过GET方法获得指定URL下的文件。棕色的部分表示请求头域的信息,绿色的部分表示通用头部分。

Host
头域

Host
头域指定请求资源的Intenet主机和端口号,必须表示请求url的原始服务器或网关的位置。HTTP/1.1请求必须包含主机头域,否则系统会以400状态码返回。

Referer
头域

Referer
头域允许客户端指定请求uri的源资源地址,这可以允许服务器生成回退链表,可用来登陆、优化cache等。他也允许废除的或错误的连接由 于维护的目的被追踪。如果请求的uri没有自己的uri地址,Referer不能被发送。如果指定的是部分uri地址,则此地址应该是一个相对地址。

Range
头域

Range
头域可以请求实体的一个或者多个子范围。例如,

表示头500个字节:bytes=0-499

表示第二个500字节:bytes=500-999

表示最后500个字节:bytes=-500

表示500字节以后的范围:bytes=500-

第一个和最后一个字节:bytes=0-0,-1

同时指定几个范围:bytes=500-600,601-999

但是服务器可以忽略此请求头,如果无条件GET包含Range请求头,响应会以状态码206PartialContent)返回而不是以200OK)。

User-Agent
头域

User-Agent
头域的内容包含发出请求的用户信息。

响应消息

响应消息的第一行为下面的格式:

HTTP-VersionSPStatus-CodeSPReason-PhraseCRLF

HTTP-Version
表示支持的HTTP版本,例如为HTTP/1.1Status-Code是一个三个数字的结果代码。Reason- PhraseStatus-Code提供一个简单的文本描述。Status-Code主要用于机器自动识别,Reason-Phrase主要用于帮助用 户理解。Status-Code的第一个数字定义响应的类别,后两个数字没有分类的作用。第一个数字可能取5个不同的值:

1xx:
信息响应类,表示接收到请求并且继续处理

2xx:
处理成功响应类,表示动作被成功接收、理解和接受

3xx:
重定向响应类,为了完成指定的动作,必须接受进一步处理

4xx:
客户端错误,客户请求包含语法错误或者是不能正确执行

5xx:
服务端错误,服务器不能正确执行一个正确的请求

响应头域允许服务器传递不能放在状态行的附加信息,这些域主要描述服务器的信息和Request-URI进一步的信息。响应头域包含Age LocationProxy-AuthenticatePublicRetry-AfterServerVaryWarningWWW- Authenticate。对响应头域的扩展要求通讯双方都支持,如果存在不支持的响应头域,一般将会作为实体头域处理。

典型的响应消息:

HTTP/1.0200OK

Date:Mon,31Dec200104:25:57GMT

Server:Apache/1.3.14(Unix)

Content-type:text/html

Last-modified:Tue,17Apr200106:46:28GMT

Etag:"a030f020ac7c01:1e9f"

Content-length:39725426

Content-range:bytes554554-40279979/40279980

上例第一行表示HTTP服务端响应一个GET方法。棕色的部分表示响应头域的信息,绿色的部分表示通用头部分,红色的部分表示实体头域的信息。

Location
响应头

Location
响应头用于重定向接收者到一个新URI地址。

Server
响应头

Server
响应头包含处理请求的原始服务器的软件信息。此域能包含多个产品标识和注释,产品标识一般按照重要性排序。

实体

请求消息和响应消息都可以包含实体信息,实体信息一般由实体头域和实体组成。实体头域包含关于实体的原信息,实体头包括AllowContent- BaseContent-EncodingContent-LanguageContent-LengthContent-Location Content-MD5Content-RangeContent-TypeEtagExpiresLast-Modified extension-headerextension-header允许客户端定义新的实体头,但是这些域可能无法未接受方识别。实体可以是一个经过编 码的字节流,它的编码方式由Content-EncodingContent-Type定义,它的长度由Content-LengthContent -Range定义。

Content-Type
实体头

Content-Type
实体头用于向接收方指示实体的介质类型,指定HEAD方法送到接收方的实体介质类型,或GET方法发送的请求介质类型Content-Range实体头

Content-Range
实体头用于指定整个实体中的一部分的插入位置,他也指示了整个实体的长度。在服务器向客户返回一个部分响应,它必须描述响应覆盖的范围和整个实体长度。一般格式:

Content-Range:bytes-unitSPfirst-byte-pos-last-byte-pos/entity-legth

例如,传送头500个字节次字段的形式:Content-Range:bytes0-499/1234如果一个http消息包含此节(例如,对范围请求的 响应或对一系列范围的重叠请求),Content-Range表示传送的范围,Content-Length表示实际传送的字节数。

Last-modified
实体头

Last-modified
实体头指定服务器上保存内容的最后修订时间。

HTTP协议基础()

HTTP 协议定义服务器端和客户端之间文件传输的沟通方式。目前HTTP协议的版本是Http1.1RFC 2616描述了HTTP协议的具体信息。

这个协议已经成为浏览器和Web站点之间的标准。

当我上网的时候底层是如何进行交互的?

当访问者点击一个超链接的时候,将会给浏览器提交一个URL地址。通过这个URL地址,浏览器便知道去链接那个网站并去取得具体的页面文件(也可能是一张图片,一个pdf文件)。

HTTP
工作的基础就是,连接一个服务器并开始传输文件到浏览器。

HTTP
传输的基本过程

http传输的过程中,被称为客户端的请求者向服务器请求一个文件。

最基本的过程是:
1
客户端连接一个主机;
2
服务器接收连接,
3
客户端请求一个文件,
4
服务器发送一个应答.

实例

我们看几个典型的过程

首先,我们想访问本页面。在浏览器上敲入http://www.maketop.net/resource/rs_041112_02.php”.浏览器将连接www.maketop.net然后发送:

>> GET /resource/rs_041112_02.php Http1.1
>> Host: www.maketop.net
>> Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg,
>> Accept-Language: en
>> Accept-Encoding: gzip, deflate
>> User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; rv:1.7.3) Gecko/20040913 Firefox/0.10
>> Connection: Keep-Alive
>>

解释:浏览器请求页面“/resource/rs_041112_02.php”。并使用HTTP1.1协议。并告诉服务器你的浏览器是Firefox0.10。操作系统是Windows XP。 浏览器希望保持与www.maketop.net之间的连接,并请求获得多的文件,包括网页中的图片。翻译成语言上面是:

>>
HTTP1.1协议获得 /resource/rs_041112_02.php
>>
访问的主机是: www.maketop.net
>>
接收的文件包括了: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg,
>>
使用的语言是: en
>>
接收的编码方式(浏览器能够解释的)是: gzip, deflate
>>
用户的浏览器信息:Windows XP的操作系统 Firefox/0.10的浏览器
>>
保持连接: 还要去图片
>>



www.maketop.net
的服务器发出响应:

<< HTTP/1.1 200 OK
<< Date: Mon, 12 Mar 2004 19:12:16 GMT
<< Server: Apache/1.3.31 (Unix) mod_throttle/3.1.2
<< Last-Modified: Fri, 22 Sep 2004 14:16:18
<< ETag: "dd7b6e-d29-39cb69b2"
<< Accept-Ranges: bytes
<< Content-Length: 3369
<< Connection: close
<< Content-Type: text/html
<<
<< File content goes here

浏览器并从服务器的响应中获得服务器的信息:比如运行在Apache
上面翻译成翻译成语言上面就是

<< HTTP1.1
协议方式有效
<<
当前时间是: Mon, 12 Mar 2004 19:12:16 GMT
<<
服务器是: Apache/1.3.31 (Unix) mod_throttle/3.1.2
<<
最后一次修改: Fri, 22 Sep 2004 14:16:18
<< ETag: "dd7b6e-d29-39cb69b2"
<< Accept-Ranges: bytes
<< Content-Length: 3369
<< Connection: close
<< Content-Type: text/html
<<
<< File content goes here

 

  • 0
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值