HTTP协议分析.docx

上传人:b****8 文档编号:11473719 上传时间:2023-03-01 格式:DOCX 页数:14 大小:23.28KB
下载 相关 举报
HTTP协议分析.docx_第1页
第1页 / 共14页
HTTP协议分析.docx_第2页
第2页 / 共14页
HTTP协议分析.docx_第3页
第3页 / 共14页
HTTP协议分析.docx_第4页
第4页 / 共14页
HTTP协议分析.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

HTTP协议分析.docx

《HTTP协议分析.docx》由会员分享,可在线阅读,更多相关《HTTP协议分析.docx(14页珍藏版)》请在冰豆网上搜索。

HTTP协议分析.docx

HTTP协议分析

HTTP协议分析

1、HTTP介绍

HTTP是超文本传输协议,是客户端浏览器或其他程序与Web服务器之间的应用层通信协议。

在Internet上的Web服务器上存放的都是超文本信息,客户机需要通过HTTP协议传输所要访问的超文本信息。

HTTP包含命令和传输信息,不仅可用于Web访问,也可以用于其他因特网/内联网应用系统之间的通信,从而实现各类应用资源超媒体访问的集成。

2、HTTP应用

目前网络上利用HTTP协议的应用已经非常广泛,如下表所示:

大类

小类

电子邮件

WEBMAIL

网站

门户、公司、个人WWW网站

HTTP-search

流媒体网站

论坛、聊天

论坛

聊天室

突网工具

Web加密

社交网站

Facebook、Twitter等

订票网站

旅游网站

购物

代理服务器

HTTP代理

软件更新

HTTP方式更新软件

3、HTTP协议标准

HTTP中文名称为超文本传输协议(HyperTextTransferProtocol),是一个应用层协议,目前有两个版本,分别为HTTP1.0(RFC1945,1996年5月份发布)和HTTP1.1(RFC2616,1999年6月份发布),现在几乎所有的应用(包括客户端和服务器)都基于HTTP1.1。

3.1HTTP1.1和HTTP1.0的区别

它们之间的区别主要有如下几点:

(一)持久连接

HTTP1.1支持持久连接,且默认是持久连接。

HTTP1.0不支持持久连接,每次访问完后就关闭该连接。

(二)HOST域

HTTP1.1支持HOST域,这样允许虚拟主机的存在。

HTTP1.0不支持HOST域。

(三)日期时间戳

(接收方向)

无论是HTTP1.0还是HTTP1.1,都要能解析下面三种date/timestamp:

Sun,06Nov199408:

49:

37GMT;RFC822,updatedbyRFC1123

Sunday,06-Nov-9408:

49:

37GMT;RFC850,obsoletedbyRFC1036

SunNov608:

49:

371994;ANSIC'sasctime()format

 (发送方向)

HTTP1.0要求不能生成第三种asctime格式的date/timestamp;

HTTP1.1则要求只生成RFC1123(第一种)格式的date/timestamp。

(四)传送编码

HTTP1.1支持chunkedtransfer,HTTP1.0不支持。

(五)Range和Content-Range

HTTP1.1支持传送内容的一部分。

比方说,当客户端已经有内容的一部分,为了节省带宽,可以只向服务器请求一部分。

(六)StatusCode

HTTP1.1增加了许多ResponseStatus-Code,比如100(Continue)。

(七)RequestMethod

HTTP1.1增加了OPTIONS、PUT、DELETE、TRACE、CONNECT这些Request方法。

(八)ContentNegotiation

HTTP1.1增加了ContentNegotiation,分为Server-drivenNegotiation,Agent-drivenNegotiation和TransparentNegotiation三种。

(九)Cache

HTTP1.1详细展开地描述了Cache机制。

3.2HTTP1.1

HTTP是一个客户端和服务器端请求和应答的标准。

客户端是终端用户,服务器端是网站。

通过使用Web浏览器、网络爬虫或者其它的工具,客户端发起一个到服务器上指定端口(默认端口为80)的HTTP请求,我们称这个客户端叫用户代理(useragent)。

应答的服务器上存储着(一些)资源,比如HTML文件和图像,我们称这个应答服务器为源服务器(originserver)。

在用户代理和源服务器中间可能存在多个中间层,比如代理,网关,或者隧道(tunnels)。

尽管TCP/IP协议是互联网上最流行的应用,HTTP协议并没有规定必须使用它和(基于)它支持的层。

事实上,HTTP可以在任何其他互联网协议上,或者在其他网络上实现。

