HTTP
HTTP是一个应用层协议建立在TCP/IP(传输层)协议之上,HTTP不关心网络通讯的具体细节。网络协议栈:HTTP(应用层)-> TCP(传输层)->IP(网络层)->网络特有的链路接口(数据链路层)-> 物理网络硬件(物理层)
HTTP报文
HTTP报文指的是来自客户端的请求或来自服务端的响应。由一行行的纯文本构成,格式如下:
请求报文格式:
<method> <request-URL> <version>
<headers>
//空行
<entity-body>
响应报文格式:
<version> <status> <reason-phrase>
<headers>
//空行
<entity-body>
- method
比如GET、POST等 - request-URL
请求URL,命名了请求资源、或者URL路径组件的完整URI(URL+URN)。 - version
报文所使用的HTTP版本,格式看起来如下:
HTTP/<major>.<minor>
其中主要版本号(major)和次要版本号(minor)。 - statue
状态码由三位数字组成,具体如下:
状态码 | 已定义范围 | 说明 |
---|---|---|
100 ~ 199 | 100 ~101 | 信息提示 |
200 ~ 299 | 200 ~ 206 | 成功 |
300 ~ 399 | 300 ~ 305 | 重定向 |
400 ~ 499 | 400 ~ 415 | 客户端错误 |
500 ~ 599 | 500 ~ 505 | 服务器错误 |
具体可参考:HTTP状态码
- reason-phrase
原因短语,方便阅读。 - 起始行(start line)
报文的第一行就是起始行,在请求报文中用来说明要做些什么,在相应报文中说明出现了什么情况。 - 首部字段(header)
起始行后面有零个或多个首部字段。每个首部字段都包含一个名字和一个值,为了便于解析,两者之间使用冒号(:)来分隔。首部以一个空行结束。 - 主体(body)
主体数据格式可以是文本也可以是二进制数据,数据结构也没有要求可以是结构化数据也可以是非结构化数据。对于一个HTTP报文来说body
是可以省略的。
MIME
MIME类型是一种文本标记,表示一种主要的对象类型和一个特定的子类型,中间由一条斜杠来分割。
- HTML 格式的文本文档由 text/html 类型来标记。
- 普通的ASCII 文本文档由 text/plain 类型来标记。
- JPEG 格式的图片为 image/jpeg 类型来标记。
常见的MIME类型有数百个,具体可参考MIME Type