http协议各个版本

2023-11-10

一.HTTP协议版本更替

  • http/0.9: 1991,原型版本,功能简陋,只有一个命令GET。GET /index.html ,服务器只能回应HTML格式字符 串,不能回应别的格式
  • http/1.0:每个TCP连接只能发送一个请求,发送数据完毕,连接就关闭,如果还要请求其他资源,就必须再新建 一个连接引入了POST命令和HEAD命令头信息是 ASCII 码,后面数据可为任何格式。服务器回应时会告 诉客户端,数据是什么格式,即Content-Type字段的作用。这些数据类型总称为MIME 多用途互联网邮 件扩展,每个值包括一级类型和二级类型,预定义的类型,也可自定义类型, 常见Content-Type值: text/xml image/jpeg audio/mp3
  • http/1.1: 1997年1月,引入了持久连接(persistent connection),即TCP连接默认不关闭,可以被多个请求复 用,不用声明Connection: keep-alive。对于同一个域名,大多数浏览器允许同时建立6个持久连接引入 了管道机制,即在同一个TCP连接里,客户端可以同时发送多个请求,进一步改进了HTTP协议的效率 新增方法:PUT、PATCH、OPTIONS、DELETE 同一个TCP连接里,所有的数据通信是按次序进行的。服务器只能顺序处理回应,前面的回应慢,会有 许多请求排队,造成"队头堵塞"(Head-of-line blocking) 为避免上述问题,两种方法:一是减少请求数,二是同时多开持久连接。 网页优化技巧,如合并脚本和样式表、将图片嵌入CSS代码、域名分片(domain sharding)等 HTTP 协议不带有状态,每次请求都必须附上所有信息。请求的很多字段都是重复的,浪费带宽,影响 速度

二.1.0和1.1的区别:

  • 缓存处理,在HTTP1.0中主要使用header里的If-Modified-Since,Expires来做为缓存判断的标准, HTTP1.1则引入了更多的缓存控制策略例如Entity tag,If-Unmodified-Since, If-Match, If-NoneMatch等更多可供选择的缓存头来控制缓存策略
  • 带宽优化及网络连接的使用,HTTP1.0中,存在一些浪费带宽的现象,例如:客户端只是需要某个 对象的一部分,而服务器却将整个对象送过来了,并且不支持断点续传功能,HTTP1.1则在请求头 引入了range头域,它允许只请求资源的某个部分,即返回码是206(Partial Content),方便了 开发者自由的选择以便于充分利用带宽和连接
  • 错误通知的管理,在HTTP1.1中新增24个状态响应码,如409(Conflict)表示请求的资源与资源当 前状态冲突;410(Gone)表示服务器上的某个资源被永久性的删除
  • Host 头处理,在HTTP1.0中认为每台服务器都绑定一个唯一的IP地址,因此,请求消息中的URL并 没有传递主机名(hostname)。但随着虚拟主机技术的发展,在一台物理服务器上可以存在多个 虚拟主机(Multi-homed Web Servers),并且它们共享一个IP地址。HTTP1.1的请求消息和响应 消息都应支持Host头域,且请求消息中如果没有Host头域会报告一个错误(400 Bad Request)
  • 长连接,HTTP 1.1支持持久连接(PersistentConnection)和请求的流水线(Pipelining)处理, 在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟,在 HTTP1.1中默认开启Connection: keep-alive,弥补了HTTP1.0每次请求都要创建连接的缺点

  • http/2.0:
  • 头信息和数据体都是二进制,称为头信息帧和数据帧
  • 复用TCP连接,在一个连接里,客户端和浏览器都可以同时发送多个请求或回应,且不用按顺序响 应,避免了"队头堵塞",此双向的实时通信称为多工(Multiplexing)
  • 引入头信息压缩机制(header compression),头信息使用gzip或compress压缩后再发送;客户端 和服务器同时维护一张头信息表,所有字段都会存入这个表,生成一个索引号,不发送同样字段, 只发送索引号,提高速度
  • HTTP/2 允许服务器有新数据时未经请求,主动向客户端发送资源,而无需客户端拉取,即服务器推 送(server push)

  • http/3.0:使用QUIC(基于UDP协议)替代了TCP协议

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

