Skip to content

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

技巧:了解管线化的原理并且会用,我这块没有了解的那么细,因为这块在业务中已经够用了,有什么好的资料推荐么

在 MIT 许可下发布