基础复习-服务端

HTTP 是什么?

  • 超文本传输协议
  • 从网络传输超文本内容到本地浏览器的协议,保证高效准确的传送超文本内容

HTTPS 是什么?

在 HTTP 协议的基础上,添加 SSL/TLS 协议,让数据加密传输

SSL/TLS 是什么?

  • 传输层安全协议
  • 防止运输内容被篡改和偷窥

HTTP 的请求过程

换个问法:一个 HTTP 事务指的是?

  • 客户端发送请求到服务器
  • 服务器接收请求,解析、处理请求
  • 服务器将处理结果返回给客户端

HTTP 1.0、HTTP 1.1 的区别

比较点 1.0 1.1
长连接 手动添加 keep-alive 告诉服务器建立长连接 默认长连接
带宽优化 服务器会将整个响应对象传送回来不支持断点续传 引入了 range 域,允许只请求资源的某个部分
HOST域 没有传递 HOST 可以传递 HOST 域

HTTP 1.1、HTTP 2.0 的区别

多路复用

  • HTTP 1.1 不支持多路复用
  • HTTP 2.0 支持多路复用
  • 多路复用,允许同一个连接并发处理多个请求

数据压缩

  • HTTP 1.1 不支持 header 数据的压缩,每次都需要重复发送
  • HTTP 2.0 支持 header 数据的压缩,,采用了 HPACK 头部压缩算法对 Header 进行压缩

服务器推送

  • HTTP 2.0 独有
  • 当用户的浏览器和服务器在建立连接后,服务器主动将一些资源推送给浏览器并缓存起来的机制
  • 有了缓存,当浏览器想要访问已缓存的资源的时候就可以直接从缓存中读取了

HTTP 和 HTTPS 的区别

  • HTTPS 需要到CA 申请证书
  • HTTP 运行在 TCP 上,传输的内容都是明文的
  • HTTPS 运行在 SSL/TLS 上,而 SSL/TLS 运行在 TCP 上,传输的内容都是密文的
  • 连接方式不同
  • 运行端口不同,HTTP 是 80,HTTPS 是443
  • HTTPS 可以有效的防止运营商劫持,解决了防劫持的一个大问题

HTTP 属于无状态协议吗?

属于,HTTP 协议对事务处理是没有记忆能力,也就是说服务器不知道客户端是什么状态

什么是无状态?

  • 向服务器发送请求后,服务器解析处理请求,然后返回响应,服务器负责完成这个过程(一个完整的事务)
  • 这个过程是独立的,服务器不会记录前后状态的变化

无状态导致了什么问题?

后面发出的请求若需要处理前面请求的响应内容,则前面的请求必须重传,导致需要重复传递某些请求

如何解决 HTTP 无状态的问题?

Session、Cookie 就可以记录用户状态信息,解决无状态的问题

Session 的作用?

  • 数据保存在服务端
  • 用来保存用户的 Session 信息,安全性较高
  • 数据保存在客户端(浏览器)
  • 减轻服务器压力,但是安全性较低,容易进行 cookies 欺骗
  • 浏览器在下次访问网页时会自动附带上它发送给服务器
  • 服务器通过识别 Cookies 并鉴定出是哪个用户
  • 然后再判断用户是否是登录状态,进而返回对应的响应
  • Session 是在服务端,Cookie 是在客户端
  • 服务端通过客户端传来的 Cookie ,确认用户 Session 信息,获取用户登录态

两种,会话 Cookie,持久 Cookie

  • 会话 Cookie:从打开浏览器到关闭浏览器理解成一个会话,会话 Cookie 的有效期仅在浏览器打开期间生效,它存储在浏览器内存中;关闭浏览器后再次打开浏览器访问相同的页面需要重新登录
  • 持久 Cookie:它存在客户端本地硬盘中,不受浏览器关闭影响,关闭浏览器后再次打开浏览器访问相同的页面还能继续使用该 Cookie,无需再次登录,用于长久保持用户登录态

信息敏感程度高的,如银行、机密信息、企业邮箱等网站,就会用会话 Cookie