http协议各个版本 的相关文章

  • 如何在 Laravel 中禁用 JSON 响应的分块编码?

    我从 Laravel 中的控制器方法返回一个数组 Laravel 将此解释为我想发送 JSON 这很好 但它没有设置Content Length并改为使用Transfer Encoding chunked 我的回复很小 所以我不想把它们分块
  • 如何给所有HttpClient请求方法添加参数?

    我正在编写一些使用 Apache 的 Java 代码HttpClient版本4 2 2使用 RESTful 第三方 API 该 API 具有利用 HTTP 的方法GET POST PUT and DELETE 需要注意的是 我使用的是 4
  • Java HttpURLConnection:内容长度计算

    我目前正在为 bitbucket issues RESTful API 开发一个库 我取得了很大的进步 现在我要解决这个部分更新问题 http confluence atlassian com display BBDEV Issues Is
  • 有没有办法测量 Java (Servlet) I/O 流量?

    我尝试做的是使用以下代码实现 servlet 过滤器 int up request getContentLength if HttpServletRequest request getQueryString null up Math max
  • REST URL 结构建议

    我正在尝试为我正在开发的网站的愿望清单部分敲定一个宁静的网址结构 这是一个非常简单的模型 用户可以有许多愿望清单 每个愿望清单可以包含许多产品 目前我有明显的 CRUD URL 来操作愿望清单本身 GET account wishlists
  • HTTP实时音频流服务器

    作为概念验证 我需要创建一个 HTTP 服务器 该服务器在 GET 请求时应启动连续的非编码 非压缩音频数据流 WAV PCM16 我们假设音频数据是 4096 个随机生成的单声道音频样本块 采样率为 44 1kHz 我应该在 HTTP 响
  • 使用传输编码分块的 HTTP 响应中的最大块大小是多少?

    The w3 org RFC2616 http www w3 org Protocols rfc2616 rfc2616 sec3 html sec3 6 1似乎没有定义块的最大大小 但是如果没有最大块大小 则没有空间用于块扩展 必须有一个
  • HTTP 重定向图像可以吗?

    返回图片资源时返回301 302 303代码可以吗 我过去曾这样做过 而且似乎有效 这是好的做法吗 它与大多数浏览器兼容吗 是的 您可以重定向图像 浏览器将遵循重定向 但出于性能原因 您通常希望将重定向保持在最低限度 因为每个重定向都需要单
  • 身份验证中的随机数使用

    在基于摘要的身份验证中 随机数由服务器生成 然而 在基于 OAuth 的身份验证中 随机数是由客户端生成的 我想知道是否有人知道差异的原因 随机数用于使请求唯一 在没有随机数的身份验证方案中 恶意客户端可以生成一次请求并重放多次 即使计算成
  • “双点”可以作为 URL 路径部分的一部分吗

    在 URL 中使用父目录双点是否有效且安全 如下例所示 http example com path to file jpg RFC3986 https www rfc editor org rfc rfc3986定义 URI 它描述了路径如
  • 在 Java Servlet 应用程序中设置 HTTP 201 响应的 Location 标头的正确方法是什么

    考虑以下代码向客户端发送 HTTP 201 已创建 响应 String url app things id 42 example response setStatus HttpServletResponse SC CREATED respo
  • 由于请求的资源上不存在“Access-Control-Allow-Origin”标头,无法获取与 Axios 的链接请求

    我正在尝试使用 cryptocompare api 来获取 axios 的 coindata 列表 但我不知道如何解决这个问题 我相信这是一个 CORS 问题 但我不确定 完整错误如下 加载失败https www cryptocompare
  • HttpRequest PUT内容到poco库中

    我想使用 HTTP PUT 请求将一些数据从 C 应用程序发送到服务器 我在用poco http pocoproject org我的应用程序中的网络库 我正在使用这个代码片段 HTTPClientSession session uri ge
  • Angular JS 在调用新的 $http 之前取消 $http 调用

    在 Angular JS 1 1 5 中 您可以取消之前启动的 http 调用 这两个link1 https stackoverflow com questions 16962232 in angularjs how to stop ong
  • 在golang中获取TTFB(第一个字节的时间)值

    我正在尝试获取 TTFB 值和 Connect 值 c exec Command curl w Connect time connect TTFB time starttransfer Total time time total o dev
  • 由于浏览器设置的标头,Safari 拒绝重定向的 CORS 请求

    Summary Safari 拒绝一些涉及重定向的 CORS 请求 声称某些标头是不允许的 但该标头从来不是由脚本请求的 而是由浏览器添加的 所以我认为这应该不重要 Safari 的行为是一个错误吗 规格有问题吗 或者 事情变成这样是有原因
  • 使用 Http Post 发送图像

    我想使用 Http Post 将图像从 android 客户端发送到 Django 服务器 该图像是从图库中选择的 目前 我正在使用列表值名称 Pairs 将必要的数据发送到服务器并接收来自 Django 的 JSON 响应 是否可以对图像
  • 编写每个处理程序中间件

    我希望从处理程序中提取一些重复的逻辑 并将其放入一些每个处理程序的中间件中 特别是 CSRF 检查 检查现有会话值 即身份验证或预览页面 等 我读了关于此的几篇文章 http justinas org writing http middle
  • 浏览器显示 clojure 环中不存在 access-control-allow-origin 标头

    我通过客户端浏览器向服务器发出请求 如下所示https example com bar https example com bar 但出现错误 Access to XMLHttpRequest at https example com ba
  • GET 和 POST 方法有什么区别? [复制]

    这个问题在这里已经有答案了 可能的重复 什么时候用POST 什么时候用GET https stackoverflow com questions 46585 when do you use post and when do you use

