浏览器输入URL发生了什么 TODO 详细描述

  1. DNS解析 优先查找本地host文件有无对应的IP地址,没有的话去本地DNS服务器查找,还不行的话,本地DNS服务器会去找根DNS服务器要一个域服务器的地址进行查询,域服务器将要查询的域名的解析服务器地址返回给本地DNS,本地DNS去这里查询就OK了。
  2. TCP连接 建立TCP/IP连接,服务器接收到请求并开始处理。
  3. 发送HTTP请求 浏览器拿到服务器的IP地址后,会向它发送HTTP请求。HTTP请求经由一层层的处理、封装、发出之后,最终经由网络到达服务器。
  4. 服务器处理HTTP请求并返回HTTP报文 服务器构建响应,再经由一层层的处理、封装、发出后,到达客户端,浏览器处理请求。
  5. 浏览器解析渲染页面 浏览器开始渲染页面,解析HTML,构建render树,根据render树的节点和CSS的对应关系,进行布局,绘制页面。
  6. 连接结束

TCP和UDP区别

  1. TCP 面向连接,传输可靠; 传输形式:字节流; 传输效率慢,所需资源多; 应用场景:要求通信数据可靠(如文件传输、邮件传输、远程登录等) 首部字节 20-60
  2. UDP 无连接,传输不可靠;传输形式:数据报文段;传输效率快,所需资源少;应用场景:要求通信速度高(如即时通信,直播、域名转换等),首部8个字节(由四个字段组成)
  3. TCP 不提供广播或者多播服务

TCP是如何保证传输可靠性

  1. 应用程序被分割成TCP认为最适合发送的数据块
  2. TCP给发送的每个包标号,接收方对数据包排序,把有序数据传送给应用层。
  3. 校验和:TCP将保持它的首部和数据的校验和。这是一个端到端的校验和,目的是监测数据传输过程中的变化。如果收到检验和有差错,将丢弃这个报文段和不确认收到此报文段。
  4. TCP的接收端会丢弃重复的数据。
  5. 流量控制:TCP根据接收端对数据的处理能力,决定发送端的发送速度,这个机制就是流量控制。TCP利用滑动窗口来实现流量控制。
  6. 拥塞控制:拥塞控制就是防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载。常用的方法就是:1. 慢开始、拥塞控制 2. 快重传、快恢复。
  7. 超时重传:当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。

tcp连接的三次握手,四次挥手

三次握手

同步序号SYN:用来建立连接,涉及到TCP的三次握手。

  1. 开始建立连接时,客户端向服务器发送一个TCP分组,分组首部的SYN为1,并携带一个初始序号,表明这是一个连接请求。
  2. 如果服务器接受了连接,会向客户端发送一个TCP分组,分组中会包含SYN和ACK,都为1,同时包含一个确认序号,值为来自客户端的初始序号 + 1,表示连接已经被接受。
  3. 客户端收到上一步发来的分组后,会再向服务器发送一段确认报文分组,ACK为1,会再次携带确认序号,值是第二步来自客户端的确认序号 + 1。服务端收到确认信息后,进入已经连接的状态。
    在第三步的确认分组中,是可以携带要发送的数据的。

四次挥手

连接终止标志FIN: 用来关闭连接,当一端完成数据发送任务后会发送一个FIN标志来终止连接,但因为TCP在两个方向(C-S,S-C)上会有数据传递,每个方向有各自的发送FIN & 确认关闭流程,所以会有四次交互,也称为四次挥手。

  1. 如果客户端应用层的数据发送完毕,会导致客户端的TCP报文发送一个FIN,告知服务器准备关闭数据传送。
  2. 服务器接收到这个标志后,它发回一个ACK,确认序号为收到的序号加1,同时TCP还要向应用程序发一个文件结束符。
  3. 此时服务器关闭这个方向的连接,导致它的TCP也会发送一个FIN。
  4. 客户端接收到之后发回一个确认ACK,序号为收到的序号 + 1,连接完全关闭。

描述HTTPS和HTTP的区别

  1. http是超文本传输协议,信息是明文传输,客户端和服务端无法验证对方的身份,https则是具有安全性的ssl/tls加密传输协议,ssl/tls运行在TCP之上。传输加密,加密采用对称加密,对称加密事务密匙用服务器方的证书进行了非对称加密。 http安全性不如https,https耗费服务器资源多。
  2. http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
  3. 对称加密:密钥只有一个,加密解密用同一个密码,加密速度快。典型的加密算法有AES、DES。
  4. 非对称加密:密钥成对出现(根据公钥无法推知私钥,根据私钥无法推知公钥)加密解密使用不同密钥(公钥加密需要私钥解密,私钥加密需要公钥解密),相对对称加密速度较慢。典型的非对称加密算法有RSA、DSA等。

HTTP协议的请求报文和响应报文格式

HTTP 请求报文由请求行、请求头部、空行 和 请求体 4 个部分组成。

  1. 请求行:请求行由方法字段、URL 字段 和HTTP 协议版本字段 3 个部分组成,他们之间使用空格隔开。
    常用的 HTTP 请求方法有 GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT;
  2. 请求头部:请求头部由关键字/值对组成,每行一对,关键字和值用英文冒号“:”分隔。请求头部通知服务器有关于客户端请求的信息,典型的请求头有:User-Agent:产生请求的浏览器类型;Accept-Encoding:客户端可接受的编码压缩格式;Cookie:存储于客户端扩展字段,向同一域名的服务端发送属于该域的cookie;等

