您的位置:首页 > 理论基础 > 计算机网络

HTTP协议的初步了解

2014-12-02 01:43 465 查看
引言:最近因为在分析数据包特征,所以一直都在接触HTTP协议,在分析数据包之前,虽然已经看过一篇网上传播很广的文章:HTTP协议详解

但是还是比较懵懂,所以今天又看了一遍,结合之前自己做的一些相关工作,来谈一下自己对于HTTP协议的了解。之前看过的文章很多都是从

HTTP的特性,例如面向对象,无连接,无状态等开始讲的,个人觉得对于初学者来说,只要知道有这几个特性的存在就可以了,这些特性的具体

表现应该在实践操作中才能深刻的体会到。

且HTTP协议分为HTTP请求和HTTP回复两类,所以,接下来的会在讲述HTTP结构的基础上再分类说明,因为无论HTTP请求或是回复的结构都是相同的。

一、HTTP协议结构

1.HTTP协议结构示意:



图1-1 HTTP结构示意图

2.HTTP协议开始行:

如图1-1所示,HTTP协议的开始行又分为请求行和应答行,显然,请求行就是HTTP请求的开始行,而应答行就是HTTP的应答的开始行。

2.1HTTP请求行:

HTTP的请求行的基本格式是:方法 URI 协议版本号(请求行以方法开头,中间以空格隔开,末尾处有回车换行字符)
例如:
POST http://passport.91town.com/doRegiste.vhtml HTTP/1.1
所谓的方法就是发起HTTP请求的客户端要对服务器的操作行为,例如上面的例子中的POST方法,就表明该HTTP请求的客户端要向服务器
提交某些信息。
HTTP的方法有多种,这里就讲常用的两种:
GET:请求获得URI标识的资源,例如,要访问百度就有:GET http://www.baidu.com/ HTTP/1.1
POST:请求在URI所标识的资源中附加新的数据,例如,要登陆新浪微博:
POST http://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.4.18) HTTP/1.1

URI是统一资源定位符,直观的说就是你想要访问的网页的网址。
协议版本号现在一般都是HTTP/1.1。

2.2HTTP应答行

(在RFC2616标准中定义是状态行:Status-Line,在这里为了能够与请求行对应,更容易理解,暂且称为应答行,请读者们注意):

HTTP应答行的基本格式是:协议版本号 状态码
例如:HTTP/1.1 200 OK 表示请求成功
状态代码有三位数字组成,第一个数字定义了响应的类别,且有五种可能取值:

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

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

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

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

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

常见状态代码、状态描述、说明:

200 OK //客户端请求成功

400 Bad Request //客户端请求有语法错误,不能被服务器所理解

401 Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用

403 Forbidden //服务器收到请求,但是拒绝提供服务

404 Not Found //请求资源不存在,eg:输入了错误的URL

500 Internal Server Error //服务器发生不可预期的错误

503 Server Unavailable //服务器当前不能处理客户端的请求,一段时间后可能恢复正常
以上关于状态码的讲述引用的是HTTP详解

3.消息报头

消息报头分为三类:普通报头,请求报头,响应报头和实体报头,顾名思义,请求报头关于HTTP请求的一些信息,
而响应报头则是HTTP回复的一些信息,实体报头则是关于正文实体的一些信息,至于普通报头,则是一些基本信息,
格式都为头域加上值,其中以分号分开。

3.1普通报头

常见的普通报头有:
Cache-Control,缓存指令,常见的值有:max-age=0;
Date表示消息产生的时间;
Connection允许发送指定连接的选项。例如指定连接是连续,或者指定“close”选项,通知服务器,在响应完成后,
关闭连接,常见的值有keep-alive,保持连接。

3.2请求报头

常见的请求报头有:

Accept,用于告诉服务器,客户端接受那种类型的信息,例如Accept: text/html,表示客户端希望接受html格式的文本资源。

Accept-Encoding,告诉服务器,客户端接受的内容编码形式,如果没有,则表明客户端接受所有内容编码形式,

如Accept-Encoding:gzip,告诉服务器接受压缩编码。

Referer:URI,表示放出该消息的时候所停留的网页页面的地址;

Accept-Language,指定一种语言,例如Accept-Language:zh-CN;

Host表示HTTP请求的资源所在主机名;

User-Agent表示发起HTTP请求浏览器的相关信息。

3.3响应报头

常见的响应报头有:
Loction:URI,表示资源重定向。
Server:表示服务器用来处理HTTP请求的软件信息,和HTTP请求中的User-Agent对应。

3.4实体报头

常见的实体报头有:
Content-Length,用于指明实体(正文)的长度,例如:Content-Length:324,表示实体的长度为324个字节。
Content-Language,用于指明实体使用了那种自然语言。
Content-Type,用于指明发送给接收者的实体的媒体信息,例如,Contet-Type:application/x-www-form-urlencoded,
表示将请求正文分成若干个元素,各元素由名和值构成,各元素之间用&隔开.
Last-Modified,用来表明实体的最后修改时间;
Expire,表明HTTP响应过期的时间。

4.实体(正文)部分

正文部分包含的请求或者应答信息,例如发帖中的发帖内容等。具体没有什么好讲的,所以在这里就不多作叙述了。

以上是这段时间通过对某些网站的通信行为进行分析同时学习了HTTP协议之后的一些整理,有错的地方还望各位看官指出



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: