HTTP协议的初步了解
2014-12-02 01:43
465 查看
引言:最近因为在分析数据包特征,所以一直都在接触HTTP协议,在分析数据包之前,虽然已经看过一篇网上传播很广的文章:HTTP协议详解,
但是还是比较懵懂,所以今天又看了一遍,结合之前自己做的一些相关工作,来谈一下自己对于HTTP协议的了解。之前看过的文章很多都是从
HTTP的特性,例如面向对象,无连接,无状态等开始讲的,个人觉得对于初学者来说,只要知道有这几个特性的存在就可以了,这些特性的具体
表现应该在实践操作中才能深刻的体会到。
且HTTP协议分为HTTP请求和HTTP回复两类,所以,接下来的会在讲述HTTP结构的基础上再分类说明,因为无论HTTP请求或是回复的结构都是相同的。
图1-1 HTTP结构示意图
例如:
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。
例如: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详解。
而响应报头则是HTTP回复的一些信息,实体报头则是关于正文实体的一些信息,至于普通报头,则是一些基本信息,
格式都为头域加上值,其中以分号分开。
Cache-Control,缓存指令,常见的值有:max-age=0;
Date表示消息产生的时间;
Connection允许发送指定连接的选项。例如指定连接是连续,或者指定“close”选项,通知服务器,在响应完成后,
关闭连接,常见的值有keep-alive,保持连接。
Accept,用于告诉服务器,客户端接受那种类型的信息,例如Accept: text/html,表示客户端希望接受html格式的文本资源。
Accept-Encoding,告诉服务器,客户端接受的内容编码形式,如果没有,则表明客户端接受所有内容编码形式,
如Accept-Encoding:gzip,告诉服务器接受压缩编码。
Referer:URI,表示放出该消息的时候所停留的网页页面的地址;
Accept-Language,指定一种语言,例如Accept-Language:zh-CN;
Host表示HTTP请求的资源所在主机名;
User-Agent表示发起HTTP请求浏览器的相关信息。
Loction:URI,表示资源重定向。
Server:表示服务器用来处理HTTP请求的软件信息,和HTTP请求中的User-Agent对应。
Content-Length,用于指明实体(正文)的长度,例如:Content-Length:324,表示实体的长度为324个字节。
Content-Language,用于指明实体使用了那种自然语言。
Content-Type,用于指明发送给接收者的实体的媒体信息,例如,Contet-Type:application/x-www-form-urlencoded,
表示将请求正文分成若干个元素,各元素由名和值构成,各元素之间用&隔开.
Last-Modified,用来表明实体的最后修改时间;
Expire,表明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协议之后的一些整理,有错的地方还望各位看官指出
相关文章推荐
- HTTP协议初步了解
- 了解一下Http常见状态码、Http协议的工作特点和原理、Http请求Post与Get的区别
- 蜜果私塾:http协议学习和总结系列--深入了解篇
- 初步了解下RPC远程通信协议
- HTTP协议初步
- mqtt协议初步了解
- 学习HTTP---初步了解(一)
- [Android进阶]之深入了解通信协议:http、TCP/IP协议与socket之间的区别
- XMPP协议初步了解
- HTTP第一篇【简单了解HTTP、与HTTP相关的协议】
- javaweb入门(4)-- 详细了解http协议2
- Android网络编程之TCP/IP,HTTP,HTTPS协议了解
- 尚学堂马士兵servlet/JSP笔记(一、Http协议及WebApp初步)
- [Android进阶]之深入了解通信协议:http、TCP/IP协议与socket之间的区别
- 了解HTTP Header之User-Agent和HTTP协议的响应码
- HTTP协议基本了解
- Python模拟http协议初步学习(002)
- 一个不了解HTTP协议的程序员不是一个好的Web开发者
- 新手入门:了解WWW服务与HTTP协议5
- 全面了解Nginx中的HTTP协议相关模块配置