HTTP协议

javaScript

http是网站的基础也是主要优化方面之一

1)、HTTP协议的主要特点
  • 简单快速
  • 灵活(通过一个http协议类型,就可以完成不同数据类型传输)
  • 无连接(连接一次就断掉,不会保持连接)
  • 无状态
    优点:减少服务器的CPU及内存资源消耗
    缺点:无法确认2次连接身份,引入了cookie技术
2)、HTTP报文的组成部分
  • 请求报文(请求行、请求头、空行、请求体)
  • 响应报文(状态行、响应头、空行、响应体)
3)、HTTP方法
  • GET 获取资源
  • POST 传输资源
  • PUT 更新资源
  • DELETE 删除资源
  • HEAD 获得报文首部
4)、POST和GET的区别

GET/POST里里外外

5)、HTTP状态码

http常见状态码

6)、什么是持久化连接

HTTP协议采用"请求-应答"模式,当使用普通模式,即非Keep-Alive模式时,每个请求/应答客户和服务器都要新建一个连接,完成之后立即断开连接(HTTP协议为无连接的协议)。

当使用Keep-Alive模式(又称持久化连接、连接重用)时,能减少TCP连接的重复建立以和断开所造成的额外开销,减轻了服务器端的负载,减少开销的那部分时间,使HTTP请求和响应能够更早的结束。

http1.0是不支持的,http1.1版本才开始支持。

7)、什么是管线化

在使用持久链接的情况下,某个链接上消息的传递类似于
请求1 -> 响应1 -> 请求2 -> 响应2 -> 请求3 -> 响应3

管线化是连接上的消息变成类似这样
请求1 -> 请求2 -> 请求3 -> 响应1 -> 响应2 -> 响应3

简单来说就是请求统一打包(不用等待响应可直接发送下一个请求),响应也统一打包

管线化特点
  • 管线化机制通过持久链接完成,仅HTTP/1.1支持此技术,并且只有GET和HEAD请求可以进行管线化。
  • 初次创建链接时不应该启动管线机制,因为有的服务器不一定支持HTTP/1.1版本协议。
  • 管线化不会影响响应到来的顺序。
  • HTTP/1.1要求服务器支持管线化,没有要求服务器端也对响应进行管线化,只要管线化请求不失败开即可。
  • 由于并不要求服务器对响应进行管线化处理,所以开启管线化很可能并不会带来大幅度的性能提升,而且很多服务器端和代理程序对管线化的支持并不好,因此现代浏览器默认并未开启管线化支持。
9)、https

???

10)、http2主要特点

① 二进制分帧
② 多路复用
③ 头部压缩

HTTP/2除了将ASCII明文转化为二进制帧以提高网络传输的有效性外,还提出了一种专门针对报文头部数据进行压缩的方案——Hpack。其主要思想是,通过重用当前连接中之前发送请求中的头部,仅发送新加或更改的头部信息,以降低报文中头部字段大小。

④ 服务器推送(Server Push)

Server Push就是允许Server对还没有发出的请求进行响应。如下图所示,在第一个请求中,客户端发出了一条对index.html的请求。通过对index.html的分析,服务器可以推测出其该html的加载还需要style.css和script.js,因此在第一条请求的响应中可以将这些内容一并发送过去,避免了接下来两条请求、响应带来的延迟(RTT, Round-trip Time)。

10)、http1.0,http1.1,http2.0特性
  • HTTP1.0
    • 无状态、无连接
  • HTTP1.1
    • 持久链接
    • 请求管线化
    • 增加缓存处理(新的字段如cache-contorl
    • 增加Host字段
    • 并发量,各类浏览器大概都支持3~5个请求同时发送
  • HTTP2.0
    • 二进制分帧
      定义了如何封装HTTP消息并在客户端与服务器之间传输。

      • 流:已建立的连接上的双向字节流
      • 消息:与逻辑消息对应的完整一系列数据帧
      • 帧:HTTP 2.0 通信的最小单位,每个帧包含帧首部,至少会标识出当前帧所属的流

      所有 HTTP 2.0 通信都在一个连接上完成,这个连接可以承载任意数量的双向数据流,每个数据流以消息的形式发送,而消息由一或多个帧组成,这些帧可以乱序发送,然后在根据每个帧首部的流标识重新组装。

    • 多路复用
      在HTTP 1.x中,如果客户端想发送多个并行的请求以及改进性能,那么必须使用多个TCP连接,HTTP 2.0 中的二进制分帧层突破了限制:客户端和服务器可以把HTTP消息分解为互不依赖的帧,然后乱序发送,最后再在另一端把它们重新组合起来。
      多路复用

    • 头部压缩
      在 HTTP 请求 header 中带有大量信息,每个请求都会重复发送,为了减小需要传输的大小,HTTP2.0 采用 encoder 方式,即通讯双方各自 cache 一份 header fields 表,避免重复 header 的传输。

    • 服务器推送
      务器还可以额外向客户端推送资源,而无需客户端明确地请求。

二者对比

  • http和https有什么区别?
    • HTTPS 协议需要到 CA 申请证书,一般免费证书很少,需要交费
    • HTTP协议运行在 TCP 之上,所有传输的内容都是明文,HTTPS 运行在 SSL/TLS之上,SSL/TLS运行在 TCP之上,所有传输内容都经过加密
    • HTTP 和 HTTPS 使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443
    • HTTP可以有效的防止运营商劫持,解决了防劫持的问题
  • https是怎么回事,真的安全吗?
    不一定安全,会遭受中间人攻击,可以开启HSTS防止中间人攻击
  • https使用上有什么注意点?
    • 需要安装 CA 证书
    • 购买证书之后,在证书提供的网站上配置自己的域名,将证书下载下来之后,配置自己的web服务器,同时进行代码改造
    • HTTPS 降低用户访问速度, SSL 握手,HTTPS 对速度会有一定程度的降低
    • HTTPS 中大量的密钥算法计算,会消耗大量的 CPU 资源
  • https整个过程?
  • dns解析原理,dns劫持是什么?

推荐文章