服务端与网络协议

服务端与网络

http/https 协议

  • 1.0 协议缺陷:

    • 无法复用链接 完成即断开,重新慢启动和TCP3次握手
    • head of line blocking: 线头阻塞,导致请求之间互相影响
  • 1.1 改进:

    • 长链接(默认 keep-alive),复用
    • host字段指定对应的虚拟站点
    • 新增功能:
      • 断点续传
      • 身份认证
      • 状态管理
      • cache 缓存
        • Cache-Control
        • Expires
        • Last-Modified
        • Etag
  • 2.0:

    • 多路复用
    • 二进制分帧层:应用层和传输层之间
    • 首部压缩
    • 服务端推送
  • https:较为安全的网络传输协议

    • 证书(公匙)
    • SSL 加密
  • TCP:

    • 三次握手
    • 四次挥手
    • 滑动窗口:流量控制
    • 拥塞处理
      • 慢开始
      • 拥塞避免
      • 快速重传
      • 快速恢复
  • 缓存策略:可分为 强缓存 和协商缓存

    • 唯一标识方案:Etag(respones携带)&if-None-Match(request携带,上一次返回的Etag):服务器判断资源是否被修改。
    • 最后一次修改时间:Last-Modified(response) & If-Modified-Since (request,上一次返回的Last-Modified)
      • 如果一致,则直接返回304通知浏览器使用缓存
      • 如果不一致,则服务端返回新的资源
    • Last-Modified 缺点:
      • 周期性修改,但内容未变时,会导致缓存失效
      • 最小粒度只到 s, s 以内的改动无法检测到
    • Etag的优先级高于Last-Modified

常见状态码

  • 1xx 接受,继续处理
  • 200 成功,并返回数据
  • 201 已创建
  • 202 已接受
  • 203 成为,但未授权
  • 204 成功,无内容
  • 205 成功 重置内容
  • 206 成功 部分内容
  • 301 永久移动 重定向
  • 302 临时移动 可使用原有URL
  • 304 资源未修改,可使用缓存
  • 305 需要代理访问
  • 400 请求语法错误
  • 401 要求身份认证
  • 403 拒接请求
  • 404 资源不存在
  • 500 服务器错误

GET/POST

  • get: 缓存、请求长度受限、会被历史保存记录
    • 无副作用(不修改资源),幂等(请求次数与资源无关)的场景
  • post:安全、大数据、更多编码类型
GETPOST
后退按钮/刷新无害数据会被重新提交(浏览器应该告知用户数据会被重新提交)。
书签可收藏为书签不可收藏为书签
缓存能被缓存不能缓存
编码类型application/x-www-form-urlencodedapplication/x-www-form-urlencoded or multipart/form-data。为二进制数据使用多重编码。
历史参数保留在浏览器历史中。参数不会保存在浏览器历史中。
对数据长度的限制是的。当发送数据时,GET 方法向 URL 添加数据;URL 的长度是受限制的(URL 的最大长度是 2048 个字符)。无限制。
对数据类型的限制只允许 ASCII 字符。没有限制。也允许二进制数据。
安全性与 POST 相比,GET 的安全性较差,因为所发送的数据是 URL 的一部分。 在发送密码或其他敏感信息时绝不要使用 GET !POST 比 GET 更安全,因为参数不会被保存在浏览器历史或 web 服务器日志中。
可见性数据在 URL 中对所有人都是可见的。数据不会显示在 URL 中。

Websocket

Websocket 是一个 持久化的协议, 基于 http , 服务端可以 主动 push
HTTP 协议有一个缺陷:通信只能由客户端发起

(1)建立在 TCP 协议之上,服务器端的实现比较容易。

(2)与 HTTP 协议有着良好的兼容性。默认端口也是80和443,并且握手阶段采用 HTTP 协议,因此握手时不容易屏蔽,能通过各种 HTTP 代理服务器。

(3)数据格式比较轻量,性能开销小,通信高效。

(4)可以发送文本,也可以发送二进制数据。

(5)没有同源限制,客户端可以与任意服务器通信。

(6)协议标识符是ws(如果加密,则为wss),服务器网址就是 URL。

  • new WebSocket(url)
  • ws.onerror = fn
  • ws.onclose = fn
  • ws.onopen = fn
  • ws.onmessage = fn
  • ws.send()

TCP三次握手

客户端 – FIN --> 服务端, FIN—WAIT
服务端 – ACK --> 客户端, CLOSE-WAIT
服务端 – ACK,FIN --> 客户端, LAST-ACK
客户端 – ACK --> 服务端,CLOSED

Node 的 Event Loop: 6个阶段

  • timer 阶段: 执行到期的 setTimeout / setInterval 队列回调
  • I/O 阶段:执行上轮循环残留的callback
  • idle,perpare
  • poll 等待回调
    • 执行回调
    • 执行定时器
      • 如有到期的 setTimeout / setInterval,则返回timer阶段
      • 如有setTimeout,则往前check阶段
  • check
    • 执行 setTimeout
  • close callbacks

跨域

跨域是浏览器的安全策略,在nodejs环境中不存在跨域

  • JSONP: 利用/

    安全

    • XSS 跨站脚本攻击
      • cookie 设置 httpOnly
      • 转义页面上输入内容和输出内容
    • CSRF 跨站请求伪造
      • get 不修改数据
      • 不被第三方网站访问到用户的cookie
      • 设置白名单,不被第三方网站请求
      • 请求校验
      • from 表单隐藏域
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值