• http和https的区别以及常见面试题


    HTTP原理

    http中文叫做超文本传输协议,专门用来完成HTML的超媒体文档等web内容的协议,是基于传输层TCP协议的应用层协议。

    http请求封装到应用层数据包,封装在tcp数据包,封装在ip数据包,封装在以太网数据包,如果过大可能会拆成几个包。走以太网协议+交换机-广播-网关-多个网关-目标主机-一层层拆包-http请求报文-传递给tomcat-spring mvc-http响应

    HTTPS原理

    HTTPS是基于安全套接字的HTTP协议,可以理解为是HTTP+SSL/TSL(数字证书)的组合(在传输层和网络层之间增加了一个安全层用来进行安全校验和数据加密)。

    1. 浏览器把自己支持的加密规则发送给网站
    2. 网站从这套规则中选出一个加密算法和hash算法,然后把自己的身份信息发送给浏览器,证书里有网站地址、加密公钥、证书颁发机构
    3. 浏览器验证证书合法性,然后地址栏会出现一个小锁;然后浏览器生成一串随机数密码,使用证书中的加密公钥进行加密,这块走的是非对称加密;用约定好的hash算法生成握手的hash值,然后使用密码对消息进行加密,然后把所有的内容发送给网站,这块走的是对称加密。
    4. 网站从消息中取出公钥加密后的随机密码,使用私钥进行解密取出密码,通过密码解密浏览器发送的握手消息,计算消息得到hash值与网站发送的hash值验证是否一致,最后使用密码加密一段握手消息,发送给浏览器
    5. 浏览器解密握手消息,然后计算消息的hash值,如果跟网站发送的hash值一样,握手就结束,之后所有的数据都会由之前浏览器生成的随机密码进行加密解密消息

    HTTP和HTTPS的区别

    • HTTP 的 URL 以 http:// 开头,而 HTTPS 的 URL 以 https:// 开头
    • HTTP 是不安全的,而 HTTPS 是安全的
    • HTTP 标准端口是 80 ,而 HTTPS 的标准端口是 443
    • 在 OSI 网络模型中,HTTPS的加密是在传输层完成的,因为SSL是位于传输层的,TLS的前身是SSL,所以同理
    • HTTP无需认证证书,而https需要认证证书

    常用的HTTP方法有哪些

    • GET 从服务器获得资源

    • POST 客户端向服务器提交资源

    • PUT 修改服务器相关资源 (已经很少用)

    • DELETE 删除服务器相关资源 (已经很少用)

    GET方法与POST方法的区别,什么时候应该使用GET什么时候应该使用POST

    GET:一般用于信息的获取,使用URL传递参数,并没有明确的长度限制,只不过是不同的浏览器好像有长度限制。主要是这些参数全都是明文传递。
    POST:一般用于修改服务器上的资源之类的表单请求,并且没有长度大小限制。

    HTTP1.0、1.1、2.0的区别

    • http 1.0默认短连接,每次加载网页的时候最开始请求html网页,然后再请求js,css,图片之类的要频繁的建立tcp连接和释放tcp连接,很慢很慢

    • http1.1默认长链接,打开一个网页的时候建立一个长链接,这个tcp连接就保持着,其他的js,css,图片请求都基于这个tcp协议来走。还增加了缓存,可以进行断点续传

    • http2.0支持多路复用,基于一个tcp连接并行发送多个请求以及接收响应,解决了http1.0同一域名同一时间请求有限制的问题。二进制分帧,将数据拆分成更小的帧,提高了性能,降低延迟提高吞吐。并且通过每一帧的头部数据来进行发送和相应信息对应。

    TCP三次握手建立连接

    第一次,客户端发送请求连接报文,等待服务器的链接
    第二次,服务端收到请求连接报文,返回一个确认报文
    第三次,客户端收到确认报文,这时就建立了链接

    TCP四次挥手断开链接

    第一次,客户端发送报文,进入FIN-WAIT-1状态(等待状态)
    第二次,服务端接收到报文,进入CLOSE_WATI状态,并且返回报文,让客户端进入FIN-WAIT-2状态,此时客户端到服务端的链接就已经算释放了
    第三次,服务端发送链接释放报文,进入LAST-ACK状态(等待最后一个ack回应)
    第四次,客户端接收到释放报文之后,发送应答报文,自身进入TIME_WAIT状态,等待一会儿服务端,自动进入CLOSED状态,服务端接收到释放报文后也进入CLOSED状态。

    输入www.baidu.com之后发生了什么

    1. 域名解析
      浏览器首先查询浏览器缓存(浏览器会缓存DNS记录一段时间,各个浏览器缓存时间不等)。
      如果缓存中没有,会去电脑中的hosts文件中查找。
      如果hosts文件中也没有记录,它将会向DNS服务器发送一条DNS查询请求。DNS服务器是由网络通信栈提供的,通常是本地路由器或者ISP的缓存DNS服务器。(ISP是网络服务提供商,类似于移动,联通)
      以上都没有的情况则向根域名服务器查域名对应IP,根域名服务器将请求转发给下一级查询,顺序如下
      1、根域名解析服务器
      2、com顶级域名服务器
      3、baidu.com域名服务器
      直至找到IP地址

    DNS查询优先级:
    a.本地host文件,若没有
    b.查找本地DNS解析器缓存,若没有
    c.查找TCP/IP参数设置中的首选DNS服务器,若没有
    d.DNS服务器间的迭代查询

    1. 浏览器与服务器建立连接
      一旦浏览器收到正确的IP地址。会与服务器建立TCP连接,通过TCP/IP三次握手的过程建立连接进行数据传输。

    2. web浏览器发送HTTP请求
      建立连接后,就可以发送HTTP请求,HTTP请求由请求方法,请求头,请求正文三部分组成。

    3. web服务器处理请求并返回HTTP响应
      web服务器接收到http请求,由控制层处理逻辑,从数据库取得模型,视图层组装页面,返回HTTP响应。

    4. 浏览器接收HTTP响应
      包括状态行,响应头,响应报文。

    重定向: 对于大型网站存在多个主机站点,为了负载均衡或者导入流量,往往不会直接返回请求页面,而是重定向。返回的状态码就不是200OK,而是301,302以3开头的重定向码,浏览器在获取了重定向响应后,在响应报文中Location项找到重定向地址,浏览器重新回到第一步访问。

    重定向的作用:重定向是为了负载均衡或者导入流量。利用一个前端服务器接受请求,然后负载到不同的主机上,可以大大提高站点的业务并发处理能力;重定向也可将多个域名的访问,集中到一个站点;比如baidu.com,www.baidu.com,永久重定向会将两个地址关联起来,来提高网站的自然排名。

    1. 浏览器渲染页面
      HTML字符串被浏览器接收后一句句读取解析
      解析到< link >标签后重新发送请求获取css
      解析到< scrpit >标签后发送请求获取js,并执行代码
      解析到< img > 标签后发送请求获取图片资源
      浏览器根据获取到的HTML和CSS计算得到渲染树,绘制到屏幕上。

    分析页面中的超链接(如图片,样式等也是一个URL),过程和以上过程类似,之后再显示在当前页面,重复以上过程直至没有超链接需要发送,完成页面的全部加载。

    引用:
    https://www.cnblogs.com/aidixie/p/11764181.html
    https://blog.csdn.net/m0_51380540/article/details/123336649

  • 相关阅读:
    马上2023年了,学一下gradle(Gradle)安装及配置
    不知道如何制作产品图册的,赶紧收藏住!
    LeetCode 144. 二叉树的前序遍历
    Vue 项目中用户登录及 token 验证的思路
    springboot 部署到 weblogic 中 jar 包冲突
    ts中的泛型
    产品测试方案:视频接入平台并发性能测试方案和报告(即150路视频并发流媒体服务器模块的性能测试方案和报告)
    136. 只出现一次的数字
    Linux学习笔记4 - 基础命令
    【Flutter】One or more plugins require a higher Android SDK version.
  • 原文地址:https://blog.csdn.net/weixin_41011482/article/details/126133023