HTTP学习笔记——报文格式
2016-06-21 21:29
239 查看
HTTP报文的分类:(请求报文和响应报文):
HTTP报文分为两类:+ 请求报文: 从Web客户端发往Web服务器
+ 响应报文: 从Web服务器发往Web客户端
请求报文格式:
<method> <request URL> <version> <headers> <entity-body>
响应报文格式:
<version> <status> <reason phrase> <headers> <entity-body>
请求报文和响应报文的格式区别只在于起始行,·
Http报文的组成部分
从前面请求报文和响应报文的格式中,我们可以HTTP报文主要可能涉及到一下元件:+ 方法(method): 客户端希望服务器对资源执行的动作,如GET、HEAD、POST。
+ 请求URL(Requset-URL): 要请求的资源的URL, 如资源在服务器上的绝对路径。
+ 版本(version): HTTP 版本(分为主版本号、次版本号)。 格式为:
HTTP/<major>,<minor>.
+ 状态码(status-code): 描述资源请求过程中所发生的情况。
+ 原因短语(reason-phrase):数字状态吗的可读版本。
+ 首部: 一些“名字:值”的组合。首部以一个空行结束。
+ 实体的主体(entity-body): 包含一个任意数据组成的数据块。(可选)
根据HTTP报文的结构,我们将HTTP报文分为一下三部分:
1. 起始行: 报文第一行, 请求报文的起始行用来说明要做什么, 响应报文的起始行用于说明出现了什么情况。结构话文本。(方法、请求URL、版本、状态码、原因短语都属于起始行的范畴)。
2. 首部字段: (0个或多个), 每个首部字段包含一个名字和值,用冒号:分隔,首部以空行结束。结构化文本。
3. 主体: 包含所有类型的(发往对端的)数据。非结构化,也不一定是文本(可以是视频音频等)。
起始行和首部是一些有行分隔的ASCII文本,每一行都以一个由两个字符组成的行终止符(回车符+换行符)作为结束。
起始行
我们前面提到HTTP报文的请求报文和响应报文格式区别在起始行, 一般我们称请求报文的起始行为请求行,响应报文的起始行为响应行。方法(method)
请求报文的起始行以方法作为开始,方法用于告知服务器要执行哪一些动作。有些方法的HTTP请求报文包含主体、有些方法的请求报文则不包含主体。下面是常用的HTTP方法:
方法 | 描述 | 是否包含主体 |
---|---|---|
GET | 从服务器获取一份文档 | 否 |
HEAD | 只从服务器获取文档的首部 | 否 |
POST | 向服务器发送需要处理的数据 | 是 |
PUT | 将请求的主题部分存储在服务器上 | 是 |
TRACE | 对可能经过代理服务器传送到服务器的报文进行追踪 | 否 |
OPTIONS | 决定服务器上执行哪些方法 | 否 |
DELETE | 从服务器上删除一份文档 | 否 |
GET 是最常用的方法,它是一种安全方法(安全方法:安全方法不会在服务器上发生动作。GET和HEAD都是安全方法)。
GET方法用于请求服务器上的某项资源
+ HEAD:
HEAD方法与GET方法类似,但服务器在响应HEAD方法时,只返回首部,不返回实体部分。
HEAD方法可以用于实现以下功能:
(1)在不获取资源的情况下,了解资源的状况,如判断资源的类型
(2)通过响应中的状态码,查看资源是否存在
(3)通过查看首部,测试资源是否被修改。
对于服务器而言,HEAD响应的首部与GET响应的首部应该一致。
+ PUT:
PUT方法用于向服务器写入/替换资源。
+ POST:
用于向服务器输入数据。现在,POST通常用于支持HTML表单。表单中会填写要传送给服务器的数据,然后服务器想数据发送到它应该去的地方。
+ TRACE:
TRACE用于客户端对发起的请求进行诊断。
+ OPTIONS:
OPTION用于请求服务器支持的功能。
+ DELETE:
删除所请求的URL对应的资源。
+ *拓展方法:
状态码
状态吗用来告诉客户端发生了什么事。下面是状态码的分类:
状态吗范围 | 已定义范围 | 分类 |
---|---|---|
100~199 | 100~101 | 信息提示 |
200~299 | 200~206 | 成功 |
300~399 | 300~305 | 重定向 |
400~499 | 400~415 | 客户端错误 |
500~599 | 500~505 | 服务器错误 |
原因短语
原因短语为状态码提供可读解释, 原因短语与状态码是成对的。首部
HTTP首部 向请求报文和响应报文中添加了一些附加信息。首部一般是依稀”名字:值“对,每个首部一般占用一行,有些首部可能被分成多行,在这种情况下延续行必须以空格或制表符作为行首(以区别新首部)。
首部分类
Type | Description |
---|---|
通用首部 | 既可以出现在请求报文,也可以出现在响应报文。 |
请求首部 | 提供共夺请求报文相关的信息 |
响应首部 | 提供更多有关响应的信息。 |
实体首部 | 提供主体的长度和内容,或者资源自身。 |
拓展首部 | 规范中未定义的新首部。 |
首部 | 描述 |
---|---|
Connection | 允许客户端和服务器指定与请求/响应连接有关的选项 |
Date | 提供日期和时间标志, 说明文本的创建时间 |
MIME-Version | 给出了发送端使用的MIME版本 |
Trailer | 与分块传输编码相关 |
Transfer-Encoding | 告知接收端,为保证报文的可靠传输,对报文采取了什么编码方式。 |
Update | 给出了发送端可能要“升级”使用新版本或协议 |
Via | 显示了报文经过的中间节点 (代理、网关) |
Cache-Control | 用于随报文传送缓存指示 |
Pragma | 另一种随报文传送指示的方式,但并不专于缓存 |
实体
HTTP报文第三部分是可选的实体主体部分。即HTTP报文的负载。 实体部分可以是文本、图片、视频等各种形式的数据。整理自网络与《HTTP权威指南》
相关文章推荐
- TCP三次握手(建立连接)/四次挥手(关闭连接)
- 深入理解nginx chap3 开发一个简单的HTTP模块
- OkHttp使用(二)加载图片及下载文件
- OkHttp使用(一)基本使用
- 网络地址转换相关函数使用(inet_addr,inet_ntoa,inet_addr)
- java https post(不带证书的)
- 【转】asp.net(c#)使用HttpWebRequest附加携带请求参数以post方式模拟上传大文件(以图片为例)到Web服务器端
- 【网络流24题----02】太空飞行计划
- python读取网络上的csv文
- http 协议
- 【网络流24题----03】Air Raid最小路径覆盖
- 自己动手封装图片三级缓存网络请求框架(类似imageloader)
- 自己动手写HTTP框架:异步任务篇
- Java_HttpURLConnection使用
- JavaScript---网络编程(10)--DHTML技术演示(3)-多选框
- JavaScript---网络编程(10)--DHTML技术演示(3)-多选框
- [源码]OKHttp及Http协议笔记
- Java Web学习总结(21)——http协议响应状态码大全以及常用状态码
- Java Web学习总结(21)——http协议响应状态码大全以及常用状态码
- Java Web学习总结(21)——http协议响应状态码大全以及常用状态码