你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

Azure 存储的版本控制

Azure 存储支持多个版本。 若要针对存储服务发出请求,必须指定要用于该操作的版本,除非请求是匿名的。

Azure 存储服务的当前版本为 2024-11-04,建议尽可能使用它。 有关所有其他受支持版本的列表以及有关使用每个版本的信息,请参阅 以前的 Azure 存储服务版本

2024-11-04 服务版本包含以下功能:

  • 支持对文件服务中的所有数据平面 API 进行基于令牌的身份验证。 有关详细信息,请参阅 使用 Microsoft Entra ID授权。
  • 支持高级文件共享帐户的付费突发。 可以使用 创建共享设置共享属性 API 来启用此功能。
  • 在文件服务中获取和设置文件权限时支持二进制格式。 有关详细信息,请参阅 创建权限获取权限

在请求中指定服务版本

如何指定要用于请求的存储服务版本与请求的授权方式相关。 以下各节介绍了授权选项以及如何为每个选项指定服务版本。

  • 使用来自 Microsoft Entra的 OAuth 2.0 令牌的请求:若要使用 Microsoft Entra ID 授权请求,请使用服务版本 2017-11-09 或更高版本在请求上传递 x-ms-version 标头。 有关详细信息,请参阅 使用 OAuth 令牌 调用存储操作,使用 Microsoft Entra ID授权。

  • 使用共享密钥或共享密钥 Lite 的请求:若要使用共享密钥或共享密钥 Lite 授权请求,请在请求中传递 x-ms-version 标头。 对于 Azure Blob 存储,可以通过调用 设置 Blob 服务属性为所有请求指定默认版本。

  • 使用共享访问签名(SAS)的请求:可以在共享访问签名上指定两个版本控制选项。 可选的 api-version 标头指示用于执行 API 操作的服务版本。 必需的 SignedVersion (sv) 参数指定用于授权使用 SAS 发出的请求的服务版本。 如果未指定 api-version 标头,则 SignedVersion (sv) 参数的值也指示用于执行 API 操作的版本。

  • 使用匿名访问的请求:对于针对 Blob 存储的匿名访问,则不会传入任何版本。 下一节介绍了确定要用于请求的版本的启发式。

使用 Microsoft Entra ID、共享密钥或共享密钥 Lite 授权请求

若要使用 Microsoft Entra ID、共享密钥或共享密钥 Lite 授权请求,请在请求上指定 x-ms-version 标头。 x-ms-version 请求标头值必须采用 YYYY-MM-DD 格式指定。 例如:

Request Headers:  
x-ms-version: 2020-04-08

以下规则描述如何评估这些请求,以确定用于处理请求的版本。

  • 如果请求具有有效的 x-ms-version 标头,则存储服务使用指定的版本。 对不使用共享访问签名的 Azure 表存储和 Azure 队列存储的所有请求都必须指定 x-ms-version 标头。 对不使用共享访问签名的 Blob 存储的所有请求都必须指定 x-ms-version 标头,除非设置了默认版本,如下一段落中所述。

  • 如果对 Blob 存储的请求没有 x-ms-version 标头,但帐户所有者已使用 “设置 Blob 服务属性” 操作设置默认版本,则指定的默认版本将用作请求的版本。

使用共享访问签名授权请求

使用版本 2014-02-14 或更高版本生成的共享访问签名(SAS)支持两种版本控制选项:

  • api-version 查询参数定义用于处理使用 SAS 发出的请求的 REST 协议版本。

  • SignedVersion (sv) 查询参数定义用于授权的 SAS 版本。

当客户端使用 SAS 发出请求时,SignedVersion 查询参数用于授权。 授权参数(如 sisrspsigstsetnspksrkepkerk)均使用指定版本进行解释。

REST 协议参数(如 rsccrscdrscersclrsct)使用 api-version 参数标头中提供的版本强制执行。 如果未指定 api-version 标头,则使用为 SignedVersion 提供的服务版本。

api-version 参数不是授权标头字符串登录的一部分,如 创建服务 SAS中所述。

下表说明了服务用于授权的版本控制方案,并将 SignedVersion 参数设置为版本 2014-02-14 或更高版本时调用 REST 协议。

api 版本 参数的值 用于授权的版本 用于协议行为的版本
未指定 sv 参数中指定的版本 sv 参数中指定的版本
格式为 XXXX-XX-XX 的任何有效存储服务版本 sv 参数中指定的版本 有效的存储服务版本 XXXX-XX-XX

示例 1

以下示例请求使用 sv=2015-04-05调用 列出 blob,而不调用 api-version 参数。

https://myaccount.blob.core.windows.net/mycontainer?restype=container&comp=list&sv=2015-04-05&si=readpolicy&sig=a39 %2BYozJhGp6miujGymjRpN8tsrQfLo9Z3i8IRyIpnQ%3d

在这种情况下,服务使用版本 2015-04-05 对请求进行身份验证和授权,并使用版本 2015-04-05 运行该操作。

示例 2

以下示例请求调用 使用 sv=2015-04-05api-version 参数 列出 Blob。

https://myaccount.blob.core.windows.net/mycontainer?restype=container&comp=list&sv=2015-04-05&si=readpolicy&sig=a39 %2BYozJhGp6miujGymjRpN8tsrQfLo9Z3i8IRyIpnQ%3d&api-version=2012-02-12

在这里,服务使用版本 2015-04-05 授权请求,并使用版本 2012-02-12 运行该操作。

注意

.NET 存储客户端库始终将 REST 协议版本(在 api-version 参数中)设置为它所基于的版本。

通过匿名访问的请求

通过匿名访问发出的请求的处理方式不同,具体取决于它们针对的存储帐户的类型。

用于常规用途存储帐户

如果对常规用途存储帐户的匿名请求未指定 x-ms-version 标头,并且尚未使用 设置 Blob 服务属性来设置该服务的默认版本,该服务将使用最早的版本来处理请求。 但是,如果使用版本 2009-09-19 或更高版本执行的 设置容器 ACL 操作公开容器,则使用版本 2009-09-19 处理请求。

对于 Blob 存储帐户

如果对 Blob 存储帐户的匿名请求未指定 x-ms-version 标头,并且尚未使用 设置 Blob 服务属性来设置该服务的默认版本,该服务将使用最早的版本来处理请求。 对于 Blob 存储帐户,最早的版本为 2014-02-14。

已知问题

本部分详细介绍了 Azure 存储 REST API 的已知问题。

InvalidHeaderValue 错误消息

在极少数情况下,进行直接 REST API 调用的应用程序可能会收到 InvalidHeaderValue 错误消息。 此错误类似于以下示例:

HTTP/1.1 400 The value for one of the HTTP headers is not in the correct format.
Content-Length: 328
Content-Type: application/xml
Server: Microsoft-HTTPAPI/2.0
x-ms-request-id: <REMOVED>
Date: Fri, 19 May 2023 17:10:33 GMT
 
<?xml version="1.0" encoding="utf-8"?><Error><Code>InvalidHeaderValue</Code><Message>The value for one of the HTTP headers is not in the correct format.
RequestId:<REMOVED>
Time:2023-05-19T17:10:34.2972651Z</Message><HeaderName>x-ms-version</HeaderName><HeaderValue>yyyy-mm-dd</HeaderValue></Error> 

建议使用较早的 REST API 版本来查看问题是否得到解决。 如果问题仍然存在,或者建议不可行,请 开具支持票证 讨论其他选项。

另请参阅