http、https

  • http 与 https的基本概念以及区别
  1. 概念
    http: 超文本传输协议, 是客户端与服务端之间数据传输的规范。 是一种基于传输层的TCP协议的应用层协议。
    https: 安全的http协议。 http下加入ssl/tls(传输层安全)层,对http协议传输的内容进行加密传输、身份认证。基于安全套接字的http协议。

  2. 区别:
    2.1 URL: HTTP以 http:// 开头 , HTTPS以https://开头
    2.2 http数据是明文传输的,不安全, https在http基础上加入ssl, 是安全的
    2.3 http标准端口是 80, https端口是 443

  • https工作原理

    主要包含一次对称加密 以及 两次非对称加密。

    首先服务端给客户端传输 数字证书 以及 数字签名。 数字证书包含服务器公钥以及服务器的一些相关信息,作用是证明该公钥对应该网站。数字签名是为了防止数字证书被篡改, CA机构对证书信息进行一次hash运算之后,进行私钥加密得到数字签名。

    本地客户端收到证书以及签名之后,首先会验证其合法性。 通过CA机构公钥对数字 签名进行解密得到hash值。然后再对数字证书进行同样的hash运算得到另外一个hash值,比较两者是否相同。
    如果相同,证明该证书是合法有效的,从证书中拿到服务器公钥,然后自己本地生成一个私钥,用服务器公钥加密之后,传送到服务器,服务器收到之后使用私钥解密得到客户端私钥。
    此后,双方的数据通信都要经历本地客户端私钥的加密、解密。

    数字证书: 保证公钥合法性,证明公钥属于该网站
    **数字签名: ** 保证证内容不被篡改
    非对称加密: 只能保证单向通信的安全

  • 常用HTTP方法
    在这里插入图片描述

  • GET与POST方法区别
    GET: 一般用于信息获取,,使用URL传输参数,在URL后跟 ?连接, 参数使用name=value 的方式,&连接多个参数, 由于浏览器对URL长度限制,参数数量一般在2000个字符以内。
    POST: 一般用于向服务器发送数据, 通过提交表单传递参数, 对发送信息数量没有限制,能用于传输大量数据。

  • http请求、响应报文格式

    请求报文一般由 请求行、请求头部、 请求正文三部分组成。
    请求行: 请求方法、URL、以及协议版本组成,中间空格分隔
    协议版本: http/主版本.次版本 http /1.0
    请求头部: Host : 接收请求的服务器地址 User-Agent:客户端名称 Connection:连接相关属性
    在这里插入图片描述
    请求头部下面有一个空行,然后是请求正文

    请求正文:
    get无请求正文 post方法会将参数按照key:value格式放在请求正文中发送

    响应报文一般由 状态行、响应头部、响应正文 三部分组成
    状态行: 协议版本、状态码、状态码描述
    响应头部:
    在这里插入图片描述

  • 常见的http状态码
    状态码是三位数字
    1xx指示信息-表示请求已接收,继续处理
    2xx 成功- 表示请求被成功接收、理解、接受
    3xx 重定向-要完成请求需要进一步操作
    4xx 客户端错误-请求有语法错误、请求无法实现
    5xx 服务端错误-服务器未能实现合法请求
    在这里插入图片描述

  • http 1.0 1.1 2.0之间的区别与特性

  1. http 1.0

短连接 客户端的每次请求都需要建立新的连接。
http1.0 两个关键问题:连接无法复用以及 线头阻塞
无法复用:每次请求经历三次握手以及慢启动,三次握手在高延迟场景影响较为明显,慢启动对文件类的大请求影响较大。
线头阻塞:带宽无法充分利用,后续请求被阻塞。 浏览器限制了同一个域名支持的请求数量, 当页面需要请求很多资源时,队头阻塞导致在达到最大请求数量时,剩下的资源需要等待其他资源完成才能发起请求。

  1. http1.1 与http1.0区别
  1. 长连接 http1.1 支持长连接以及请求的流水线,在一个tcp连接上可以传送多个http请求与响应,减少了建立以及关闭连接的消耗与延迟 connection:keep-alive
  2. Host头处理 http1.0认为每个服务器绑定唯一的ip地址,URL中不传递主机名。但是http1.1 在请求头中增加主机名,用于区分同一台物理服务器上的不同虚拟主机。
  3. 错误管理的通知 新增多个错误状态响应码,比如410表示服务器某个资源被永久删除
  4. 带宽优化以及网络连接的使用 http1.0 只能传递整个对象,而且不支持断点续传。http1.1 引入请求头range,允许请求某个资源的一部分。
  5. 缓存处理 http1.1 在http1.0 if-modified-since的基础上,引入了更多的缓存控制策略。
  1. http2.0 与前者区别
  1. header压缩 http请求头含有大量信息,而且每次都要重复发送,http2.0 使用encoder来减少需要传输的header大小, 通信双方各自缓存一份header field表,避免了传输header,也减少了传输的大小(静态表、动态表、 Hpack思想)
  2. 二进制传输 应用层与传输层之间增加二进制分帧层,所有传输数据都被分隔为更小的消息和帧,对采用二进制编码, 请求头,请求主体都被封装到帧之中。
  1. 多路复用 基于二进制帧, 帧的头部信息标识所属流,流由二进制帧组成,表示一个请求-响应交互过程。每个流都有一个唯一的标识以及优先级。这样就可以支持交错传输,接收端通过帧的头部信息组装完整数据,解决了线头阻塞的问题。
  1. 服务端推送 客户端请求某个资源之后,服务端主动推送其他资源。
  • 流水线与多路复用区别
    流水线可以发送一组没有相互依赖的请求,不必等到上一个请求结束。但是这样的请求以及响应是基于文本的,因此响应的顺序必须与请求一致。当某个响应需要很长时间,其他的响应只能等待这个响应完成才能返回,还是属于线头阻塞。

    多路复用中一个tcp连接中存在多条流,也就是可以发送多个请求,对端通过帧内的标识获取所属流,可以避免线头阻塞问题,提高传输性能。

  • http为什么使用tcp

http 是无状态协议,使用tcp不用考虑数据包乱序、丢失这些问题。

  • 长短连接的区别以及使用场景
    短连接对于服务器管理较为简单,所有连接都是有用的。但是在建立以及关闭连接上浪费很多时间以及带宽。
    长连接省去较多建立、关闭拦截的操作,但是服务器管理较为麻烦。需要去探测哪些是无效连接。

    使用场景:长连接适用于: 操作频繁、点对点、连接数不能太多(数据库)的情况。 短连接用于web网站的http服务,并发量大,连接数多,网站不易维护连接。

  • 克服http无状态
    http无状态指的是每一次的请求都是相互独立的,彼此不会影响。对于事务处理没有记忆能力,后续处理需要前面的信息

session和cookie的目的相同,都是为了克服http协议无状态的缺陷,但完成的方法不同。session通过cookie,在客户端保存session id,而将用户的其他会话消息保存在服务端的session对象中,与此相对的,cookie需要将所有信息都保存在客户端