技术咨询、项目合作、广告投放、简历咨询、技术文档下载 点击这里 联系博主

# Http面试汇总

# 浏览器输入 url 到页面的展现,具体发生了些什么可以展开说下么?

一般会经历以下几个过程:

  • 1、首先,在浏览器地址栏中输入url

  • 2、浏览器先查看浏览器缓存-系统缓存-路由器缓存,如果缓存中有,会直接在屏幕中显示页面内容。若没有,则跳到第三步操作。

  • 3、在发送http请求前,需要域名解析(DNS解析),解析获取相应的IP地址。

  • 4、浏览器向服务器发起tcp连接,与浏览器建立tcp三次握手。

  • 5、握手成功后,浏览器向服务器发送http请求,请求数据包。

  • 6、服务器处理收到的请求,将数据返回至浏览器

  • 7、浏览器收到HTTP响应

  • 8、读取页面内容,浏览器渲染,解析html源码

  • 9、生成Dom树、解析css样式、js交互

  • 10、客户端和服务器交互

  • 11、ajax查询

# 缓存及DNS解析过程

  • (1)浏览器缓存: 当用户通过浏览器访问某域名时,浏览器首先会在自己的缓存中查找是否有该域名对应的IP地址(若曾经访问过该域名且没有清空缓存便存在);
  • (2)系统缓存: 当浏览器缓存中无域名对应IP则会自动检查用户计算机系统Hosts文件DNS缓存是否有该域名对应IP;
  • (3)路由器缓存: 当浏览器及系统缓存中均无域名对应IP则进入路由器缓存中检查,以上三步均为客户端的DNS缓存;
  • (4)ISP(互联网服务提供商)DNS缓存: 当在用户客服端查找不到域名对应IP地址,则将进入ISP DNS缓存中进行查询。比如你用的是电信的网络,则会进入电信的DNS缓存服务器中进行查找;(或者向网络设置中指定的local DNS进行查询,如果在PC指定了DNS的话,如果没有设置比如DNS动态获取,则向ISP DNS发起查询请求)
  • (5)根域名服务器: 当以上均未完成,则进入根服务器进行查询。全球仅有13台根域名服务器,1个主根域名服务器,其余12为辅根域名服务器。根域名收到请求后会查看区域文件记录,若无则将其管辖范围内顶级域名(如.com)服务器IP告诉本地DNS服务器;
  • (6)顶级域名服务器: 顶级域名服务器收到请求后查看区域文件记录,若无则将其管辖范围内主域名服务器的IP地址告诉本地DNS服务器;
  • (7)主域名服务器: 主域名服务器接受到请求后查询自己的缓存,如果没有则进入下一级域名服务器进行查找,并重复该步骤直至找到正确记录;
  • (8)保存结果至缓存: 本地域名服务器把返回的结果保存到缓存,以备下一次使用,同时将该结果反馈给客户端,客户端通过这个IP地址与web服务器建立链接。

DNS解析流程

# HTTP1.0、HTTP1.1 和 HTTP2.0 的区别

# 常用的HTTP状态码

  • 1xx:指示信息–表示请求已接收,继续处理。

    • 100 客户必须继续发出请求

    • 101 客户要求服务器根据请求转换HTTP协议版本

  • 2XX 成功

    • 200 OK,表示从客户端发来的请求在服务器端被正确处理 ✨
    • 201 Created 请求已经被实现,而且有一个新的资源已经依据请求的需要而建立
    • 202 Accepted 请求已接受,但是还没执行,不保证完成请求
    • 204 No content,表示请求成功,但响应报文不含实体的主体部分
    • 206 Partial Content,进行范围请求 ✨
  • 3XX 重定向

    • 301 moved permanently,永久性重定向,表示资源已被分配了新的 URL
    • 302 found,临时性重定向,表示资源临时被分配了新的 URL ✨(通常解析到CDN)
    • 303 see other,表示资源存在着另一个 URL,应使用 GET 方法获取资源
    • 304 not modified(缓存),如果客户端发送了一个带条件的 GET 请求且该请求已被允许,而文档的内容(自上次访问以来或者根据请求的条件)并没有改变,则服务器应当返回这个状态码 ✨
    • 307 temporary redirect,临时重定向,和302含义相同
  • 4XX 客户端错误

    • 400 bad request,请求报文存在语法错误 ✨
    • 401 unauthorized,表示发送的请求需要有通过 HTTP 认证的认证信息 ✨
    • 403 forbidden,表示对请求资源的访问被服务器拒绝 ✨
    • 404 not found,表示在服务器上没有找到请求的资源 ✨
    • 408 Request timeout, 客户端请求超时 ✨
    • 409 Confict, 请求的资源可能引起冲突
  • 5XX 服务器错误

    • 500 internal sever error,表示服务器端在执行请求时发生了错误 ✨
    • 501 Not Implemented 请求超出服务器能力范围,例如服务器不支持当前请求所需要的某个功能,或者请求是服务器不支持的某个方法
    • 502 (错误网关) 服务器作为网关或代理,从上游服务器收到无效响应。
    • 503 service unavailable,表明服务器暂时处于超负载或正在停机维护,无法处理请求
    • 504 (网关超时) 服务器作为网关或代理,但是没有及时从上游服务器收到请求。
    • 505 http version not supported 服务器不支持,或者拒绝支持在请求中使用的 HTTP 版本

# HTTP 头部

HTTP头可以看做是一个键值对,在HTTP标准中,Request Header如下图:

Response Header如下图:

# TCP的三次握手和四次挥手

TCP三次握手 浏览器获得 IP 地址后,就会对目标服务器发起建立 TCP 连接的请求,建立连接主要有三个步骤,一般称为客户端与服务器端的三次握手:

  • 第一次握手: 建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认;
  • 第二次握手: 服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
  • 第三次握手: 客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。

TCP四次挥手 客户端或服务器均可主动发起挥手动作

  • 第一次挥手: 主动关闭方,将FIN置为1,Seq设置为Z为上一次对方传送过来的Ack值,Ack设置为X为Seq值+1。设置好以上值后,将数据发送至被动关闭方(这里标记为:B)。然后A进入FIN_WAIT_1状态。
  • 第二次挥手:B收到了A发送的FIN报文段,向A回复,Ack设置为第一次挥手中的Seq值+1,Seq设置为Y第一次挥手中的Ack值。然后B进入CLOSE_WAIT状态,A收到B的回复后,进入FIN_WAIT_2状态。
  • 第三次挥手:B再次向A发送报文,将FIN置为1,Ack设置为X,Seq设置为Y。然后B进入LAST_ACK状态,A收到B的报文后,进入TIME_WAIT状态。
  • 第四次挥手:A收到B发送的FIN报文段,Ack设置为Y,Seq设置为X。然后A进入TIME_WAIT状态,B在收到报文后进入CLOSED状态,A在发送完报文等待了2MSL时间后进入CLOSED状态。

# HTTP和HTTPS的区别

# 浏览器渲染过程和原理

# SSL中的对称加密和非对称加密

参考

【未经作者允许禁止转载】 Last Updated: 9/10/2024, 6:03:53 AM