HTTP 响应报文由状态行、响应头部、空行 和 响应包体 4 个部分组成。

  1. 状态行:状态行由 HTTP 协议版本字段、状态码和状态码的描述文本 3 个部分组成,他们之间使用空格隔开。

HTTP的状态码有哪些?如果出现某些错误的状态码,分析出是什么情况吗?

  1. 状态码由三位数字组成,第一位数字表示响应的类型,常用的状态码有五大类如下所示:
      1xx:表示服务器已接收了客户端请求,客户端可继续发送请求;
      2xx:表示服务器已成功接收到请求并进行处理;
      3xx:表示服务器要求客户端重定向;
      4xx:表示客户端的请求有非法内容;
      5xx:表示服务器未能正常处理客户端的请求而出现意外错误;
  2. 状态码描述文本有如下取值:
      200 OK:表示客户端请求成功;
      400 Bad Request:表示客户端请求有语法错误,不能被服务器所理解;
      401 Unauthonzed:表示请求未经授权,该状态代码必须与 WWW-Authenticate 报头域一起使用;
      403 Forbidden:表示服务器收到请求,但是拒绝提供服务,通常会在响应正文中给出不提供服务的原因;
      404 Not Found:请求的资源不存在,例如,输入了错误的URL;
      500 Internal Server Error:表示服务器发生不可预期的错误,导致无法完成客户端的请求;
      503 Service Unavailable:表示服务器当前不能够处理客户端的请求,在一段时间之后,服务器可能会恢复正常;

网络5层模型,每一层有哪些协议以及每一层的作用

五层体系结构包括:应用层、运输层、网络层、数据链路层和物理层。
图片

网络IO模型有哪些?5种网络I/O模型

  1. 阻塞
  2. 非阻塞
  3. I/O多路复用
  4. 信号驱动IO
  5. 异步I/O

Session和Cookie的作用是什么?有什么区别?

Cookie和Session都是用来跟踪浏览器用户身份的会话方式。
Session的主要作用就是通过服务端记录用户的状态。Session数据保存在服务器端。安全性相对较高。
Cookie一般用于保存用户信息。Cookie数据保存在客户端(浏览器端)

Cookie被禁用怎么办?

最常用的就是利用URL重写把Session ID直接附加在URL路径后。

HTTP1.0和HTTP1.1的主要区别是什么?

  1. 长连接:HTTP1.0中,默认使用短连接,每次请求都要重新建立一次连接。HTTP1.1默认使用长连接,默认开启Connection:keep-alive. HTTP1.1的持续连接有非流水线方式和流水线方式。流水线方式是客户在收到HTTP的响应报文之前就能接着发送新的请求报文。与之相对应的非流水线方式是客户在收到前一个响应后才能发送下一个请求。
  2. 错误状态响应码:HTTP1.1中新增了24个错误状态响应码,如409表示请求资源与资源当前状态发生冲突;410表示服务器上某资源被永久删除。
  3. 缓存处理:HTTP1.0中主要使用Header里的If-Modified-Since, Expires作为缓存判断的标准;HTTP1.1引入了更多的缓存控制策略,如Entity tag;If-Match,If-None-Match等更多可供选择的缓存头来控制缓存策略。
  4. 带宽优化及网络连接的使用:1.0不支持断点续传,存在浪费带宽现象;1.1在请求头引入range头域,允许只请求资源的某个部分,返回状态码是206(Partial Content),方便自由选择以便于充分利用带宽和连接。

URI和URL的区别是什么?

  1. URI(Uniform Resource Identifier)是统一资源标志符,可唯一标识一个资源。
  2. URL(Uniform Resource Location)是统一资源定位符,可提供该资源的路径。它是一种具体的URI,即URL可以用来标识一个资源,而且还指明了如何Locate这个资源。
  3. URI的作用像身份证号,URL的作用更像家庭住址。URL是一种具体的URI,它不仅唯一标识资源,而且还提供了定位该资源的信息。

HTTP 协议包括哪些请求?

超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。

  • GET:请求读取由URL所标志的信息。
  • POST:给服务器添加信息(如注释)。
  • PUT:在给定的URL下存储一个文档。
  • DELETE:删除给定的URL所标志的资源。

HTTP 中, POST 与 GET 的区别

  1. Get是从服务器上获取数据,Post是向服务器传送数据。
  2. Get是把参数数据队列加到提交表单的Action属性所指向的URL中,值和表单内各个字段一一对应,在URL中可以看到。
  3. Get传送的数据量小,不能大于2KB;Post传送的数据量较大,一般被默认为不受限制。
  4. 根据HTTP规范,GET用于信息获取,而且应该是安全的和幂等的。
    4.1 所谓 安全的 意味着该操作用于获取信息而非修改信息。换句话说,GET请求一般不应产生副作用。就是说,它仅仅是获取资源信息,就像数据库查询一样,不会修改,增加数据,不会影响资源的状态。
    4.2 幂等 的意味着对同一URL的多个请求应该返回同样的结果。