细说HTTP之上篇(1)(2)
HTTP报文
HTTP报文是在HTTP应用程序之间发送的数据块。这些数据块以一些文本形式的元信息开头,这些信息描述了报文的内容和含义,后面跟着可选的数据部分。
报文的组成
HTTP报文是简单的格式化数据块。每一条报文都包含一条来自客户端的请求,或者来自服务器的响应。它们有三个部分组成:对报文进行描述的起始行(start line)、包含属性的首部块(header),以及可选的、包含数据的主体部分(body)。
- HTTP/1.0 200 OK //起始行
- Content-type:text/plain //首部
- Content-length:19 //首部
- Hi I'm a message! //主体
报文的语法
所有的HTTP报文可以分为两类:请求报文(request message)和响应报文(response message)。请求报文会向服务器发送一个请求,响应报文会将结果返回个客户端。
请求报文的格式:
- <method> <request-UTL> <version>
- <headers>
- <entity-body>
响应报文格式:
- <version> <status><reason-phrase>
- <header>
- <entity-body>
下面是对格式中各部分的简要描述
1、方法(method) GET
客户端希望服务器对资源执行的动作。是一个单独的词,比如GET、HEAD或POST。
2、请求的URL(request-URL)
命名了所有请求资源,或者URL路径组件的完整URL。如果直接与服务器进行对话,只要URL的路径组件是资源的绝对路径,通常就不会有什么问题--服务器可以假定 义自己是URL的主机/端口。
3、版本(version) HTTP/1.1
报文所使用的HTTP版本,其格式如下:
HTTP/<major>.<minor>
其中主要版本号(major)和次要版本号(minor)都是整数。
4、状态码(status)
这三个数字描述了请求过程中所发生的情况。每个状态码的第一位数字都用于描述状态的一般类别("成功"、"出错"等)。
5、原因短语(reason-phrase)
数字状态码的可读版本,包含行终止序列之前的所有文本。原因短语只是给人类看的,它不能说明什么。客户端依然采用状态码来判断请求/响应是否成功!
例如:HTTP/1.0 200 NOT OK 客户端依然会当请求已成功处理。因为状态码是200。而原因短语只是说明而已,这对于自定义扩展状态码还是比较有用的。
6、首部(header)
可以有0个或多个首部,每个首部都包含一个名字,后面跟着一个冒号(:),然后是一个可选的空格,接着是一个值,最后是一个CRLF。首部是由一个 空行 (CRLF)结束 的,表示了首部列表的结束和实体主体的开始。
7、实体的主体部分(entity-body)
实体的主体部分包含一个由任意数据组成的数据块。并不是所有的报文都包含实体的主体部分。如GET请求就不包含实体。
评论暂时关闭