http部分

HTTP部分

讲一讲TCP协议的三次握手和四次挥手流程

三次握手过程理解
    • 第一次握手:建立连接时,客户端发送syn包到服务器,并进入SYN_SENT状态(同步已发送),等待服务器确认。SYN:同步序列编号。
    • 第二次握手:服务器收到syn包,必须确认客户的SYN,同时自己也发送一个SYN包,即SYN + ACK包,此时服务器进入SYN_RECV状态(同步已收到)。
    • 第三次握手:客户端收到服务器SYN + ACK包,向服务器发送确认包ACK,此包发送完毕,客户端和服务器端进入ESTAB-LISHED(TCP连接成功)状态(已建立连接),完成三次握手。
四次挥手过程理解
    • 第一次挥手:客户端发送一个FIN,用来关闭客户端到服务器的数据传送,客户端进入FIN_WAIT_1(终止等待1)状态。
    • 第二次握手:服务端收到FIN后,发送一个ACK给客户端,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),服务端进入CLOSE_WAIT状态。
    • 第三次握手:服务端发送一个FIN,用来关闭服务端到客户端的数据传送,服务端进入LAST_ACK状态。
    • 第四次握手:客户端收到FIN后,客户端进入TIME_WAIT状态,接着发送一个ACK给服务端,确认序号为收到的序号+1,服务端进入CLOSE状态,完成四次握手。

为什么TCP建立连接协议是三次握手,而关闭连接却是四次握手呢?为什么不能用两次握手进行连接?

  • 这是因为服务端在LISTEN状态下,收到建立链接请求的SYN报文后,把ACK和SYN放在一个报文里发送给客户端。
  • 而关闭连接时,当收到对方的FIN报文时,仅仅代表对方不再发送数据了但是还能接受数据。乙方也未必全部数据都发送给对方了,所以乙方可以立即close,也可以发送一些数据给对方后,再发送FIN报文给对方来表示同意现在关闭连接,因此,乙方ACK和FIN都会分开发送。

OSI有哪七层模型?TCP/IP是哪四层模型

      OSI(开放式系统互联模型) 七层模型通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯,因此其最主要的功能就是帮助不同类型的主机实现数据传输 。
    • 第一层:物理层。网卡、网线、集线器、调制解调器。
    • 第二层:数据链路层。网桥、交换机。
    • 第三层:网络层。路由器。
    • 第四层:传输层。该层是通信子网和资源子网的接口和桥梁。
    • 第五层:会话层。不同机器上的用户之间建立及管理会话。
    • 第六层:表示层。信息的语法语义及它们的关联,如加密解密、转换翻译、压缩解压缩。
    • 第七层:应用层。各种应用程序协议,如:HTTP FTP SMTP POP3

      TCP/IP是哪四层模型
    • 数据链路层
    • 网络层
    • 传输层
    • 应用层

传输层有哪些协议

  • TCP(传输控制协议)。TCP特点:传输控制协议通过让数据发送方和数据接收方简历可靠连接,然后通过设定的格式以字节流的方式进行有序地无差错地数据传输。有流量控制、拥塞控制和错误控制。
  • UDP(用户数据报协议)。UDP特点:用户数据报协议的数据发送方式和接收方不建立连接进行数据传输,数据发送方只管尽快地发送数据给接收方,并不确保数据是否正确接收,阻塞时会选择丢弃数据包来避免延迟(不可靠),但是传输速度快。

应用层有哪些协议,常用端口

  • DNS域名系统。用来将域名映射ip地址。port:53。
  • HTTP超文本传输协议。port:TCP 80。
  • HTTPS安全文本传输协议。对数据进行加解密。port:443。
  • FTP文件传输协议。FTP协议的客户机与服务器之间需要建立两个连接,一个用于控制数据传输(端口21),一个用于数据传输(端口20)。

常见Http方法有哪些?使用场景分别是什么?

  • GET:通过请求URL得到资源
  • POST:用于传输数据给服务器。
  • PUT:PUT和POST极为相似,都是向服务器发送数据,但它们之间有一个重要区别,PUT通常指定了资源的存放位置,而POST则没有,POST的数据存放位置由服务器自己决定。
  • DELETE:删除某一个资源。

