这是看 HTTP权威指南 的笔记
HTTP报文
想要了理现今的因特网,就要了解http协议。想要深入了解http协议, 怎能不看一下http报文?
相关工具
在介绍http报文之前,先介绍查看http报文的工具
- 如果是firefox用户,可以用Live HTTP headers查看http报文
- 如果是chrome用户, 可以使用Http headers等插件,达到同样的效果
报文流
HTTP报文是在HTTP应用程序之间发送的数据块. 这些数据块以一些文本形式的元信息开头
报文组成部分
报文由起始行,首部和主体三部分组成
以下是报文的一个示例
组件 | 示例 |
---|---|
起始行 | HTTP/1.0 200 ok |
首部 | Content-type: text/plain content-length: 19 |
主体 | Hi! I'm a message! |
起始行和首部就是由行分隔的ASCII文本.每行都以一个由两个字符组成的行终止序列作为结束. 其中包括一个回车符和一个换行符. 这个行终止序列可以写做CRLF
报文的语法
所有的HTTP报文都分为两类:请求报文(request message)
和 响应报文(response message)请求报文的格式如下
<method> <request-URL> <version>
<headers>
<entity-body>
响应报文的格式如下
<version> <status> <reason-phrase>
<headers>
<entity-body>
下面对各部分简要描述
-
方法(method)
客户端希望服务器对资源执行的动作.是一个单独的单词如GET,POST
-
请求URL(request-URL)
命名了请求的资源的URL路径组件
-
版本(version)
报文的HTTP版本, 一般是HTTP/主版本号.次版本号,如HTTP/1.1
-
状态码(status-code)
三位数字描述了请求过程所发生的情况
-
原因短语(reason-phrase)
数字状态码的可读版本
-
首部(header)
可以有零到多个首部. 每个首部由一个名字,后面跟着一个冒号, 然后是一个可选的空格,接着一个值,最后是一个CRLF.首部由一个空行(CRLF)结束
-
实体的主体部分(entity-body)
实体的主体部分包含一个由任意数据组成的数据块
起始行
起始行说明了HTTP报文的作用:请求报文的起始行说明了要做些什么, 响应报文的起始行说明了发生了什么
-
请求行
请求报文的起始行,或称为请求行, 包含一个方法和一个请求URL, 还有一个HTTP的版本
-
响应行
响应报文的起始行,或称为响应行, 包含了HTTP版本, 状态码和原因短语
-
方法
请求的起始行以方法作为开始,时方法用来告知服务器要做些什么. 以下是常用的HTTP方法
方法 描述 是否包含主体 GET 从服务器获取一份文档 否 HEAD 只从服务器获取文档的首部 否 POST 向服务器发送需要处理的数据 是 PUT 将请求的主体部分存储在服务器上 是 TRACE 对可能经过代理服务器传送到服务器上去的报文进行追踪 否 OPTIONS 决定可以在服务器上执行哪些方法 否 DELETE 从服务器上删除一份文档 否 -
状态码
状态码用来告诉客户端发生了什么事情, 以下列出了状态码的分类
整体范围 已定义范围 分类 100~199 100~101 信息提示 200~299 200~206 成功 300~399 300~305 重定向 400~499 400~415 客户端错误 500~599 500~505 服务器错误 下面常见的状态码
状态码 原因短语 含义 200 OK 成功.请求的所有数据都在响应主体上 401 Unauthorized(未授权) 需要输入用户名和密码 404 Not Found(未找到) 服务器无法找到所请求URL对应的资源 -
原因短语
原因短语是响应行的最后一个组件. 应用程序开发者把原因短语传给用户,用以说明请求期间发生了什么情况
-
版本号
版本号会以HTTP/x.y 的形式出现在请求和响应报文的起始行中, 为HTTP应用程序提供了一种将自己遵循的协议告知对方的方式
注意:版本号不会被当作小数来处理, 比如HTTP/2.22就比HTTP/2.3的版本高
首部
HTTP的首部实质上是一些名/值的列表,比如,下面的首部会向Content-length首部赋值为19
Content-length: 19
以下是一些常用的首部
首部实例 | 描述 |
---|---|
Date: Tue,30oct 1997 02:16:03 GMT | 服务器产生响应的日期 |
Content-length: 1024 | 实体的主体部分包含了1024字节的数据 |
Content-type: image/gif | 实体的主体部分是一个GIF的图片 |
Accept: image/gif, image/jpeg, text/html | 客户端可以接收GIF图片和JPEG图片以及HTML |
实体
HTTP报文的第三部分实体是可选的. 实体的主体是HTTP协议要传输的内容
HTTP报文可以承载很多类型的数字: 图片, 视频, HTML文档, 软件应用程序,信用卡事务,电子邮件等
转载请注明出处,请忽用于任何商业用途--nothi