网络协议-HTTP

本文讲述了HTTP协议中长连接的原理,包括其与HTTP1.1之前的默认行为对比,以及对长连接Connection:Close和Keep-Alive的讨论。重点分析了PATCH方法的非幂等性,通过示例说明了重复提交PATCH请求可能导致资源数据的不一致性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题

  • 请求重定向头部
    • 302,Location=url
    • Refresh=5;URL=url

常用头部

长连接

  • HTTP1.1以前
    • Connection:Keep-Alive
    • 弊端:哑代理
  • HTTP1.1
    • 默认长连接
    • Connection:Close
  • 原理
    • 基于TCP的长连接,通俗的说就是socket不关闭,可以反复用

概述

  • Request For Comments(RFC)
    • 一系列以编号排定的文件;收集互联网相关信息,以及UNIX和互联网社区的软件文件
  • 请求组成
    • 首行 + 请求头 + 空行 + 请求体
  • 响应组成
    • 首行 + 响应头 + 空行 + 响应体
  • 请求方法
    • GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS, TRACE
  • POST
    • 目标是行为处理器
    • 非幂等
  • PUT与PATCH
    • 所请求目标地址都是直接指向资源
    • PUT
      • 替换资源
      • 幂等
    • PATCH
      • 更新部分资源
      • 非幂等
  • 问题:PATCH为什么是非幂等的?
    • POST非幂等可以理解,因为请求服务器执行一个动作,多次请求可能导致动作多次执行
    • 而PATCH请求的目标是一个资源的,如果它只是更新一个资源,不执行其它动作,又何来不幂等呢?
    • 其实我忽略了一个问题,PATCH方法和POST方法有个很相似的地方,它们的实体部分都是结构化的数据
    • POST的实体结构一般是 multipart/form-data 或 application/x-www-form-urlencoded
    • PATCH的实体结构则根据其它规范定义
    • 这和PUT方法的无结构实体相比就是最大的区别;PUT方法的实体无结构,直接把实体部分数据替换到服务器的资源上
    • 而PATCH提供的实体则需要根据程序或其它协议的定义,解析后在服务器上执行,以此来修改服务器上的数据
    • 也就是说,PATCH请求是会执行某个程序的;如果重复提交,程序可能执行多次,对服务器上的资源就可能造成额外的影响,这就可以解释它为什么是不幂等的了
    • 举个例子
      • 服务器上有个资源/abc.int,里面存放一个整数,值为 1
      • 也就是说,GET这个资源的话,服务器响应的实体只包含了1这个数字
      • 现在自己定义当提交PATCH请求时,实体匹配^\s+\d+$的格式时就对服务器资源中的数字执行一个加法操作
      • 于是当客户端向/abc.int地址发起PATCH请求,实体部分为+3之后,服务器的/abc.int资源中的数据就变成4
      • 如果客户端不小心重复提交了PATCH请求,那么+3就会被再执行一次,这个资源的数据就变成7
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Eddy咸鱼

感谢大佬加鸡蛋~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值