HTTP 的了解
HTTP
Hypertext Transfer Protocol(超文本传输协议),和 HTML(Hypertext Markup Language 超文本标记语言)一起诞生,用于在网络上请求和传输 HTML 内容。
HTTP 工作方式
用户输入地址后回车,游览器拼装 HTTP 报文并发送给请求服务器,服务器处理请求后发送响应报文给浏览器,浏览器解析响应报文并使用渲染引擎显示到界面上。
URL 格式
协议类型、服务器地址(和端口号)、路径(Path)
http://www.baidu.com/xxx
HTTP 报文格式
请求报文
请求行:method 和 path 以及 Http version
GET /xxx HTTP/1.1
Headers:key/vaule格式
Host: www.baidu.com
Content-Type: text/plain
Content-Length: 345
Body:报文内容
xxxxxxxxxxxx
响应报文
状态行:Http version 和 status code 以及 status message
HTTP/1.1 200 OK
Headers:key/value格式
Content-Type: application/json; charset=utf-8
Cache-control: public, max-age=60, s-maxage=60
vary: Accept,Accept-Encoding
content-encoding: gzip
Body: 报文内容
xxxxxxxxx
HTTP 请求方法
GET
- 用于获取资源
- 对服务器数据不进行修改
- 不发送 Body
POST
- 用于增加或修改资源
- 发送给服务器的内容在 Body 中
PUT
- 用于修改资源
- 发送给服务器的内容在 Body 中
DELETE
- 用于删除资源
- 不发送 Body
HEAD
- 和 GET 使用方式完全相同
- 和 GET 区别在于,返回的响应中没有 Body
状态码(Status Code)
用于对响应结果做出类型化的描述
- 1xx:临时性消息。100(继续发送)、101(正在切换协议)
- 2xx:成功。200(OK)、201(创建成功)
- 3xx:重定向。301(永久移动)、302(暂时移动)、304(内容未改变)
- 4xx:客户端错误。400(客户端请求错误)、401(认证失败)、403(被禁止)、404(找不到内容)
- 5xx:服务器错误。500(服务器内部错误)、501(不支持请求的功能)、502(无效网关)、503(服务不可用)
Header
HTTP 消息的原数据(metadata)
Host
目标主机,不是在网络上用于寻址的,而是在目标服务器上用于定位子服务器的。
Content-Type
指定 Body 的类型,主要有四种类型
- text/html,请求返回的是 html 文本
- x-www-form-urlencoded,纯文本表单的提交方式
- multipart/form-data,表单含有二进制文件的提交方式
- application/json,image/jpeg,单项内容
Content-Length
指定 Body 的长度(字节)
Location
指定重定向的目标URL
User-Agent
用户代理,即实际是谁发送请求,接受响应的
Range/Accept-Range
按范围接收数据,用于断点续传,多线程下载。
Accept-Range: bytes 响应报文中出现,表示服务器支持按字节来取范围数据。
Range: bytes=start-end 请求报文中出现,表示要取哪段数据。
Content-Range: start-end/total 响应报文中出现,表示发送的是哪段数据。
其他Header
- Accept: 客户端能接受的数据类型,如 text/html
- Accept-Charset: 客户端接收的字符集,如 utf-8
- Accept-Encoding: 客户端接收的压缩编码类型,如 gzip
- Content-Encoding: 压缩类型,如 gzip
REST
REST HTTP 即正确的使用 HTTP
- 使⽤资源的格式来定义 URL
- 规范地使⽤ method 来定义⽹络请求操作
- 规范地使⽤ status code 来表示响应状态