GET与POST有什么区别?

  • 传输方式:get通过地址栏传输;post通过报文传输。
  • 传输长度:get参数有长度限制(受限于url长度);而post无限制。
  • get产生一个TCP数据包;post产生两个TCP数据包。
  • 建议:
  • post比get方式更安全。建议用post提交数据。
  • 查询数据用get方式;在数据添加、修改、删除用post方式。
  • 拓展:
  • get在浏览器回退时是无害的,而post会再次提交请求。
  • get请求参数会被完整保留在浏览器历史记录里,而post中的参数不会被保留。
  • get请求在URL中传输的参数长度是有限制的,而post没有。
  • get比post更不安全,因为参数直接暴露在URL中,所以不能用来传递敏感信息。
  • get参数通过url传递,post放在request body中。

在HTML的form 标签里,method支持哪些类型?

  • get和post

状态码 200、301、302、304、403、404、500、503分别代表什么?

  • 200 访问成功
  • 301 永久重定向
  • 302 临时重定向
  • 304 未修改
  • 404 访问的文件不存在
  • 500 内部服务器错误
  • 503 由于超载或系统维护,服务器暂时的无法处理客户端的请求。

Web安全中有哪些常见的攻击方式?

  • SQL注入攻击
  • 跨站 脚本攻击 - XSS
  • 跨站 伪造请求攻击 - CSRF
  • 文件上传漏洞攻击
  • 分布式拒绝服务攻击 - DDOS

一次完整的Http请求所经历哪些步骤?

    • 在一次完整的http通信过程中,web浏览器和web服务器之间要经历7个步骤。
    • 1、建立TCP连接
      web浏览器首先要通过网络与web服务器之间通过TCP建立链接,TCP与IP协议共同构建Internet。
      (1)HTTP协议是比TCP协议更改层的应用协议,只有当低层协议建立连接之后才能进行高层次的连接。
      (2)TCP连接的端口号一般是80。
    • 2、Web浏览器向web服务器发送请求行
      建立TCP连接之后,web浏览器会向web服务器发送请求命令。
    • 3、web浏览器向web服务器发送请求头
      浏览器发送请求信息之后,还要以`头信息`的形式发送相关信息,并以`空行`代表发送结束。
    • 4、web服务器发送响应行
      web服务器接收请求后返回响应,第一部分是协议的版本号和响应状态码。
      例:“HTTP/1.1 200 OK”
    • 5、web服务器发送响应头
      服务器也会随着响应发送一些相关信息,并以`空行`代表发送结束。
    • 6、web服务器发送响应数据
      web服务器向浏览器发送应答头信息之后,就以content-type格式发送用户所请求的信息。
    • 7、web服务器关闭tcp连接
      一般情况下,一旦web服务器向浏览器发送请求数据之后,就要关闭tcp连接了。
      若浏览器或服务器的头信息中加入了这样一段代码:connection:keep-alive
      则tcp连接会保持打开状态,可以继续通过相同的连接发送请求。

从浏览器输入网址到页面显示发生了什么?

    • 1、DNS解析域名获取IP。
    • 2、根据解析的IP地址向web服务器发送一个http请求。
    • 3、服务器收到请求并进行处理。
    • 4、服务器返回一个响应。
    • 5、浏览器对该响应进行解码,渲染显示。
    • 6、页面显示完成后,浏览器发送异步请求。
    • 7、整个过程结束之后,浏览器关闭TCP连接。

  • 浏览器向 DNS 服务器请求解析该 URL 中的域名所对应的 IP 地址;
  • 解析出 IP 地址后,根据该 IP 地址和默认端口 80,和服务器建立 TCP 连接;
  • 浏览器发出读取文件(URL 中域名后面部分对应的文件)的HTTP 请求,该请求报文作为 TCP 三次握手的第三个报文的数据发送给服务器;
  • 服务器对浏览器请求作出响应,并把对应的 html 文本发送给浏览器;
  • 释放 TCP 连接;
  • 浏览器将该 html 文本并显示内容;

URI和URL的区别?

  • URI是统一资源标识符,可以唯一标识一个资源。
  • URL是URI的一个子集,统一资源定位符。
  • 只要能唯一标识资源的就是URI,在URI的基础上给出其资源的访问方式的就是URL。
  • 对uri可以认为只是唯一识别的编号,类似于大家的身份证号,而url就是身份证住址+姓名,这样是不是就很明显了~~

