HTTP报文的那些事儿
来源:互联网 发布:阿香婆系统优化软件 编辑:程序博客网 时间:2024/06/05 04:15
1. 报文流
- HTTP报文是在HTTP应用程序之间发送的数据块。这些数据块已一些文本形式的元信息(meta-information)开头,这些信息描述了报文的内容及含义。
- HTTP报文是由一行一行的简单字符串组成的。HTTP报文都是纯文本,不是二进制代码,所以人们可以很方便的对其进行读写。
- HTTP使用术语流入(inbound)和流出(outbound)来描述事务处理的方向。HTTP报文会像河水一样流动。不管是请求报文还是响应报文,所有请求报文还是响应报文,所有报文都会向下游(downstream)流动。所有报文的发送者都在接受者的上游(upstream).
2. 报文格式(组成部分)
HTTP报文是简单的格式化数据块。它们有三个部分组成:对报文进行描述的起始行(start line)、包含属性的首部(header)块,以及可选的、包含数据的主体(body)部分。
所有的HTTP报文都可以分成两类:请求报文(request message)和响应报文(response message)。请求报文会向Web服务器请求一个动作。响应报文会将请求的结果返回给客户端。
2.1 请求报文格式
<method> <request-URL> <version><headers><entity-body>
其中:
- 方法(method) : 客户端希望服务器对资源执行的动作。是一个单独的词,详细请参见下表 常用的HTTP方法 。
- 请求URL(request-URL) : 命名了所请求资源,或者URL路径组件的完整URL。
- 版本(version) : 报文所使用的HTTP版本,其格式看起来是这样的
HTTP/<major>.<minor>
,其中主要版本号(major)和次要版本号(minor)都是整数。 - 首部(header) : 可以有零个或多个首部,每个首部都包含一个名字,后面跟着一个冒号( : ),然后是一个可选的空格或者是一个值,最后是一个CRLF。首部是由一个空行(CRLF)结束的,表示了首部列表的结束和实体主体部分的开始。有些HTTP版本,比如HTTP/1.1,要求有效的请求或响应报文中必须包含特定的首部。HTTP的各种首部请参见笔者的 HTTP首部的那些事儿 。
- 实体的主体部分(entity-body) : 实体的主体部分包含一个由任意数据组成的数据块。并不是所有的报文都包含实体的主体部分,有时,报文只是以一个CRLF结束。
常用的HTTP方法:
2.2 响应报文格式
<version> <status> <reason-phrase><headers><entity-body>
其中:
- 版本(version) : 报文所使用的HTTP版本,其格式看起来是这样的
HTTP/<major>.<minor>
,其中主要版本号(major)和次要版本号(minor)都是整数。 - 状态码(status-code) : 这三位数字描述了请求过程中所发生的情况。每个状态码的第一位数字都用于扫描状态的一般类别(“成功”, “出错”等)。关于HTTP规范定义的状态码及其含义的完整列表请参见笔者的 HTTP状态码的那些事儿 。
原因短语(reason-phrase) : 数字状态码的可读版本,包含行终止序列之前的所有文本。原因短语只对人类有效,因此,比如说,尽管响应行
HTTP/1.0 200 NOT OK
和HTTP/1.0 200 OK
中原因短语的含义不同,但同样会被当做成功指令处理。注: 原因短语和状态码是成对出现的。原因短语是状态码的可读版本,应用开发者将其传送给用户,用以说明在请求期间发生了什么情况。
首部(header) : 可以有零个或多个首部,每个首部都包含一个名字,后面跟着一个冒号( : ),然后是一个可选的空格或者是一个值,最后是一个CRLF。首部是由一个空行(CRLF)结束的,表示了首部列表的结束和实体主体部分的开始。有些HTTP版本,比如HTTP/1.1,要求有效的请求或响应报文中必须包含特定的首部。HTTP的各种首部请参见笔者的 HTTP首部的那些事儿 。
- 实体的主体部分(entity-body) : 实体的主体部分包含一个由任意数据组成的数据块。并不是所有的报文都包含实体的主体部分,有时,报文只是以一个CRLF结束。
3. 参考资料
- HTTP权威指南
- 图解HTTP
TODO
- HTTP首部字段总结 博文撰写
- HTTP状态码的那些事儿 博文撰写
0 0
- HTTP报文的那些事儿
- HTTP代理的那些事儿
- HTTP连接管理的那些事儿
- HTTP报文内的HTTP报文信息
- 明朝的那些事儿
- Oracle 的那些事儿
- VC++的那些事儿
- 游戏的那些事儿
- 编译器的那些事儿
- 找工作的那些事儿
- 北爱尔兰的那些事儿
- 数组的那些事儿~
- 密码的那些事儿
- poi的那些事儿
- Format的那些事儿
- 线程的那些事儿
- platform的那些事儿
- JDBC的那些事儿~~~
- 用Spring MVC优雅的实现301跳转
- 2015年宏观经济总结和2016年猜想
- Android开发自定义控件实现一个足球积分榜RankBar
- JS时间(日期)比较或相减
- 将一个字段中以符号分隔的多个数字进行排序显示
- HTTP报文的那些事儿
- 深拷贝和浅拷贝
- 进程与线程的一个简单解释
- Codeforces Round #351 (VK Cup 2016 Round 3, Div. 2 Edition)
- 字符串哈希表
- SharedPreferences的使用浅析
- SSM框架——使用MyBatis Generator自动创建代码
- Web 端 js 导出csv文件(使用a标签)
- Spring4新特性:Groovy Bean定义DSL