HTTP
大约 4 分钟
Hyper Text Transfer Protocol,超文本传输协议
TCP 默认端口 : 80
reference
- HTTP API Design Guide
- httpbin 👉🏻 🐙
HTTP Request & Response Service, written in Python + Flask.
concept
URL
Uniform Resource Locator (统一资源定位器)
语法规则 :
scheme://host.domain:port/path/filename
scheme
: 定义网络服务类型http
: 超文本传输协议,普通网页。https
: 安全超文本传输协议,安全加密网页。ftp
: 文件传输协议,文件上传或下载。file
: 访问本机文件。
host
: 定义主机域 (http默认主机域 : www)domain
: 域名 (google.com)port
: 主机端口号 (http默认端口号 : 80)path
: 资源在中服务器路径filename
: 资源名称
URL Encoding
URL只能使用
ASCII
字符集来通过英特网进行发送。URL中包含的
ASCII
之外的字符,需要转化为ASCII
格式。- 非
ASCII
字符 : 转化为%
+两位十六进制数
- 空格 : 使用
+
替换
- 非
HTTP
字段信息字段 含义 说明 Header
请求头 HTTP客户程序(浏览器),向服务器发送请求的时候必须指明请求类型,一般是GET或者POST Content-Type
内容类型 一般是指网页中存在的Content-Type,用于定义网络文件或网络请求的类型 Content-Length
内容长度 表示请求消息正文的长度 Authorization
授权信息 Cookie
在服务端生成,发送给客户端,客户端会将Cookie的key/value保存到某个目录下的文本文件内,下次请求同一网站时就发送该Cookie给服务器。在浏览器中非常重要,主要应用于用户登录和购物车等,移动应用开发不建议使用 User-Agent
浏览器类型 服务器可以根据浏览器的类型选择推送不同的内容给客户端 HTTP
请求方式方法名 说明 GET
获取指定资源 POST
向指定资源提交数据进行处理请求,在RESTful风格中用于新增资源 HEAD
获取指定资源头部信息 PUT
替换指定资源(不支持浏览器操作) DELETE
删除指定资源 OPTIONS
允许客户端查看服务器的性能 TRACE
回显服务器收到的请求,主要用于测试或诊断 CONNECT
预留给能够将连接改为管道方式的代理服务器(HTTP代理使用) Content-Type
类型Content-Type
浏览器支持 说明 application/x-www-form-urlencoded
√ 提交的数据按照key1=val1&key2=val2的方式进行编码 multipart/form-data
√ 采用这种方式上传文件(支持二进制文件) application/json
× 表明服务端消息主体是序列化后的JSON字符串 text/xml
× 文本 网络请求状态码
状态码 说明 1xx 代表临时响应,需要请求者继续执行操作的状态代码。 2xx 代表的多是操作成功。 200
请求成功 3xx 代表重定向,表示要完成请求,需要进一步操作 4xx 代表请求错误,表示请求可能出错,妨碍了服务器的处理。 404
NotFound 5xx 代表服务器错误,表示服务器在尝试处理请求时发生内部错误。 这些错误可能是服务器本身的错误,而不是请求出错 500
服务器内部错误
GET vs POST
幂等性 : 同一方法执行多次和执行一次效果相同
类型 | 参数位置 | 参数长度 | 幂等性 | 缓存性 |
---|---|---|---|---|
GET | 以 ? 拼接 | 最长 2048 字符 | 幂等 | 可缓存 |
POST | 请求体内 | 没有限制 | 不幂等 | 不可缓存 |
HTTP
常见报文
abbr | full | description |
---|---|---|
SYN | synchronize | 同步报文,用于建立连接 |
ACK | acknowledge | 确认报文,用于确认已接收 |
FIN | finish | 传输完成报文,用于结束连接 |
RST | reset | 重置报文,用于重置连接 |
PSH | push | 推送报文,用于直接将数据推送给接收端,而不是先放在缓存区 |
URG | urgent | 紧急报文,用于传输紧急数据,接收端会优先处理该数据 |
“三次握手” - 创建连接
- 客户端发给服务端 SYN 报文 => (服务端: 客户端的发送功能正常)
- 服务端接受 SYN 报文之后,给客户端发送 SYN+ACK 报文 => (客户端: 服务端接受、发送功能正常)
- 客户端收到 SYN+ACK 报文之后,给服务度发送 ACK 报文 => (服务单: 客户端接受功能正常)
三次握手的核心点 : 开始数据通信前,确认双方发送和接受功能是否都正常。
“四次挥手” - 断开连接
- 一方完成数据发送发给另一方 FIN 报文 (一方: 数据传输完成)
- 另一方接受 FIN 报文之后,给对方发送 ACK 报文 (另一方: 确认对方数据传输完成,并已关闭)
- 另一方进行数据确认已完成,则也给对方发送 FIN 报文 (另一方: 如果有数据还未传输,传输完,保证数据传输完成。)
- 对方收到 FIN 报文之后,回复 ACK 报文 (一方: 确认对方数据传输完成)
四次挥手的核心点 : 断开连接前,确认双方数据均发送完毕。