HTTP请求报文与响应报文的格式?Http首部包含哪些字段?举例说明

  • HTTP 请求报文由 请求行(方法、URL、HTTP协议版本 3 个部分组成)、
    请求头部(请求头部由关键字/值对组成,每行一对,请求头部通知服务器有关于客户端请求的信息。User-Agent:产生请求的浏览器类型;Accept:客户端可识别的响应内容类型列表,"*/*"指的是可接受全部类型;Accept-Language:客户端可接受的自然语言;Accept-Encoding:客户端可接受的编码压缩格式;Host:请求的主机名;connection:连接方式)、
    空行(最后一个请求头之后是一个空行,发送回车符和换行符,通知服务器以下不再有请求头;)、
    请求包体(请求包体不在 GET 方法中使用,而是在POST 方法中使用。与请求包体相关的最常使用的是包体类型 Content-Type 和包体长度 Content-Length。)
    4 个部分组成
  • HTTP 响应报文由 状态行(状态码)、 响应头部(Vary:指示不可缓存的请求头列表;Connection:连接方式;Server:Server 响应报头域包含了服务器用来处理请求的软件信息及其版本。)、 空行(最后一个响应头部之后是一个空行,发送回车符和换行符,通知服务器以下不再有响应头部。)、 和 响应包体 4 个部分组成。
  • Cache-Control 操作缓存的工作机 制。
    Connection 控制不在转发给代理的首部字段和管理持久连接
    Date 创建HTTP报文的日期和时间。
    Transfer-Encoding 输报文主体时采用的编码方式。

Websockt是什么?和HTTP有什么区别?

  • WebSocket允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。
  • 1、HTTP 协议有一个缺陷:通信只能由客户端发起,做不到服务器主动向客户端推送信息。
    2、HTTP的长连接一般就只能坚持一分钟而已,而且是浏览器决定的,你的页面很难控制这个行为。websocket只要网络不断、程序不结束,而且是可以编程灵活控制的。

常见的鉴权方式有哪些

  • HTTP Basic Authentication:这种授权方式是浏览器遵守http协议实现的基本授权方式,HTTP协议进行通信的过程中,HTTP协议定义了基本认证认证允许HTTP服务器对客户端进行用户身份证的方法。
  • session-cookie:利用服务器端的session(会话)和浏览器端的cookie来实现前后端的认证
  • Token 验证:
      1. 客户端使用用户名跟密码请求登录
      2. 服务端收到请求,去验证用户名与密码
      3. 验证成功后,服务端会签发一个 Token,再把这个 Token 发送给客户端
      4. 客户端收到 Token 以后可以把它存储起来,比如放在 Cookie 里或者 Local Storage 里
      5. 客户端每次向服务端请求资源的时候需要带着服务端签发的 Token
      6. 服务端收到请求,然后去验证客户端请求里面带着的 Token,如果验证成功,就向客户端返回请求的数据
  • OAuth(开放授权):允许用户授权第三方网站访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方网站或分享他们数据的所有内容,为了保护用户数据的安全和隐私,第三方网站访问用户数据前都需要显式的向用户征求授权。我们常见的提供OAuth认证服务的厂商有支付宝,QQ,微信。

谈谈Session/Cookie机制,如何实现会话跟踪

  • 1、cookie数据存放在客户的浏览器上,session数据放在服务器上。
  • 2、cookie不是很安全,别人可以分析存放在本地的cookie进行cookie欺骗,考虑到安全用session。
  • 3、session会在一定时间内保存在服务器上。当访问增多,回比较占用服务器的性能,考虑到减轻服务器性能,用cookie。
  • 4、单个cookie保存数据不能超过4k,很多浏览器限制一个站点最多保存20个cookie。
  • 5、若客户端禁止cookie,一般使用重写,就是把sessionId直接附加到url后面。

谈谈JWT鉴权原理

浏览器是如何控制缓存的

