文章目录
- HTTP
- HTTP到底是什么
- HTTP的工作方式
- URL ->HTTP报文
- List item
- HTTP的工作方式
- 请求报文格式:Request
- 响应报文格式:Response
- HTTP的请求方法
- 状态码
- Header
- Host
- Content-Type
- Content-Length
- Transfer: chunked (分块传输编码 ChunkedTransfer Encoding)
- Location
- User-Agent
- Range / Accept-Range
- 其他 Headers
- Cache
- REST
HTTP
HTTP到底是什么
- 两种直观印象
- 浏览器地址输入地址,打开网页
- Android中发送网络请求,返回对应内容
- Hyper Text Transfer Protocol超文本传输协议
- 超文本:在电脑中显示的、含有可以指向其他文本的链接的文本 ——HTML
HTTP的工作方式
URL ->HTTP报文
HTTP的工作方式
请求报文格式:Request
响应报文格式:Response
HTTP的请求方法
- GET
- 获取资源,没有body
GET /users/1 HTTP/1.1
Host: api.github.com
- POST
- 增加或修改资源,有body
POST /users HTTP/1.1
Host: api.github.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 13
name=rengwuxian&gender=male
- PUT
- 修改资源,有body
POST /users HTTP/1.1
Host: api.github.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 13
name=rengwuxian&gender=male
- DELETE
- 删除资源,没有body
POST /users HTTP/1.1
Host: api.github.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 13
name=rengwuxian&gender=male
- HEAD
- 和 GET 使用方法完全相同
- 和 GET 唯一区别在于,返回的响应中没有 Body
状态码
- 作用:对结果做出类型化描述
- 1xx:临时性消息。如:100 (继续发送)、101(正在切换协议)
- 2xx:成功。最典型的是 200(OK)、201(创建成功)。
- 3xx:重定向。如 301(永久移动)、302(暂时移动)、304(内容未改变)。
- 4xx:客户端错误。如 400(客户端请求错误)、401(认证失败)、403(被禁
止)、404(找不到内容)。 - 5xx:服务器错误。如 500(服务器内部错误)
Header
- 作用:HTTP消息的元数据(metadata)
Host
目标主机地址
Content-Type
指定 Body 的类型。主要有四类:
- text/html
HTML文本,用于浏览器页面响应
请求 Web ⻚面是返回响应的类型,Body 中返回 html 文本。格式如下:
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 853
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
......
- x-www-form-urlencoded
普通表单。encodeed URL格式
Web ⻚面纯文本表单的提交方式。
格式如下:
POST /users HTTP/1.1
Host: api.github.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 27
name=rengwuxian&gender=male
- multipart/form-data
多部分形式,一般用于传输包含二进制内容的多项内容
Web ⻚面含有二进制文件时的提交方式。
格式如下:
POST /users HTTP/1.1
Host: hencoder.com
Content-Type: multipart/form-data; boundary=----
WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Length: 2382
------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="name"
rengwuxian
------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="avatar";
filename="avatar.jpg"
Content-Type: image/jpeg
JFIFHHvOwX9jximQrWa......
------WebKitFormBoundary7MA4YWxkTrZu0gW--
- application/json , image/jpeg , application/zip …
JSON形式,用于Web Api的响应或POST/PUT的请求
单项内容(文本或非文本都可以),用于 Web Api 的响应或者 POST / PUT 的请求
请求中提交 JSON
POST /users HTTP/1.1
Host: hencoder.com
Content-Type: application/json; charset=utf-8
Content-Length: 38
{"name":"rengwuxian","gender":"male"}
响应中返回JSON
HTTP/1.1 200 OK
content-type: application/json; charset=utf-8
content-length: 234
[{"login":"mojombo","id":1,"node_id":"MDQ6VXNl
cjE=","avatar_url":"https://avatars0.githubuse
rcontent.com/u/1?v=4","gravat......
请求中提交二进制内容
POST /user/1/avatar HTTP/1.1
Host: hencoder.com
Content-Type: image/jpeg
Content-Length: 1575
JFIFHH9......
响应中返回二进制的内容
HTTP/1.1 200 OK
content-type: image/jpeg
content-length: 1575
JFIFHH9......
- image/jpeg/application/zip
单文件,用于Web Api响应或POST/PUT请求
Content-Length
指定 Body 的⻓度(字节)。
Transfer: chunked (分块传输编码 ChunkedTransfer Encoding)
用于当响应发起时,内容⻓度还没能确定的情况下。和 Content-Length 不同时使用。用途是尽早给出响应,减少用户等待。
格式
HTTP/1.1 200 OK
Content-Type: text/html
Transfer-Encoding: chunked
4
Chun
9
ked Trans
12
fer Encoding
0
Location
指定重定向的目标 URL
User-Agent
用户代理(客户端),即是谁实际发送请求、接受响应的,例如手机浏览器、某款手机 App。
Range / Accept-Range
指定body的内容范围
按范围取数据
Accept-Range: bytes
响应报文中出现,表示服务器支持按字节来取范围数据
Range: bytes=<start>-<end>
请求报文中出现,表示要取哪段数据
Content-Range:<start>-<end>/total
响应报文中出现,表示发送的是哪段
数据
作用:断点续传、多线程下载。
其他 Headers
- Accept: 客户端能接受的数据类型。如 text/html
- Accept-Charset: 客户端接受的字符集。如 utf-8
- Accept-Encoding: 客户端接受的压缩编码类型。如 gzip
- Content-Encoding:压缩类型。如 gzip
Cache
作用:在客户端或中间网络节点缓存数据,降低从服务器取数据的频率,以提高网络性能。
REST
REST 的定义众说纷纭,没有统一答案。
扔物线的观点:REST HTTP 即正确使用 HTTP。包括:
- 使用资源的格式来定义 URL
- 规范地使用 method 来定义网络请求操作
- 规范地使用 status code 来表示响应状态
- 其他符合 HTTP 规范的设计准则