https://myaccount.blob.core.windows.net/mycontainer/myblob
https://myaccount.blob.core.windows.net/mycontainer/myblob?snapshot=<DateTime>
https://myaccount.blob.core.windows.net/mycontainer/myblob?versionid=<DateTime>
HTTP/1.0
HTTP/1.1
模拟存储服务 URI
对模拟存储服务发出请求时,请将仿真器主机名和Azure Blob 存储端口指定为
127.0.0.1:10000
,后跟模拟的存储帐户名称:
GET 方法请求 URI
HTTP 版本
snapshot
可选。 快照 参数是一个不透明的
DateTime
值,如果存在,则指定要检索的 blob 快照。 有关使用 Blob 快照的详细信息,请参阅
创建 blob 的快照
。
versionid
可选,版本 2019-12-12 及更高版本。 参数
versionid
是一个不透明的
DateTime
值,如果存在,则指定要检索的 Blob 的版本。
timeout
可选。
timeout
参数以秒表示。 有关详细信息,请参阅
为 Blob 存储操作设置超时
。
下表介绍必需的和可选的请求标头。
x-ms-version
对于所有已授权的请求是必需的。 对于匿名请求,可选。 指定用于此请求的操作的版本。 如果对于匿名请求省略此标头,则服务将执行版本为 2009-09-19 的请求。 有关详细信息,请参阅
Azure 存储服务的版本控制
。
Range
可选。 仅返回指定范围内 Blob 的字节数。
x-ms-range
可选。 仅返回指定范围内 Blob 的字节数。 如果指定了
Range
和
x-ms-range
,服务将使用
x-ms-range
值。 如果未指定这两个范围,则返回整个 Blob 内容。 有关详细信息,请参阅
指定 Blob 存储操作的范围标头
。
x-ms-lease-id: <ID>
可选。 如果指定了此标头,则仅当满足以下两个条件时才执行操作:
- Blob 的租约当前处于活动状态。
- 请求中指定的租约 ID 与 Blob 的租约 ID 匹配。
如果指定了此标头,但未满足上述任一条件,则请求将失败,
Get Blob
操作失败,状态代码为 412 (前置条件失败) 。
x-ms-range-get-content-md5: true
可选。 如果此标头设置为
true
并连同 标头一起
Range
指定,则服务将返回该区域的 MD5 哈希,前提是其大小小于或等于 4 mb (MiB) 。
如果在未指定标头的情况下
Range
指定标头,则服务将返回状态代码 400 (错误请求) 。
如果在范围超过 4 MiB 时标头设置为
true
,则服务返回状态代码 400 (错误请求) 。
x-ms-range-get-content-crc64: true
可选。 当此标头设置为
true
并连同 标头一起
Range
指定时,只要范围的大小小于或等于 4 MiB,服务将返回该区域的 CRC64 哈希。
如果在未指定标头的情况下
Range
指定标头,则服务将返回状态代码 400 (错误请求) 。
如果在范围超过 4 MiB 时标头设置为
true
,则服务返回状态代码 400 (错误请求) 。
如果 和
x-ms-range-get-content-crc64
标头都
x-ms-range-get-content-md5
存在,则请求失败,并显示 400 (错误的请求) 。
2019-02-02 及更高版本中支持此标头。
Origin
可选。 指定从中发出请求的来源。 如果存在此标头,则会在响应中产生跨域资源共享 (CORS) 标头。
x-ms-client-request-id
可选。 提供客户端生成的不透明值,具有 1-kib (KiB) 字符限制,启用存储分析日志记录时记录在分析日志中。 强烈建议在将客户端活动与服务器收到的请求相关联时使用此标头。 有关详细信息,请参阅
关于 Azure 存储分析日志记录
。
此操作还支持使用条件标头,以便在符合指定条件时才读取 Blob。 有关详细信息,请参阅
为 Blob 存储操作指定条件标头
。
从版本 2019-02-02 开始,可以在请求中指定以下标头,以读取使用客户提供的密钥加密的 Blob。 使用客户提供的密钥 (和相应的标头集) 加密是可选的。 如果之前已使用客户提供的密钥加密 Blob,则必须在请求中包含这些标头才能成功完成读取操作。
读取完整 Blob 的操作若成功,将返回状态代码 200(正常)。
读取指定范围的操作若成功,则返回状态代码 206 (Partial Content)。
有关状态代码的详细信息,请参阅
状态和错误代码
。
此操作的响应包括以下标头。 该响应还可能包括其他标准 HTTP 标头。 所有标准标头都符合
HTTP/1.1 协议规范
。
Last-Modified
上次修改 Blob 的日期/时间。 日期格式遵循 RFC 1123。
任何修改 Blob 的操作(包括 Blob 元数据或属性更新)都会更改 Blob 的上次修改时间。
x-ms-creation-time
版本 2017-11-09 及更高版本。 创建 Blob 的日期/时间。 日期格式遵循 RFC 1123。
x-ms-meta-name:value
作为用户定义的元数据与此 Blob 关联的一组名称/值对。
x-ms-tag-count
版本 2019-12-12 及更高版本。 如果 Blob 具有任何标记,则此标头将返回 Blob 上存储的标记数。 如果 Blob 上没有标记,则不会返回标头。
Content-Length
响应正文中存在的字节数。
Content-Type
为 Blob 指定的内容类型。 默认内容类型为
application/octet-stream
。
Content-Range
指示在客户端通过设置请求标头请求 Blob 子集的情况下返回的
Range
字节范围。
包含可用于有条件地执行操作的值。 有关详细信息,请参阅
为 Blob 存储操作指定条件标头
。 如果请求版本为 2011-08-18 或更高版本,则 ETag 值用引号引起来。
Content-MD5
如果 Blob 有 MD5 哈希并且此
Get Blob
操作读取完整 Blob,则返回此响应标头,以便客户端检查消息内容完整性。
在版本 2012-02-12 及更高版本中,
Put Blob
设置块 Blob 的 MD5 哈希值,即使
Put Blob
请求不包含 MD5 标头也是如此。
如果请求要读取指定范围,并且
x-ms-range-get-content-md5
设置为
true
,则只要范围大小小于或等于 4 MiB,请求将返回该范围的 MD5 哈希。
如果这两组条件
true
都不是 ,则不会为
Content-MD5
标头返回任何值。
如果不带
x-ms-range-get-content-md5
标头指定
Range
,服务将返回状态码 400(错误请求)。
如果
x-ms-range-get-content-md5
当范围超过 4 MiB 时设置为
true
,则服务返回状态代码 400 (错误请求) 。
x-ms-content-crc64
如果请求要读取指定范围,并且
x-ms-range-get-content-crc64
设置为
true
,则只要范围大小小于或等于 4 MiB,请求将返回该区域的 CRC64 哈希。
如果不带
x-ms-range-get-content-crc64
标头指定
Range
,服务将返回状态码 400(错误请求)。
如果
x-ms-range-get-content-crc64
当范围超过 4 MiB 时设置为
true
,则服务返回状态代码 400 (错误请求) 。
Content-Encoding
返回为
Content-Encoding
请求标头指定的值。
Content-Language
返回为
Content-Language
请求标头指定的值。
Cache-Control
如果以前为 Blob 指定了标头,则返回 。
Content-Disposition
针对版本 2013-08-15 和更高版本的请求将返回此标头。 此标头返回为
x-ms-blob-content-disposition
标头指定的值。
响应
Content-Disposition
标头字段传达有关如何处理响应有效负载的其他信息,并可用于附加其他元数据。 例如,如果 标头设置为
attachment
,则表示用户代理不应显示响应。 相反,它显示一个“另存为”对话框,其文件名不是指定的 Blob 名称。
x-ms-blob-sequence-number
页 Blob 的当前序列号。
块 Blob 或追加 Blob 不会返回此标头。
x-ms-blob-type: <BlockBlob | PageBlob | AppendBlob>
返回 Blob 的类型。
x-ms-copy-completion-time: <datetime>
版本 2012-02-12 及更高版本。 上次尝试
Copy Blob
的操作的结束时间,其中此 Blob 是目标 Blob。 该值可以指定已完成、已中止或失败的复制尝试时间。 如果副本处于挂起状态、如果此 Blob 从未成为操作中
Copy Blob
的目标,或者此 Blob 在使用
Set Blob Properties
、
Put Blob
或
Put Block List
的结束
Copy Blob
操作后修改,则不会显示此标头。
x-ms-copy-status-description: <error string>
版本 2012-02-12 及更高版本。 仅当 为
failed
或
pending
时才
x-ms-copy-status
显示。 说明上次严重或不严重的复制操作故障的原因。 如果此 Blob 从未成为操作中
Copy Blob
的目标,或者在使用
Set Blob Properties
、 或
Put Block List
的结束
Copy Blob
操作后修改了此 Blob,
Put Blob
则不会显示此标头。
x-ms-copy-id: <id>
版本 2012-02-12 及更高版本。 上次尝试
Copy Blob
的操作的字符串标识符,其中此 Blob 是目标 Blob。 如果此 Blob 从未成为操作中
Copy Blob
的目标,或者在使用
Set Blob Properties
、 或
Put Block List
的结束
Copy Blob
操作后修改了此 Blob,
Put Blob
则不会显示此标头。
x-ms-copy-progress: <bytes copied/bytes total>
版本 2012-02-12 及更高版本。 包含上次尝试
Copy Blob
的操作中复制的字节数和源中的总字节数,其中此 Blob 是目标 Blob。 它可以显示从 0 到
Content-Length
复制的字节数。 如果此 Blob 从未成为操作中
Copy Blob
的目标,或者在使用
Set Blob Properties
、 或
Put Block List
的结束
Copy Blob
操作后修改了此 Blob,
Put Blob
则不会显示此标头。
x-ms-copy-source: url
版本 2012-02-12 及更高版本。 长度最大为 2 KiB 的 URL,指定在上次尝试
Copy Blob
的操作中使用的源 Blob 或文件,其中此 Blob 是目标 Blob。 如果此 Blob 从未成为操作中
Copy Blob
的目标,或者在使用
Set Blob Properties
、 或
Put Block List
的结束
Copy Blob
操作后修改了此 Blob,
Put Blob
则不会显示此标头。
此标头中返回的 URL 包含源 Blob 上的复制操作中使用的任何请求参数,包括用于访问源 blob 的共享访问签名 (SAS) 令牌。
x-ms-copy-status: <pending | success | aborted | failed>
版本 2012-02-12 及更高版本。 x-ms-copy-id 标识的复制操作的状态,具有以下值:
-
success
:复制已成功完成。
-
pending
:复制正在进行。 检查
x-ms-copy-status-description
间歇性、非致命错误是否减慢了复制进度,但不会导致失败。
-
aborted
:复制已由
Abort Copy Blob
结束。
-
failed
:复制失败。 有关失败详细信息,请参阅 x-ms-copy-status-description。
如果此 Blob 从未成为操作中
Copy Blob
的目标,或者在使用
Set Blob Properties
、 或
Put Block List
的已完成
Copy Blob
操作后修改了此 Blob,
Put Blob
则不会显示此标头。
x-ms-lease-duration: <infinite | fixed>
版本 2012-02-12 及更高版本。 在租用 Blob 时,指定租约是无限期还是固定时间。
x-ms-lease-state: <available | leased | expired | breaking | broken>
版本 2012-02-12 及更高版本。 Blob 的租用状态。
x-ms-lease-status:<locked | unlocked>
Blob 的当前租约状态。
x-ms-request-id
唯一标识发出的请求,并可用于对请求进行故障排除。 有关详细信息,请参阅
API 操作疑难解答
。
x-ms-version
指示用于执行请求的 Blob 存储版本。 包含在使用版本 2009-09-19 及更高版本发出的请求中。
如果使用 Blob 存储版本 2009-09-19 将容器标记为公共访问,则对于没有指定版本的匿名请求也会返回此标头。
Accept-Ranges: bytes
指示服务支持针对部分 Blob 内容的请求。 对于使用版本 2011-08-18 及更高版本发出的请求,以及 SDK 版本 1.6 及更高版本中的本地存储服务,包括此内容。
由服务生成的 UTC 日期/时间值,指示启动响应的时间。
Access-Control-Allow-Origin
如果请求包含
Origin
标头并且通过匹配的规则启用了 CORS,则返回此标头。 如果存在匹配项,此标头返回原始请求标头的值。
Access-Control-Expose-Headers
如果请求包含
Origin
标头并且通过匹配的规则启用了 CORS,则返回此标头。 返回将向客户端或请求的发出方公开的响应标头的列表。
如果指定了 CORS 规则,则随
Origin
标头的值一起返回此标头。 有关详细信息
,请参阅对 Azure 存储服务的 CORS 支持
。
Access-Control-Allow-Credentials
如果请求包含标头
Origin
,并且启用了 CORS,并且启用了不允许所有源的匹配规则,则返回 。 此标头将设置为
true
。
x-ms-blob-committed-block-count
Blob 中存在的已提交块数。 仅对追加 Blob 返回此标头。
x-ms-server-encrypted: true/false
版本 2015-12-11 及更高版本。 如果使用指定的算法完全加密 Blob 数据和应用程序元数据,则此标头的值设置为
true
。 否则,当 blob 未加密或仅加密部分 blob 或应用程序元数据) 时,该值设置为
false
(。
x-ms-encryption-key-sha256
版本 2019-02-02 及更高版本。 如果使用客户提供的密钥加密 Blob,则返回此标头。
x-ms-encryption-context
版本 2021-08-06 及更高版本。 如果设置了加密上下文属性值,它将返回设置的值。 仅当为帐户启用分层命名空间时有效。
x-ms-encryption-scope
版本 2019-02-02 及更高版本。 如果使用加密范围加密 Blob,则返回此标头。
x-ms-blob-content-md5
版本 2016-05-31 及更高版本。 如果 blob 具有 MD5 哈希,并且请求包含范围标头 (Range 或 x-ms-range) ,则返回此响应标头以及整个 blob 的 MD5 值的值。 此值不一定等于 Content-MD5 标头中返回的值,后者是从请求的范围计算得出的。
x-ms-client-request-id
可用于对请求和相应的响应进行故障排除。 如果请求中存在标头,
x-ms-client-request-id
并且该值包含的可见 ASCII 字符不超过 1,024 个,则此标头的值等于标头的值。
x-ms-client-request-id
如果请求中不存在标头,则响应中不存在此标头。
x-ms-last-access-time
版本 2020-02-10 及更高版本。 根据存储帐户的上次访问时间跟踪策略指示上次访问 Blob 数据的时间。 如果存储帐户没有上次访问时间跟踪策略,或者如果策略被禁用,则不会返回 标头。 有关设置存储帐户的上次访问时间跟踪策略的信息,请参阅
Blob 服务 API
。
x-ms-blob-sealed
版本 2019-12-12 及更高版本。 仅针对追加 Blob 返回。 如果已密封追加 blob,则值为
true
。 有关详细信息,请参阅
追加 Blob 密封
x-ms-immutability-policy-until-date
版本 2020-06-12 及更高版本。 指定在 Blob 上设置的日期
之前的保留期
。 这是可以保护 Blob 不被修改或删除的日期。 仅当在 Blob 上设置了不可变性策略时返回。 此标头的值采用 RFC1123 格式。
x-ms-immutability-policy-mode: unlocked/locked
版本 2020-06-12 及更高版本。 如果在 Blob 上设置了不可变性策略,则返回 。 值为
unlocked
和
locked
。
unlocked
指示用户可以通过增加或减少
保留期直到
日期来更改策略。
locked
指示禁止这些操作。
x-ms-legal-hold: true/false
版本 2020-06-12 及更高版本。 如果 Blob 上没有法定保留,则不会返回此标头。 如果 Blob 包含法定保留并且其值为
true
,则此标头的值设置为
true
。 否则,如果 Blob 包含法定保留并且其值为
false
,则该值设置为
false
。
x-ms-owner
版本 2020-06-12 及更高版本,仅适用于启用了分层命名空间的帐户。 返回文件或目录的所有者用户。
x-ms-group
版本 2020-06-12 及更高版本,仅适用于启用了分层命名空间的帐户。 返回文件或目录的拥有组。
x-ms-permissions
版本 2020-06-12 及更高版本,仅适用于启用了分层命名空间的帐户。 返回针对文件或目录的“用户”、“组”和“其他”设置的权限。 每个单独的权限采用 [r,w,x,-]{3} 格式。
x-ms-resource-type
版本 2020-10-02 及更高版本,仅适用于启用了分层命名空间的帐户。 返回路径的资源类型,可以是
file
或
directory
。
响应正文包含 Blob 内容。
Status Response:
HTTP/1.1 200 OK
Response Headers:
x-ms-blob-type: BlockBlob
x-ms-lease-status: unlocked
x-ms-lease-state: available
x-ms-meta-m1: v1
x-ms-meta-m2: v2
Content-Length: 11
Content-Type: text/plain; charset=UTF-8
Date: <date>
ETag: "0x8CB171DBEAD6A6B"
Vary: Origin
Last-Modified: <date>
x-ms-version: 2015-02-21
Server: Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
x-ms-copy-id: 36650d67-05c9-4a24-9a7d-a2213e53caf6
x-ms-copy-source: <url>
x-ms-copy-status: success
x-ms-copy-progress: 11/11
x-ms-copy-completion-time: <date>
在 Azure 存储中调用任何数据访问操作时,都需要授权。 可以授权操作, Get Blob
如下所述。
Azure AD
共享访问签名 (SAS)
Azure 存储支持使用 Azure Active Directory (Azure AD) 来授权请求 Blob 数据。 借助 Azure AD,可以使用 Azure 基于角色的访问控制 (Azure RBAC) 向安全主体授予权限。 安全主体可以是用户、组、应用程序服务主体或 Azure 托管标识。 安全主体经 Azure AD 进行身份验证后会返回 OAuth 2.0 令牌。 然后可以使用令牌来授权对 Blob 服务发出请求。
若要详细了解如何使用 Azure AD 进行授权,请参阅 使用 Azure Active Directory 授予对 Blob 的访问权限。
下面列出了 Azure AD 用户、组或服务主体调用 Get Blob
操作所需的 RBAC 操作,以及包含此操作的最小特权内置 Azure RBAC 角色:
Azure RBAC 操作:Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read
最低特权内置角色:存储 Blob 数据读取者
若要详细了解如何使用 Azure RBAC 分配角色,请参阅 分配 Azure 角色以访问 Blob 数据。
共享访问签名 (SAS) 提供对存储帐户中资源的安全委派访问。 使用 SAS,可以精细控制客户端访问数据的方式。 可以指定客户端可以访问的资源、它们对这些资源拥有的权限,以及 SAS 的有效期。
该 Get Blob
操作支持三种类型的共享访问签名: 用户委派 SAS、 服务 SAS 和 帐户 SAS。
作为安全最佳做法,我们建议使用 Azure AD 凭据而不是存储帐户密钥,这可能会更容易泄露。 如果应用程序设计需要共享访问签名,请尽可能使用 Azure AD 凭据创建用户委托 SAS。
如果存储帐户不允许共享密钥访问,则对 Blob 存储的请求不允许使用服务 SAS 令牌或帐户 SAS 令牌。 若要了解详细信息,请参阅 了解不允许共享密钥如何影响 SAS 令牌。
用户委托 SAS
用户委托 SAS 使用 Azure Active Directory (Azure AD) 凭据以及为 SAS 指定的权限进行保护。
Get Blob
使用委托给容器或 Blob 资源的 SAS 令牌调用操作需要读取 (r) 权限作为用户委派 SAS 令牌的一部分。
若要详细了解用户委托 SAS,请参阅 创建用户委托 SAS。
服务 SAS
使用存储帐户密钥保护的服务 SAS。 服务 SAS 委托对单个 Azure 存储服务(例如 Blob 存储)中的资源的访问权限。
Get Blob
使用委托给容器或 Blob 资源的 SAS 令牌调用操作需要作为服务 SAS 令牌的一部分的读取 (r) 权限。
若要了解有关服务 SAS 的详细信息,请参阅 创建服务 SAS。
帐户 SAS
帐户 SAS 使用存储帐户密钥进行保护。 帐户 SAS 可委派对一个或多个存储服务中的资源的访问权限。 通过服务或用户委托 SAS 提供的所有操作也可以通过帐户 SAS 提供。
下表指示在委派访问权限时要指定的已签名资源类型和已签名权限:
已签名服务
已签名的资源类型
已签名的权限
操作 Get Blob
支持 共享密钥授权。 在大多数情况下,不建议使用帐户密钥进行授权,因为它不太安全。
Microsoft 建议尽可能禁止对存储帐户进行共享密钥授权。 有关详细信息,请参阅阻止通过共享密钥进行授权。
对于页 Blob,尚无内容或内容已清除的页面范围的Get Blob
操作对这些字节返回零。
如果在未指定范围的页 Blob 上调用 Get Blob
,则服务将返回页的页范围,最多返回标头的 x-ms-blob-content-length
指定值。 对于任何缺少内容的页面,服务将返回这些字节的零。
对于追加 Blob,该 Get Blob
操作返回 x-ms-blob-committed-block-count
标头。 此标头指示 Blob 中已提交的块数。 x-ms-blob-committed-block-count
不会为块 Blob 或页 Blob 返回标头。
Get Blob
每个 MiB 允许两分钟完成操作。 如果每个 MiB 操作花费的时间平均超过两分钟,则操作将超时。
检索属于私有容器的 Blob 需要 x-ms-version
标头。 如果 Blob 属于可用于完全或部分公共访问的容器,则任何客户端都可以读取它,而无需指定版本;检索属于公共容器的 Blob 不需要服务版本。 有关详细信息,请参阅限制对容器和 Blob 的访问。
Get Blob
对已存档块 Blob 执行的操作将失败。
若要确定操作是否已Copy Blob
完成,请首先检查,以确保x-ms-copy-id
目标 Blob 的标头值与原始调用 Copy Blob
提供的副本 ID 匹配。 匹配可确保另一个应用程序不会中止复制并启动新 Copy Blob
操作。 接下来,为 标头检查x-ms-copy-status: success
。 但是,请注意,除 、 和 操作之外Lease
,Blob 上的所有写入操作都将删除 Blob 中的所有x-ms-copy-*
属性。Put Block
Put Page
使用早于 2012-02-12 的 Blob 存储版本的操作也不会复制 Copy Blob
这些属性。
标头中 x-ms-copy-source
返回的 URL 包含源 blob 上的复制操作中使用的任何请求参数。 如果使用 SAS 令牌访问源 Blob,则当在目标 Blob 上调用 时Get Blob
,该 SAS 令牌将显示在x-ms-copy-source
标头中。
当响应中出现 x-ms-copy-status: failed
时,x-ms-copy-status-description
中包含有关Copy Blob
失败的详细信息。
下表描述了每个 x-ms-copy-status-description
值的三个字段:
描述错误的关键字 (keyword) ,该错误由 Azure 在 ErrorCode> 元素中<提供。 <如果未显示 ErrorCode> 元素,则使用包含与 HTTP 规范中的 3 位 HTTP 状态代码关联的标准错误文本的关键字 (keyword) 。 请参阅 常见 REST API 错误代码。
失败的详细说明,用引号括起来。
x-ms-copy-status
下表描述了常见故障方案的 和 x-ms-copy-status-description
值:
即使没有版本更改,此表中的错误说明也可能更改,因此它们可能与文本不完全匹配。
从复制操作的源 Blob 中读取时出现无法恢复的错误。
404 ResourceNotFound“在读取源时复制失败”。
注意:当服务报告此基础错误时,它会在 元素中ErrorCode
返回ResourceNotFound
。 如果响应中未显示任何 ErrorCode
元素,则会显示 HTTP 状态的标准字符串表示形式,例如 NotFound
。
限制所有复制操作的超时时间已过。 (当前超时时间为 2 周。)
500 OperationCancelled“复制超过允许的最长时间”。
从源进行读取时,复制操作经常失败,并且未达到尝试与成功次数的最小比率。 (此超时可防止在失败) 之前在两周内重试非常差的源。
500 OperationCancelled“在读取源时复制失败”。
x-ms-last-access-time
根据存储帐户的上次访问时间跟踪策略,跟踪访问 Blob 数据的时间。 访问 Blob 的元数据不会更改其上次访问时间。
授权对 Azure 存储的请求
状态和错误代码
Blob 存储错误代码
为 Blob 存储操作设置超时