随机推荐

  • 蓝桥杯提交代码每次都是运行出错,但自己在编辑器上运行没问题...

    问题描述 自己在eclipse上面跑的java题目是完全可以编译运行的 但是提交到系统中却一直是运行错误 检查了好久觉得自己没有哪里写错 解决办法 最后发现是自己给不同的题目分了类放在了不同的包下面 提交代码的时候没有把引入的包名注释掉 因
  • 移动BI应该怎么规划?每一个数据产品经理必看

    在移动化 大数据浪潮的今天 基于数据做决策应该是每一家公司的标配 每家公司都有专门负责数据的人 也都应该有一个BI部门 而移动BI 基于手机端随时随地进行数据查询和分析 更是BI中不可或缺的一部分 那么移动BI怎么做 我们按照 用户体验要素
  • 链式输送机传动装置设计(说明书+CAD图纸+PPT)

    摘要 齿轮传动是应用极为广泛和特别重要的一种机械传动形式 它可以用来在空间的任意轴之间传递运动和动力 目前齿轮传动装置正逐步向小型化 高速化 低噪声高可靠性和硬齿面技术方向发展 齿轮传动具有传动平稳可靠 传动效率高 一般可以达到94 以上
  • Qt中opengl使用swapBuffers()函数报错解决办法

    swapBuffers qt文档中方的翻译 用屏幕外缓冲区交换屏幕内容 仅当窗口小部件的格式指定双缓冲模式时 此方法才有效 通常 不需要显式调用此函数 因为它是在每个小部件重新绘制后 即每次执行paintGL 之后 自动完成的 我是在线程中
  • Visual Studio(VS) 编程推荐字体及设置

    菜单栏 工具 选项 选择Consolas就是最常见的编码字体了 在这个字体下的中英文标点和半角圆角符号也能有比较明显的区别
  • YARN之Container-什么是Container?

    在最基本的层面上 Container是单个节点上如RAM CPU核核磁盘等物理资源的集合 单个节点上 或者单个大节点 可以有多个Container 系统中的每个节点可以认为是由内存 如512MB或者1GB 和CPU的最小容量的多个Conta
  • gin-巧用Context传递多种参数

    目录 引言 1 巧妙包装gin Context为NewContext 2 在使用gin Use对每一个请求的Context进行组装 3 在路由绑定时解析出NewContext来为应用层函数提供参数 并且调用应用层函数 4 总结 引言 首先给
  • wget

    参考 http apple stackexchange com questions 100570 getting files all at once from a web page using curl 一份份的下载文件有点麻烦 所以 wg
  • 数据结构之图:邻接矩阵和邻接表、深度优先遍历和广度优先遍历

    简介 线性表是一种线性结构 除了头结点和尾节点 线性表的每个元素都只有一个前取节点和一个后继节点 而树结构则相较于线性表更加复杂 它描述的关系为数据元素之间的父子关系 也是现实世界父子关系的缩影 一个父亲节点可以有零个或者多个子节点 而每个
  • 解决tensorflow没有compat的问题

    经过我多年的产bug经验判断 一般这种情况出现在anaconda下载的tensorflow2 x版本中 如果知道自己的tensorflow环境地址的话可以进去检查一下当前版本的tensorflow缺以下哪几个包 不知道也没关系 直接无脑下载
  • 机器学习-GBDT

    GBDT gbdt是一种以CART树 通常 为基分类器的boosting算法 大家可以仔细查一下boosting的介绍 这里不再赘述 gbdt通过多轮迭代 每轮迭代产生一个弱分类器 每个分类器在上一轮分类器的残差基础上进行训练 对弱分类器的
  • @apinote_新的Javadoc标签@ apiNote,@ implSpec和@implNote

    apinote 如果您已经在使用Java 8 则可能会看到一些新的Javadoc标签 apiNote implSpec和 implNote 他们怎么了 如果要使用它们 该怎么办 总览 该帖子将快速查看标签的来源和当前状态 然后 它将解释它们
  • R语言中基本图形的绘制

    条形图 简单的垂直条形图和水平条形图 函数barplot gt library vcd 载入需要的程辑包 grid gt counts lt table Arthritis Improved gt counts None Some Mark
  • matlab插值:拉格朗日插值

    拉格朗日插值即对所要插值的函数进行拉格朗日多项式拟合 这是matlab插值系列的第二期 第一期 数值分析拟合 Matlab三次样条插值拟合数据 以后会有时间的时候再更新更多的插值方法 这篇文章我推导过程参考过了一些其他文章 代码是自己写的
  • HTML5滑动(swipe)事件,移动端触摸(touch)事件

    目有个交互需要实现手指滑动的交互 pc端使用mousedown mousemove mouseup监听实现 但在ios设备上mousemove是不好监听的 同类的方法是touchstart touchmove touchend 项目需求 需
  • 快速搞懂无偏估计及样本方差中的n-1

    期望EX 方差DX 我们知道任一样本和总体是同分布的 所以任一样本的期望即总体期望 均值 任一样本的方差即总体方差 所以对于任一样本X 有 E X E
  • 移动支付行业发展和商业模式迭代孕育新商机

    在短短十几年的时间当中 PC互联网 移动互联网 以及风头正盛的物联网所引发的三次技术浪潮彻底颠覆了人们沿袭数千年的交易支付模式 也让交易介质从实物货币 到数字流转 再到如今更为便捷和安全的刷脸支付 这便是科技改变社会 成为第一生产力的缩影
  • QTabWidget移除部分分页的方法

    1 将各分页保存起来 QList
  • Hands-On Hyperledger Fabric——Byzantine-fault tolerant(BFT)过程详解

    文章目录 拜占庭问题描述 分布式架构遭遇的问题 Practical Byzantine Fault Tolerance PBFT PBFT过程详解 拜占庭问题描述 拜占庭将军问题是分布式计算中的一个经典问题 拜占庭将军问题是Leslie L
  • http协议各个版本

    一 HTTP协议版本更替 http 0 9 1991 原型版本 功能简陋 只有一个命令GET GET index html 服务器只能回应HTML格式字符 串 不能回应别的格式 http 1 0 每个TCP连接只能发送一个请求 发送数据完毕