首页 » 5G » 正文

HTTP, QUIC, TCP 在 5G 中的优化

概念及问题梳理

TCP

介绍

算法

问题

UDP

介绍

算法

问题

HTTP 2.0

介绍

  1. 二进制传输
  2. 头部压缩
  3. 多路复用
  4. 服务器推送(server push)
    • 服务器推送(server push)是 HTTP/2 协议里面,唯一一个需要开发者自己配置的功能.
      “`json
      server {
      listen 443 ssl http2;
      server_name localhost;

      ssl on;
      ssl_certificate /etc/nginx/certs/example.crt;
      ssl_certificate_key /etc/nginx/certs/example.key;

      ssl_session_timeout 5m;

      ssl_ciphers HIGH:!aNULL:!MD5;
      ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
      ssl_prefer_server_ciphers on;

      <p>location / {
      root /usr/share/nginx/html;
      index index.html index.htm;
      http2_push /style.css;
      http2_push /example.png;
      }
      }</p></li>
      </ul></li>
      </ol>

      <pre><code class=""> * 服务端接收到客户端主请求,能够预测主请求,在响应主请求的同事,主动并发推动依赖资源到客户端。客户端解析主请求响应后,可以无延时从本地缓存获取依赖资源,减少访问演示,提高访问体验,也加大了链路并发能力。
      * 服务器端配置http2_push,可以实现。但导致应用和配置混在一起,每次配置需要重新启动。可采用**后端应用产生 HTTP 回应的头信息Link命令**服务器发现有这个头信息,就会进行服务器推送。
      “`html
      Link: </styles.css>; rel=preload; as=style, </example.png>; rel=preload; as=image

      * 此时nginx需要配置
      ```json
          server {
              listen 443 ssl http2;
              # ...
              root /var/www/html;
      
              location = / {
                  proxy_pass http://upstream;
                  http2_push_preload on;
              }
          }
      </code></pre>
      
      <pre><code class="">    如果服务器或者浏览器不支持 HTTP/2,那么浏览器就会按照 preload 来处理这个头信息,预加载指定的资源文件。事实上,这个头信息就是 preload 标准提出的,它的语法和as属性的值都写在了标准里面。
          * 如果本地缓存已经有,服务器还要推送,则会浪费带宽。 一种解决方法是通过判断是否是第一次访问。
          ```json
              server {
                  listen 443 ssl http2 default_server;
      
                  ssl_certificate ssl/certificate.pem;
                  ssl_certificate_key ssl/key.pem;
      
                  root /var/www/html;
                  http2_push_preload on;
      
                  location = /demo.html {
                      add_header Set-Cookie "session=1";
                      add_header Link $resources;
                  }
              }
              map $http_cookie $resources {
                  "~*session=1" "";
                  default "</style.css>; as=style; rel=preload";
              }
      

      算法

      问题

      QUIC

      介绍

      算法

      问题

      方案梳理

      结论