什么是http协议
HTTP协议是Text Transfer Protocol(超文本传输协议)的缩写。HTTP 协议和 TCP/IP 协议族内的其他众多的协议相同, 用于客户端和服务器之间的通信。请求访问文本或图像等资源的一端称为客户端, 而提供资源响应的一端称为服务器端。
为什么需要协议
需要明确的边界,开始和结束 能携带信息
协议里面有什么
常见的方法名
GET,HEAD,POST,PUT,DELETE,CONNECT,OPTIONS,TRACE,PATCH
GET: 用于请求访问已经被URL(统一资源标识符)识别的资源,可以通过URL传参给服务器。
POST:用于传输信息给服务器,主要功能与GET方法类似,但一般推荐使用POST方式。
PUT: 传输文件,报文主体中包含文件内容,保存到对应URL位置。
HEAD: 获得报文首部,与GET方法类似,只是不返回报文主体,一般用于验证URL是否有效。
DELETE:删除文件,与PUT方法相反,删除对应URL位置的文件。
OPTIONS:查询相应URL支持的HTTP方法。
协议组成
请求行
方法名,URL,协议版本
状态行
包含协议版本,状态码(1xx:信息类,2xx:成功,3xx:重定向,4XX:客户端错误,5xx:服务端错误),状态码描述
- 200 OK
客户端请求成功
- 301
永久重定向,该状态码表示请求的资源已被分配了新的URL, 以后应使用资源现在所指的URL。 也就是说, 如果已经把资源对应的URL保存为书签了, 这时应该按 Location 首部字段提示的URL重新保存。
- 302 Found
临时性重定向。 该状态码表示请求的资源已被分配了新的URL, 希望用户(本次) 能使用新的URL访问。和301Moved Permanently 状态码相似, 但302状态码代表的资源不是被永久移动, 只是临时性质的。 换句话说, 已移动的资源对应的URL将来还有可能发生改变。 比如, 用户把URL保存成书签, 但不会像301状态码出现时那样去更新书签, 而是仍旧保留返回302状态码的页面对应的URL。
- 400 Bad Request
客户端请求有语法错误,不能被服务器所理解
- 401 Unauthorized
请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用
- 403 Forbidden
服务器收到请求,但是拒绝提供服务
- 404 Not Found
请求资源不存在,eg:输入了错误的URL
- 500 Internal Server Error
服务器发生不可预期的错误
- 503 Server Unavailable
服务器当前不能处理客户端的请求,一段时间后可能恢复正常。
请求头、响应头
协议约定业务相关
请求头、响应体
一个Demo的示例
请求流程
业务层——服务治理层、中间件层——路由层——协议编(解)码层——传输层
不足与展望
http1
主要特点
简单快速
- 当客户端向服务器端发送请求时,只是简单的填写请求路径和请求方法即可,然后就可以通过浏览器或其他方式将该请求发送就行了。
灵活 - HTTP 协议允许客户端和服务器端传输任意类型任意格式的数据对象
缺点
队头阻塞,传输效率低,明文传输不安全
http2
主要特点
- HTTP/2采用二进制格式而非文本格式
- HTTP/2是完全多路复用的,而非有序并阻塞的——只需一个HTTP连接就可以实现多个请求响应
- 使用报头压缩,HTTP/2降低了开销
- HTTP/2让服务器可以将响应主动“推送”到客户端缓存中
缺点
多路复用,头部压缩,二进制协议
QUIC
主要特点
基于UDP实现,解决了队头阻塞,加密减少握手次数,支持快速启动