HTTP只假定其下层协议提供可靠的传输,任何能够提供这种保证的协议都可以被其使用。

HTTP消息包括两种:

request和response,消息格式为:

开始行++消息头++消息正文。

消息头包括general-header、request-header、response-header和entity-header四种,消息头格式为:

域名+空格+:

+空格+域值,一个消息可以包含多个消息头,每个消息头都以结束。

3.2.1request消息

Request消息的开始行(请求行)格式为:

请求方法+空格+请求的URI+空格+HTTP版本号,一个消息只有一个请求行。

请求方法有如下几种:

请求方法

解释

OPTIONS

请求查询服务器的性能,或者查询与资源相关的选项和需求

GET

请求获取Request-URI所标识的资源

HEAD

请求获取由Request-URI所标识的资源的响应消息报头

POST

在Request-URI所标识的资源后附加新的数据

PUT

请求服务器存储一个资源,并用Request-URI作为其标识

DELETE

请求服务器删除Request-URI所标识的资源

TRACE

请求服务器回送收到的请求信息,主要用于测试或诊断

CONNECT

通过代理服务器连接目的服务器

extension-method

用户扩展的方法

请求的URI分为绝对URI、相对URI和认证信息,其中认证信息仅当方法为CONNECT时有效,绝对URI也主要用于代理时。

例如:

GEThttp:

//www.w3.org/pub/WWW/TheProject.htmlHTTP/1.1(绝对URI)

GET/pub/WWW/TheProject.htmlHTTP/1.1(相对URI)

消息头包括general-header、request-heade和entity-header。

消息正文可有可无。

请求消息例子:

GET/portal-core/layouts/generic/img/technical_support_2.jpgHTTP/1.1

Accept:

