最近做的东西需要更深入地了解Http协议,故死磕了一下RFC2616-HTTP/1.1协议,主要是了解Http Message结构及每部分含义,在此总结一下,并打算写一个模拟发送HTTP请求的工具,明天写完再附上来:> (注:下面如“(14.1)”表示是在RFC2616第14章第1节有更详细的介绍) 一.Http Message结构 了解Http Message先看下图: Http Message包含3个部分: (1).请求行/状态行 (2).消息头(Message Header),分为4类:常规头,请求头,响应头和实体头,下面会详细介绍,一个Message里可以有多个消息头。 (3).消息体(Message Body),这个是可选的。 二.Http Message分两类: 1.请求消息(Request Message) Request Message结构如下: (1).请求行(Request-Line)结构(5.1): Http方法(Http Method):主要有8类:GET,POST......下面会介绍。 Request-URI:请求操作的资源。 Http-Version:Http的版本,如:Http/1.0,Http/1.1 (2).消息头: 请求消息(Request Message)不应包含响应头。 2.响应消息(Response Message) Response Message结构如下: (1).状态行(Status-Line)结构: Http-Version:Http的版本,如:Http/1.0,Http/1.1 Status-Code(状态码):状态码是一个三位数字,我对状态码的理解是:对请求(request)做出响应的类型/结果。 状态码第一位数字定义了响应类型,这里分为5种: -1XX:Informational,请求接收到了,正在进一步的处理中(Request received, continuing process)。 -2XX:Success,表示用户请求被正确接收(The action was successfully received,understood, and accepted),这里典型的是:200 OK -3XX:Redirection,表示请求没有成功,客户必须采取进一步的动作 (Further action must be taken in order to complete the request.) -4XX:Client Error,表示客户端提交的请求有错误(The request contains bad syntax or cannot be fulfilled),典型的有:404 Not Found -5XX:Server Error,表示服务器不能完成对请求的处理 (The server failed to fulfill an apparently valid request),典型的是:503 Service Unavailable (注:详细的状态码会在文章的最后列出) (2).消息头: 响应消息(Response Message)不应包含请求头。 三.Http消息头包括4类: Http消息头(Message Header),主要是带上一些处理HTTP消息所需的辅助信息。 Http消息头结构如下: 1.Field-Name:下面提到的,如:Cache-Control,Date...等,这些就是Field-Name,在RFC文档中Field-Name的数量是有限的,只有43个,而你自己可以增加自定义的Field-Name,但由于浏览器是按照RFC规范实施的(当然它们也有它们自定义的消息头),所以除非是自己实现服务器和客户端,否则,自定义的Field-Name一般没用。 2.Field-Vlaue:根据Field-Name的不同,会有不同的Field-Value (责任编辑:admin) |