HTTP 基础学习

概述

HTTP,超文本传输协议,HyperText Transfer Protocol

HTTP 1.0 1.1 2.0 对比

HTTP/1.0

浏览器与服务器只保持短暂的连接,每次请求都需要重新建立 TCP 连接,连接无法复用。

队头阻塞(head of line blocking),即前面阻塞的请求会影响后面的请求。

HTTP/1.1

  • 持久连接:TCP 连接默认不关闭,多个请求复用,header 里面的 connection : Keep-Alive

  • 管道机制:同一个 TCP 连接可以同时发送多个请求,但是也有限制

  • 引入更多的缓存策略:Cache-Control、Etag/If-None-Match 等

  • 范围请求:增加 header 增加 range 标记,返回码是 206(Partial Content)时可选择继续请求

  • Header 增加 Host:将请求发往同一服务器上面不同网站,虚拟主机的应用

  • 新增请求方式:PUT,DELETE,OPTIONS,TRACE,CONNECT

缺点: 队头阻塞,服务器只能按次序处理请求

HTTP 2.0

以 Google 2005 年发布的 SPDY 为基础,只基于 HTTPS 环境。

  • 多路复用

HTTP/1.1 协议中的客户端同一时间,同一域名请求有数量限制;HTTP/2 把通信单位缩小为帧,在同一个 TCP 连接上面双向交换消息。每个 request 都有 id 值对应

  • 二进制分帧

在 应用层(HTTP/2)和传输层(TCP or UDP)之间增加一个二进制分帧层

在二进制分帧层中, HTTP/2 会将所有传输的信息分割为更小的消息和帧(frame),并对它们采用二进制格式的编码 ,其中 HTTP1.x 的首部信息会被封装到 HEADER frame,而相应的 Request Body 则封装到 DATA frame 里面

单连接 多资源的方式,基于 TCP 慢启动的特性,共用同一个连接可以有效使用 TCP 连接,吞吐量更大

  • 首部压缩(Header Compression)

HTTP/1.1并不支持 HTTP 首部压缩,为此 SPDY 和 HTTP/2 应运而生, SPDY 使用的是通用的DEFLATE 算法,而 HTTP/2 则使用了专门为首部压缩而设计的 HPACK 算法。客户端和服务器同时维护一张头信息表,所有字段都会存入这个表,生成一个索引号,以后就不发送同样字段了,只发送索引号,这样就提高速度

  • 服务端推送

在 HTTP/2 中,服务器可以对客户端的一个请求发送多个响应

请求方式

GET,一般用于获取数据,幂等、可缓存

POST,一般用于提交数据,不幂等

GET 和 POST 到底有什么区别? - 大宽宽的回答 - 知乎
https://www.zhihu.com/question/28586791/answer/767316172

状态码

1xx:指示信息–表示请求已接收,继续处理

2xx:成功–表示请求已被成功接收、理解、接受

3xx:重定向–要完成请求必须进行更进一步的操作

  • 301,Moved Permanently,请求的资源已被永久的移动到新 URI,返回信息会包括新的 URI,浏览器会自动定向到新 URI。
  • 302,Found,临时移动。与301类似。但资源只是临时被移动。客户端应继续使用原有URI

4xx:客户端错误–请求有语法错误或请求无法实现

5xx:服务器端错误–服务器未能实现合法的请求

报文格式

请求报文

  • 请求行
    • 请求方法:GET POST 等
    • URL
    • 协议版本
  • 请求头部:多个 key-value 值组成
    • User-Agent:产生请求的浏览器类型
    • Accept:客户端可识别的内容类型列表
    • Host:请求的主机名,允许多个域名同处一个IP地址,即虚拟主机
  • 空行:将请求头部和请求数据分隔
  • 请求数据:GET 方法没有携带数据,POST 会带一个 body
    在这里插入图片描述
    响应报文
  • 状态行
    • 协议版本:HTTP-Version 服务器HTTP协议的版本
    • 状态码:Status-Code 响应状态代码
    • 状态值:Reason-Phrase表示状态代码的文本描述
  • 响应头
  • 空行
  • 响应体:响应数据
    在这里插入图片描述

与 WebSocket 的联系与区别

在 WebSocket 出来之前,HTTP 协议是一个 请求-响应 的模式,如果需要实时与服务器进行通信,使用的是 js 脚本进行轮询,但是这样效率太慢。

WebSocket 是 HTML5 规范提出的协议,支持页面使用 Web Socket 协议与远程主机进行全双工通信,能够很好的节省服务器资源与带宽。

使用 ws:// wss:// 分别表示 WebSocket 和 安全的 WebSocket 连接。

几乎所有的实时应用程序都是用 WebSocket

相同点:

  • 都是基于 TCP,可靠传输
  • 都是应用层协议

差异:

  • WebSocket 是双向通信协议,可以双向发送或接收信息。HTTP 是单向的

  • WebSocket 需要浏览器与服务器握手建立连接(建立连接通过 HTTP,发送数据不需要),并且服务器可以主动向浏览器发送数据,可以不带有 head 部分信息。而 HTTP 是浏览器发起向服务器的连接,服务器预先不知道。

  • WebSocket 建立连接之后不会断开,除非其中一方主动关闭。

参考

深入浅出 HTTPS (详解版)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值