可勾选自动登录、30天内自动登录的网站就是持久 Cookie

IP 是什么?

  • 网络层协议
  • 计算机用来相互识别,进行通信的一种机制,每台计算机都有一个 IP 用来在 Internet 上标识这台计算机

IP 地址的组成

网络号段+主机号段

什么是 ARP 协议?

一种用以解析地址的协议,根据通信方的 IP 地址可以反查出对应的MAC地址

Internet 主要用的通信协议是什么?

TCP/IP 协议

TCP 是什么?

  • 传输层协议
  • 应用程序之间的通信协议
  • TCP 确保数据包以正确的次序到达,并且尝试确认数据包的内容没有改变

TCP/IP 是什么?

  • TCP 和 IP 两个协议在一起协同工作,有上下层次的关系
  • TCP 负责将数据分割并装入 IP 包,IP 负责将包发送至接受者

UDP 和 TCP 的区别是什么?

TCP UDP
面向连接 无连接,发送数据之前不需要建立连接
提供可靠的服务 提供的服务不一定可靠
面向字节流 面向报文
拥塞控制 没有拥塞控制对实时应用很有用,如实时视频会议,允许报文丢失的场景
头部开销20-60个字节 头部开销小,只有 8 个字节
全双工的可靠信道 不可靠信道
先发送的数据先到达 不能保证先发送的数据先到达

OSI 的七层模型?

  • 应用层
  • 表示层
  • 会话层
  • 传输层
  • 网络层
  • 数据链路层
  • 物理层

TCP/IP 的四层模型?

  • 应用层
  • 传输层
  • 网络层
  • 网络接口层(物理层+数据链路层)

网络三要素是什么?

ip 地址、端口、协议

应用层有什么常见的协议?

  • HTTP、HTTPS
  • POP3:离线接收邮件协议
  • SMTP:简单邮件传输协议
  • MIME:用于互联网邮件,可附加多媒体数据

传输层有什么常见的协议?

TCP、UDP

HTTP 协议、TCP 协议、IP 协议的关系

  • HTTP 的长连接和短连接本质上是 TCP 长连接和短连接
  • HTTP 是应用层协议,在传输层使用 TCP 协议,在网络层使用 IP 协议
  • IP 协议主要解决网络路由和寻址的问题
  • TCP 协议主要解决如何在 IP 层上可靠地传递数据包,使得网络上接收端收到发送端所发出的所有包,并且顺序和发送顺序一致

HTTP 协议中长连接和短连接有什么区别?

  • HTTP 1.0 中默认是短连接
  • HTTP 1.1 中默认是长连接,即 Connection: keep-alive

短连接

  • 客户端和服务端每进行一次 HTTP 请求操作,都会建立一次连接,任务结束就中断连接
  • 当浏览器访问某个 HTML 页面或其他 Web 静态资源(CSS、JS)时,每次请求都会重新建立一个新的 HTTP 会话

长连接

  • 客户端和服务端成功建立连接之后不会断开,然后开始数据传输
  • 后续客户端再次请求服务端的时候,会继续使用已建立的连接
  • 但这个连接不会永久存在,会有一个过期时间,由服务器决定
  • 实现长连接需要客户端和服务端都支持长连接

用 TCP/IP 四层模型解释下发送 HTTP 请求的过程

  1. 客户端在应用层(http 协议)发送一个 http 请求
  2. 传输层(tcp 协议)将从应用层收到的数据(http 请求报文)进行分割,并在各个报文上打上序号和端口号再转发给网络层
  3. 网络层(ip 协议)将报文增加通信目的地的 MAC 地址后转发给链路层
  4. 数据链路层将收到的数据传到服务器的网络层

TCP 三次握手流程

建立连接

  • 客户端请求服务器,询问服务器是否能收到客户端的请求
  • 服务器响应客户端收到请求并同意连接,询问客户端是否能收到服务器的响应
  • 当客户端收到服务端发来的连接同意应答后,向服务器确认已收到响应,开始建立连接