浏览器在请求已经访问过的URL时,会判断是否使用缓存,判断是否是由缓存的主要依据是缓存是否在有效期内,如果在有效期内,则会直接使用缓存(如上图中的情况,注意status code)这一部分主要通过response header中的两个字段来判断:
    • Expires:表示有效期,是一个GMT时间,以客户端为基准,与服务器时间可能存在一定时间差
    • Cache(kashi)-Control中的max-age值:表示最大有效时间,单位是s,优先级比expires高,为了解决expires时间差的问题而出现的
当超过缓存期时,浏览器不会直接请求资源,而是判断缓存是否有更新,能否继续使用,判断方法有两种:
    • Last-Modified和 if-Modified-Since:当浏览器第一次请求某个资源时,服务器的响应中有一个Last-Modified字段,表示最近一个修改缓存的时间,当缓存过期后,浏览器就会把这个时间放在请求的If-Modified-Since字段中并发送给服务器,由服务器来判断缓存是否有更新
    • Etag和If-Node-Match:当浏览器第一次请求某个资源时,服务器的响应中有一个ETag字段,是用于表示文件的字符串,一旦文件更新,该字段就会发生变化;当缓存过期后,浏览器会把该字段的内容放在请求的If-None-Match字段中,并发送给服务器,由服务器来判断缓存是否有更新。
注意:Etag比Last-Modified的更高(因为Etag更加准确,而Last-Modified只能精确到秒)

什么是非持久连接,什么是持久连接?

  • 什么是非持久连接:
    定义:每个连接处理一个请求-响应事务。
    每次服务器发出一个对象后,相应的TCP连接就被关闭。每个TCP连接只用于传输一个请求消息和一个响应消息。
  • 什么是持久连接?
    定义:每个连接可以处理多个请求-响应事务。
    持久连接情况下,服务器发出响应后让TCP连接继续打开着。同一对客户/服务器之间的后续请求和响应可以通过这个连接发送。
  • HTTP/1.0 使用非持久连接。 HTTP/1.1 默认使用持久连接。

服务端推送有哪些技术

  • 1、客户端轮询:ajax定时拉取。
  • 2、服务端主动推送:SSE(Serve Send Event)
  • 3、服务端主动推送:Web Socket

谈谈Comet(长轮询)的原理

  • comet有时也称反向Ajax或服务器端推技术,其思想很简单:将数据直接从服务器推到浏览器,而不必等浏览器请求数据,精髓就在于服务器端与javascript来维持浏览器的长链接,同时完成服务器端事件的客户端响应。

HTTPS的原理是什么?

    • HTTPS 在内容传输的加密上使用的是对称加密,非对称加密只作用在证书验证阶段。
证书验证阶段:
浏览器发起 HTTPS 请求
服务端返回 HTTPS 证书
客户端验证证书是否合法,如果不合法则提示告警
数据传输阶段:
当证书验证合法后,在本地生成随机数
通过公钥加密随机数,并把加密后的随机数传输到服务端
服务端通过私钥对随机数进行解密
服务端通过客户端传入的随机数构造对称加密算法,对返回结果内容进行加密后传输

Keep-Alive: timeout=5, max=100是什么意思?

  • HTTP协议采用请求-应答模式
    非KeepAlive模式:每个请求客户端和服务器都要新建一个连接,完成后立即断开连接(HTTP协议是无连接的协议)。
    KeepAlive模式:使客户端到服务器的连接持续有效,当出现对服务器的后继请求时,Keep-Alive避免了从新建立连接。
  • timeout=5 表示这个TCP通道可以保持5秒
  • max=100,表示这个长连接最多接收100次请求就断开。

HTTP1.0,HTTP1.1,HTTP2.0,HTTP3区别(HTTP1.1版本新特性?HTTP2快在哪里?HTTP3变了什么?)

    * HTTP 1.1 新特性:改进持续连接;客户端cookie和安全机制。一个TCP连接上可以传输多个HTTP请求,只要浏览器或者服务器没有断开连接,该TCP会一直保持。

    * HTTP 2.0 通过引入二进制分帧层,实现了 HTTP 的多路复用技术。

    * HTTP3.0 基于 UDP 实现了类似于 TCP 的多路数据流、传输可靠性等功能,我们把这套功能称为QUIC 协议

原文地址:https://www.cnblogs.com/wenshaochang123/p/14764543.html