HTTP基础知识

HTTP是一个在计算机世界里专门在两点之间传输文字、图片、音频、视频等超文本数据的约定和规范。
HTTP通常跑在TCP/IP协议栈之上,依靠IP协议实现寻址和路由、TCP协议实现可靠数据传输、DNS协议实现域名查找、SSL/TLS协议实现安全通信。当然,WebSocket、HTTPDNS依赖于HTTP。

  1. HTTP 有什么缺点
    • 通信使用明文(不加密),内容可能会被窃听
    • 不验证通信方的身份,因此有可能遭遇伪装
    • 无法证明报文的完整性,所以有可能已遭篡改
  2. HTTP2 有什么好处
    • 多路复用 (Multiplexing):多路复用允许同时通过单一的 HTTP/2 连接发起多重的请求-响应消息。也就是说一个TCP连接可以一次发送和接受多个请求拉。
    • 二进制分帧
    • 首部压缩
    • 服务推送
  3. 为什么说HTTPS是安全的
    • 服务器用非对称加密算法RSA生成公钥和私钥,把公钥放在证书里发送给客户端,私钥自己保存(证书也可以是在本地电脑,总之客户端持有公钥,服务器持有私钥)
    • 客户端首先向一个权威的服务器检查证书的合法性,如果证书合法,客户端产生一段随机数,这个随机数就作为通信的密钥,我们称之为对称密钥,用公钥加密这段随机数,然后发送到服务器
    • 服务器用密钥解密获取对称密钥,然后,双方就已对称密钥进行加密解密通信了
  4. HTTPS的优缺点
    • 使用HTTPS协议可认证用户和服务器,确保数据发送到正确的客户机和服务器
    • 由SSL+HTTP协议构建的可进行加密传输
    • 增加消耗:HTTPS协议会使页面的加载时间延长近50%,增加10%到20%的耗电。此外,HTTPS协议还会影响缓存,增加数据开销和功耗。
    • HTTPS协议的安全是有范围的:在黑客攻击、拒绝服务攻击、服务器劫持等方面几乎起不到什么作用
    • SSL证书的信用链体系并不安全:特别是在某些国家可以控制 CA 根证书的情况下,中间人攻击一样可行。
    • SSL的专业证书需要购买:功能越强大的证书费用越高,且SSL证书通常需要绑定固定IP
    • HTTPS 连接服务器端资源占用高较高多,相同负载下会增加带宽和服务器投入成本
  5. TCP, UDP 的区别
    • TCP和UDP都是传输层协议,但是两者具有不同的特性和应用场景
    • TCP(Transmission Control Protocol传输控制协议)是一种面向连接的(在客户端和服务器之间传输数据之前要先建立连接),可靠的,基于字节流的传输通信协议,连接需要建立三次握手,四次挥手,效率低,全双工
    • UDP(User Datagram Protocol用户数据报协议)是一种面向无连接(发送数据之前不需要先建立连接),不可靠的,面向报文的传输通信协议,效率高,支持一对一,一对多和多对多的交互通信
  6. 三次握手的过程,为什么握手三次, 为什么挥手四次
    • TCP连接建立(三次握手):
      1. 客户端发送请求【寻址请求】
      2. 服务器端收到报文请求,回应客户端【确认请求】
      3. 客户端收到服务端的报文进行回应。【连接请求】
    • 三次握手完成,TCP客户端和服务端成功地建立连接,可以传输数据。
    • TCP终止一个连接(四次握手):
      1. 数据验证请求码
      2. 传输结束标记
      3. 确认结束标记
      4. 连接断开标记

总结:
建立连接时,如果只有两次握手,服务器的返回丢失时,客户端无法得知服务器已经准备好,而服务器以为客户端将随时发送请求,造成资源浪费,因此只有客户端返回第三次握手,连接才算真正建立;
终止连接时,服务端在收到终止命令和真正终止之间会有时间延迟,因此先告诉客户端已收到消息,等彻底终止以后再告诉客户端一次,客户端再次返回告知服务端已收到终止的消息,连接才算终止。

http8种请求方法

  1. Get 向特定资源发出请求(请求指定页面信息,并返回实体主体)
  2. Post 向指定资源提交数据进行处理请求(提交表单、上传文件),又可能导致新的资源的建立或原有资源的修改
  3. opions 返回服务器针对特定资源所支持的HTML请求方法 或web服务器发送测试服务器功能(允许客户端查看服务器性能)
  4. Head 与服务器索与get请求一致的相应,响应体不会返回,获取包含在小消息头中的原信息(与get请求类似,返回的响应中没有具体内容,用于获取报头)
  5. Delete 请求服务器删除request-URL所标示的资源(请求服务器删除页面)
  6. Trace 回显服务器收到的请求,用于测试和诊断
  7. Connect HTTP/1.1协议中能够将连接改为管道方式的代理服务器
  8. Put 向指定资源位置上上传其最新内容(从客户端向服务器传送的数据取代指定文档的内容)
  9. PATCH 是对 PUT 方法的补充,用来对已知资源进行局部更新。

HTTP的请求头标签

  • Expires :提供一个日期和时间,响应在该日期和时间后被认为失效

  • Cache-control: private/no-cache

  • If-Modified-Since:Fri, 12 May 2006 18:53:33 GMT

    1. 后面跟的时间是本地浏览器存储的文件修改时间
    2. 客户端第二次请求此URL时,根据 HTTP 协议的规定,浏览器会向服务器传送 If-Modified-Since 报头,询问该时间之后文件是否有被修改过
    3. 如果服务器端的资源没有变化,则时间一致,自动返回HTTP状态码304(Not Changed.)状态码,
      内容为空,客户端接到之后,就直接把本地缓存文件显示到浏览器中,这样就节省了传输数据量。
      如果服务器端资源发生改变或者重启服务器时,时间不一致,就返回HTTP状态码200和新的文件内容,客户端接到之后,会丢弃旧文件,把新文件缓存起来,并显示到浏览器中。
  • Last-Modified: Fri, 12 May 2006 18:53:33 GMT
    在浏览器第一次请求某一个URL时,服务器端的返回状态会是200,内容是你请求的资源,同时有一个Last-Modified的属性标记此文件在服务期端最后被修改的时间

CDN/负载均衡(load balancing)/就近原则(principle of proximity)

参考: https://www.jianshu.com/p/57433bc34659

你可能感兴趣的:(HTTP基础知识)