为什么不用两次握手、四次握手?

  • 两次握手:客户端能发送请求给服务器,且确定服务器能收到请求,但是服务器不知道客户端能不能收到发出去的响应
  • 四次握手:服务器确认客户端已经收到响应后,客户端再次询问服务器能否收到请求,重复了第一次握手的动作,显得多余

TCP 四次挥手流程

  • 客户端向服务器发送断开连接的请求
  • 服务器收到断开连接的请求只会回复客户端,表示已经收到断开请求
  • 服务器在确认断开前,会先确认所有传输到客户端的数据是否已经传输完毕,确认数据传输完毕后才进行断开
  • 客户端收到服务器发来的断开连接数据包后,回复服务器,表示收到了断开连接数据包

URL 和 URI 的区别

  • URL:统一资源定位符
  • URI:统一资源标志符

常见的请求方法?

  • POST:新建
  • GET:查询
  • DELETE:删除
  • PUT:更新
  • PATCH:更新

POST 和 GET 的区别?

比较点 GET POST
后退按钮/刷新 无害 数据会被重新提交(浏览器应该告知用户数据会被重新提交)
书签 可收藏为书签 不可收藏为书签
缓存 能被缓存 不能缓存,除非手动设置
编码类型 application/x-www-form-urlencoded application/x-www-form-urlencoded 或 multipart/form-data。为二进制数据使用多重编码
历史记录 请求参数保留在浏览器历史中 请求参数不会保存在浏览器历史中
对数据长度的限制 在 URL 中传送的参数是有长度限制的(URL 的最大长度是 2048 个字符) 无限制
对数据类型的限制 只允许 ASCII 字符。 没有限制。也允许二进制数据
安全性 安全性较差,因为所发送的数据是 URL 的一部分,不能用来传递敏感信息 安全性更高,因为参数不会被保存在浏览器历史或 web 服务器日志中
可见性 数据在 URL 中对所有人都是可见的 数据不会显示在 URL 中

讲完比较点之后,可以再装杯一下

  • 其实 GET、POST 请求本质上没有区别,都是 HTTP协议中发送请求的方法
  • 底层都是 TCP/IP 协议,它们都是 TCP 连接
  • 真正的区别是 GET 请求只发送一个 TCP 数据包,而 POST 请求发送两个 TCP 数据包
  • 对于 GET 请求 ,浏览器会把 HTTP Header 和请求 data 一起发送出去,等待服务器返回响应内容(只发送一次)
  • 对于 POST 请求,浏览器先发送 HTTP Header,等服务器响应 100 continue之后,浏览器再发送请求 data,等待服务器返回响应内容(共发送两次)
  • 但并不是所有浏览器都会在 POST 发送两次 TCP 包,FireFox 就只发送一次

GET 请求只能通过 URL 传参吗?

不是的,也可以加上 request body 进行传参,只是通常 GET 请求会通过 URL 传参

POST 请求只能通过 Request body 传参吗?

不是的,也能通过 URL 进行传参,只是通常 POST 请求会通过 request body 传参

一个请求由什么组成?

  • 请求行(General):包含请求类型、请求 url 等
  • 请求头(Request Headers):Content-type、Cookie 等
  • 请求数据(Request body):需要提交的数据,GET 请求则空

Content-type 是什么?

提交数据的方式

请求方式中options方式有什么用途?

这个问题看到很群里都有人提问,遵循前端请求规范,再发起请求时先发送一个options请求来获取到该接口支持的所有请求方式,然后再正式的发起get或者post请求

可以举例下常见的 Content-type 吗?

  • text/html:HTML 格式
  • application/json:序列化 JSON 数据
  • application/x-www-form-urlencoded:表单数据
  • multipart/form-data:表单文件上传

一个响应由什么组成?

响应状态码(Response Status Code)、响应头(Response Headers)、响应体(Response Body)

常见的响应码?

  • 存在响应头中
  • 设置 Cookies,告诉浏览器需要将这些内容放在 Cookies 中,下次发出的请求要携带这些 Cookies
posted @ 2021-12-20 16:00  我是一言  阅读(60)  评论(0编辑  收藏  举报