HTTP 协议类
目录
- HTTP 协议主要特点
- 报文组成
- 方法
- POST GET 区别
- 状态码
- 持久链接
- 管线化
HTTP 协议主要特点
简单快速 灵活
无连接 无状态
简单快速:uri 固定统一资源符 灵活:头数据类型,通过 http 协议完成不同类型传输 无链接:链接一次断掉 无状态:客户服务端是两种身份,无法区分上下次链接身份
报文组成
请求报文
请求行 请求头 空行 请求体 请求行:http 方法 页面地址 http 协议 以及 版本 实例:GET / HTTP/1.1 请求头:key value 类型告诉服务器要什么类型 实例:Host Cookie Accept Connection Cache-Control 空行:告诉服务端 请求头结束 请求体:数据部分
响应报文 状态行 响应头 空行 响应体 响应行:HTTP/1.1 200 ok 响应头:Server Date Set-Cookie
方法
- GET 获取
- POST 传输
- PUT 更新
- DELETE 删除
- HEAD 获取报文首部
POST GET 区别
GET在浏览器退回无害,POST会再次提交请求
- GET 地址会收藏,POST 不可以
GET会被自动主动缓存,POST不可以,除非手动设置
- GET 只能进行 url 编码,而 POST 支持多种编码方式
GET参数会被完整保留浏览器历史记录里面,而POST不会
GET在URL中传参长度有所限制,而POST没限制
- 对参数类型,GET 支持 ASCII,而 POST 没有
- GET 比 POST 更不安全,因为参数暴露在 URL 中,不能传递敏感信息
GET参数放在URL中,POST放到请求体 Request Body
状态码
1XX 指示信息,请求已接收,继续处理
2XX 成功 206 Partial Content 客服端发送一带 Range 头的 get 请求,服务器继续完成它,音频地址
3XX 重定向 要完成请求必须进行更进一步操作 301 永久重定向;Moved 所有页面已经转移到新的 URL 302 临时重定向;请求页面已经临时转移到新的 URL 304 缓存;Not Modified 客户端有缓冲的文档,并发出一个条件性请求,服务器告诉客户端,原来缓冲的文档的还能用
4XX 客户端错误 请求语法错误或者请求无法实现 400 客户端语法错误 401 未授权 403 请求被禁用,资源被禁止,只能通过服务器访问
5XX 服务器端错误 服务器未能合法请求
503 服务器临时过载或当机,一段时间会恢复
持久链接
- HTTP 采用的是”请求-应答“模式,当使用普通模式,既非 Keep-Alive 模式时,每个请求/应答服务器客户端都需要新建一个链接,完成之后立即断开
- 当使用 Keep-Alive 模式(持久连接,连接重用)Keep-Alive 的功能是客户端服务器连接持久有效(HTTP1.1 版本支持)
- 长链接,复用了 TCP
管线化
-持久连接
情况下,某个连接上的消息传递类似 请求 1->响应 1->请求 2->响应 2->请求 3->响应 3
某个连接的消息变成了类似 请求 1->请求 2->请求 3->响应 1->响应 2->响应 3
管线化机制通过
持久连接
完成,仅 HTTP1.1 版本支持只有GET HEAD可以进行管线化,POST有限制
初次建立连接时不应启动管线化,因为对方HTTP版本不支持
管线化不会影响响应到来的顺序
HTTP1.1 要求服务器支持管线化,但并不要求对响应进行管线化处理,还是要求对管线化请求不失败即可
开启管线化,可能并不会带来大幅性能提升,而且很多服务器和代理对管线化支持不太好,因此 Chrome Firefox 默认并未开启管线化支持
每个域名分配 6 个 tcp 通道,域名也不易过多,过多 DNS