*/*

Referer:

Accept-Language:

zh-CN

User-Agent:

Mozilla/4.0(compatible;MSIE8.0;WindowsNT6.1;WOW64;Trident/4.0;SLCC2;.NETCLR2.0.50727;.NETCLR3.5.30729;.NETCLR3.0.30729;MediaCenterPC6.0;InfoPath.3;staticlogin:

product=cboxf2010&act=login&info=ZmlsZW5hbWU9UG93ZXJXb3JkMjAxME94Zl9VbHRpbWF0ZS5leGUmbWFjPTNFMEVENjUyMEJBMzQzNjlBQkQwRDkyNDI5MTI3MkVFJnBhc3Nwb3J0PSZ2ZXJzaW9uPTIwMTAuNi4zLjYuMiZjcmFzaHR5cGU9MQ==&verify=38e5900f1776a308ebc214205c5bb1a1)

Accept-Encoding:

gzip,deflate

Host:

Connection:

Keep-Alive

Cookie:

JSESSIONID=058202D9E4BA7B9F51CCA031B87EBB49

3.2.2response消息

Response消息的开始行(状态行)格式为:

HTTP版本号+空格+响应状态代码+空格+响应状态文字描述。

状态代码有三位数字组成,第一个数字定义了响应的类别,且有五种可能取值:

1xx:

指示信息--表示请求已接收,继续处理

2xx:

成功--表示请求已被成功接收、理解、接受

3xx:

重定向--要完成请求必须进行更进一步的操作

4xx:

客户端错误--请求有语法错误或请求无法实现

5xx:

服务器端错误--服务器未能实现合法的请求

具体状态代码和描述如下:

"100":

Continue

"101":

SwitchingProtocols

"200":

OK

"201":

Created

"202":

Accepted

"203":

Non-AuthoritativeInformation

"204":

NoContent

"205":

ResetContent

"206":

PartialContent

"300":

MultipleChoices

"301":

MovedPermanently

"302":

Found

"303":

SeeOther

"304":

NotModified

"305":

UseProxy

"307":

TemporaryRedirect

"400":

BadRequest

"401":

Unauthorized

"402":

PaymentRequired

"403":

Forbidden

"404":

NotFound

"405":

MethodNotAllowed

"406":

NotAcceptable

"407":

ProxyAuthenticationRequired

"408":

RequestTime-out

"409":

Conflict

"410":

Gone

"411":

LengthRequired

"412":

PreconditionFailed

"413":

RequestEntityTooLarge

"414":

Request-URITooLarge

"415":

UnsupportedMediaType

"416":

Requestedrangenotsatisfiable

"417":

ExpectationFailed

"500":

InternalServerError

"501":

NotImplemented

"502":

BadGateway

"503":

ServiceUnavailable

"504":

GatewayTime-out

"505":

HTTPVersionnotsupported

例如:

HTTP/1.1200OK

HTTP/1.1301MovedPermanently

HTTP/1.1304NotModified

消息头包括general-header、response-heade和entity-header。

消息正文可有可无。

响应消息例子:

HTTP/1.1200OK

Server:

Apache-Coyote/1.1

X-Powered-By:

Servlet2.4;JBoss-4.2.3.GA(build:

SVNTag=JBoss_4_2_3_GAdate=200807181417)/JBossWeb-2.0

ETag:

W/"30178-1272473282000"

Last-Modified:

Wed,28Apr201016:

48:

02GMT

Content-Type:

image/jpeg

Content-Length:

30178

Date:

Tue,09Aug201113:

36:

50GMT

......JFIF.....H.H......Exif..MM.*.............................b...........j.(...........1.........r.2...........i.................H.......H....AdobePhotoshop7.0.2010:

04:

1414:

00:

37............................`.........................................................(.....................&..................H.......H..........JFIF.....H.H......Adobe_CM......Adobe.d......................

.......................................................

3.2.3URL

HTTPURL是一种特殊的URI,包含了用于查找某个资源的足够的信息,其格式如下:

"http:

""//"host[":

"port][abs_path["?

"query]]

http表示要通过HTTP协议来定位网络资源;

host表示合法的Internet主机域名或者IP地址;

port指定一个端口号,为空则使用缺省端口80;

abs_path指定请求资源的URI,如果URL中没有给出abs_path,那么当它作为请求URI时,必须以“/”的形式给出,通常这个工作浏览器自动帮我们完成。

例如:

1、输入:

浏览器自动转换成:

2、http:

//10.10.201.100:

8888/index.jsp

3.2.4general-header

general-header(通用报头)是指在request消息和response消息中都会用到的消息头,包括如下域:

域名

说明

Cache-Control

用于指定缓存指令

Connection

发送指定连接的选项

Date

表示消息产生的日期和时间

Pragma

用来包含实现特定的指令

Trailer

指明了在以块(chunked)传输编码消息里的尾部(trailer)里用到的头域

Transfer-Encoding

指示了消息正文(messagebody)的编码转换,这是为了实现在接收端和发送端之间的安全数据传输

Upgrade

允许客户端指定它支持什么样的附加传输协议

Via

必须被网关和代理使用,用来指明用户代理和服务器之间关于请求的中间协议和接收者,以及源服务器和客户端之间关于响应的中间协议和接收者

Warning

用于携带额外关于消息的状态或变换的信息而这些信息是不能在消息里反应出来的

3.2.5Request-header

request-header(请求报头)是只在request消息才会用到的消息头,包括如下域:

域名

说明

Accept

用于指定服务器返回给客户端可接受的响应媒体类型

Accept-Charset

用来指出请求客户端能接受什么样的字符集响应

Accept-Encoding

限定服务器返回给客户端可以接受的内容编码

Accept-Language

限定服务器返回给客户端喜爱的自然语言

Authorization

发送授权信息给服务器希望得到授权

Expect

用于指明客户端需要的特定服务器行为

From

允许客户端指定它支持什么样的附加传输协议

Host

说明了正在请求资源的网络主机和端口号

If-Match

如果一个客户端已经从一个资源里获得一个或多个实体(entity),那么他可以通过在If-Match头域里包含相应的实体标签(entitytag)来验证这些实体的一个或多个是否就是服务器当前实体

If-Modified-Since

如果请求变量(variant)自从此头域里指定的时间之后没有改变,那么服务器不应该返回实体

If-None-Match

一个客户端如果有一个或多个从某资源获得的实体,那么他能验证在这些实体中有不存在于服务器当前实体中的实体,这通过在If-None-Match头域里包含这些实体相关的实体标签(entitytag)来达到此目的

If-Range

如果实体没有改变,发送我想要的部分;如果实体改变了,那就把整个新的实体发过来

If-Unmodified-Since

如果请求资源自从此头域指定时间开始之后没有改变,那么服务器应该执行此请求就像If-Unmodified-Since头域不存在一样。

如果请求变量在此头域指定时间后以后已经改变,那么服务器不能执行此请求

Max-Forwards

提供一种机制,那就是利用TRACE和OPTIONS方法去限制代理或网关的数量,这些代理或网关能传递请求到下一个入流(inbound)服务器

Proxy-Authorization

允许客户端让一个需要授权的代理能给自己(或客户端的用户)授权

Range

使用条件或无条件GET方法可以请求一个或多个实体的字节范围,而不是整个实体

Referer

允许服务器生成关于到资源的反向连接列表

TE

指明客户端可以接受哪些传输编码(transfer-coding)的响应,和是否愿意接收块(chunked)传输编码响应的尾部(trailer)

User-Agent

包含关于发起请求的用户代理的信息

3.2.6Response-header

response-header(响应报头)是只在response消息才会用到的消息头,包括如下域:

域名

说明

Accept-Ranges

允许服务器指明它对客户的范围请求(rangerequest)的接受程度

Age

表示发送者(一般是缓存)对响应产生(或重验证)时刻后经过时间的估计

ETag

提供了请求对应变量(variant)的当前实体标签

Location

被用于为了完成请求或识别一个新资源,使接收者能重定向于Location指示的URI而不是请求URI

Proxy-Authenticate

代理授权

Retry-After

能被用于一个503(服务不可得)响应,服务器用它来向请求端指明服务不可得的时长。

此头域可能被用于3xx(重定向)响应,服务器用它来(如web浏览器)指明用户代理再次提交已重定向请求之前的最小等待时间

Server

包含了源服务器用于处理请求的软件信息

Vary

指定了一些请求头域,这些请求头域用来决定当缓存中存在一个响应是保鲜时缓存是否被允许去利用此响应去回复后续请求而不需要重验证(revalidation)

WWW-Authenticate

必须包含在401(没有被授权)响应消息中

3.2.7Entity-header

Entity-header(实体报头)是用来描述实体的消息头,在request消息和response消息中都有可能包含实体(消息正文),实体报头包括如下域:

域名

说明

Allow

列出了请求URI(Request-URI)指定资源所支持的几种方法。

必须出现在405(方法不被允许)响应中

Content-Encoding

表明对实体主体采用了何种的内容编码,从而可以知道采用何种解码机制以获取Content-Type头域中指出的媒体类型

Content-Language

描述了实体面向用户的自然语言

Content-Length

按十进制或八位字节数指明了发给给接收者的实体主体的大小

Content-Location

可用来为消息里的实体提供对应资源的位置,当此实体的访问位置和请求URI不是同一位置时

Content-MD5

含有的是实体主体的MD5摘要,这是为了给一个end-to-end消息的实体主体的提供完整性检测

Content-Range

用于指明部分实体主体在完整实体主体里那一部分被采用

Content-Type

指明发给接收者的实体主体的媒体类型

Expires

给出了在何日何时之后响应即被视为陈旧的

Last-Modified

指明了变量(variant)被源服务器所确信的最后修改的日期和时间

extension-header

用户可扩充的域

4、WEB服务器和客户端

目前市场上占主流的WEB服务器有Apache、IIS、Nginx、AOLserver、Lighttpd、LiteSpeed、Zeus,其中后两款是商业服务器,需要收费,其余的都是免费的并且大部分是开源的。

除了这些主流的服务器之外还有一些轻型化的服务器,如TornadoWebServer、Cherokee、thttpd、Appweb、Eurasia3、Mongrel、Shttpd、TclHttpd等。

HTTP客户端主要是指浏览器,有IE、Firefox、Opera、Lynx、Konqueror、Safari、傲游浏览器、Chrome、E影浏览器、UC手机浏览器、HotJAVA等。

国内的如腾讯TT、搜狗浏览器、世界之窗、360浏览器等都是基于IE的内核实现的。

5、相关技术介绍

与HTTP相关的技术比较多,主要有HTML、XML、JavaScript、CSS、DOM、cookie、session、PHP、JSP、CGI、perl等,这些技术大都是为了在服务器端实现静态和动态网页以及在客户端实现页面展示所采用的一些编程技术,具体技术标准可以参考各自的标准文档。

HTTPS(全称:

HypertextTransferProtocoloverSecureSocketLayer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。

即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。

它是一个URIscheme(抽象标识符体系),句法类同http:

体系。

用于安全的HTTP数据传输。

https:

URL表明它使用了HTTP,但HTTPS存在不同于HTTP的默认端口(HTTPS的默认端口是443)及一个加密/身份验证层(在HTTP与TCP之间)。

这个系统的最初研发由网景公司进行,提供了身份验证与加密通讯方法,现在它被广泛用于万维网上安全敏感的通讯,例如交易支付方面。

6、HTTP数据还原

HTTP数据还原是指将网络上获取的数据包按照一定的顺序重新组装成request消息或response消息。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 解决方案

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1