该Preflight Blob Request
操作在发送请求之前查询跨域资源共享 (CORS) 规则以查找Azure Blob 存储。
Web 浏览器或其他用户代理发送预检请求,其中包括代理要发出的请求的源域、方法和标头。 如果为 Blob 存储启用了 CORS,则 Blob 存储会根据帐户所有者通过 设置 Blob 服务属性配置的 CORS 规则评估预检请求。 然后,Blob 存储接受或拒绝该请求。
有关 CORS 和预检请求的详细信息,请参阅 AZURE 存储的 CORS 规范 和 CORS 支持。
请求
可以按如下所示指定 Preflight Blob Request
。 将 <account-name>
替换为存储帐户的名称。 将 替换为 <blob-resource>
将成为请求目标的容器或 Blob 资源。
HTTP 谓词 | 请求 URI | HTTP 版本 |
---|---|---|
OPTIONS |
http://<account-name>.blob.core.windows.net/<blob-resource> |
HTTP/1.1 |
URI 必须始终包含正斜杠 (/) ,以便将主机名与 URI 的路径和查询部分分开。 在此操作中,URI 的路径部分可以为空,也可以指向任何容器或 Blob 资源。
在发出预检请求时,资源可能存在,也可能不存在。 根据服务的 CORS 规则在服务级别评估预检请求,因此资源名称是否存在不会影响操作的成功或失败。
URI 参数
无。
请求标头
下表描述了必需请求标头和可选请求标头:
请求标头 | 说明 |
---|---|
Origin |
必需。 指定发出请求的来源。 将根据服务的 CORS 规则检查来源,以确定预检请求是成功还是失败。 |
Access-Control-Request-Method |
必需。 指定请求的方法 (或 HTTP 谓词) 。 将根据服务的 CORS 规则检查该方法,以确定预检请求是成功还是失败。 |
Access-Control-Request-Headers |
可选。 指定要发送的请求标头。 如果不存在,则服务会假定请求不包含标头。 |
请求正文
无。
响应
响应包括 HTTP 状态代码和一组响应标头。
状态代码
此操作成功后返回状态代码 200(正常)。
有关状态代码的信息,请参阅 状态和错误代码。
响应头
此操作的响应包括以下标头。 响应还可能包括其他标准 HTTP 标头。 所有标准标头都符合 HTTP/1.1 协议规范。
有关预检请求标头的详细信息,请参阅 CORS 规范。
响应标头 | 说明 |
---|---|
Access-Control-Allow-Origin |
指示允许的源,如果预检请求成功,则与请求中的源标头匹配。 |
Access-Control-Allow-Methods |
如果预检请求成功,则此标头设置为为请求标头 Access-Control-Request-Method 指定的值。 |
Access-Control-Allow-Headers |
如果预检请求成功,则此标头设置为为请求标头 Access-Control-Request-Headers 指定的值。 |
Access-Control-Max-Age |
指定允许用户代理为将来的请求缓存预检请求的时间长度。 |
Access-Control-Allow-Credentials |
指示是否可以通过凭据发出请求。 此标头始终设置为 true 。 |
响应正文
无。
授权
操作 Preflight Blob Request
始终以匿名方式执行。 它不需要授权,如果提供了凭据,它会忽略凭据。
注意
如果已启用 Azure 存储分析并记录指标,则对操作的 Preflight Blob Request
调用将记录为 AnonymousSuccess
。 出于此原因,如果在Azure 门户查看指标,将看到AnonymousSuccess
记录的 。Preflight Blob Request
此指标并不表示专用数据已泄露,而只是指示 Preflight Blob Request
操作成功,状态代码为 200 (正常) 。
示例请求和响应
以下示例发送源 www.contoso.com
的预检请求。 请求方法设置为 PUT
,请求标头设置为 content-type
和 accept
。
OPTIONS http://myaccount.blob.core.windows.net/mycontainer/myblockblob HTTP/1.1
Accept: */*
Origin: www.contoso.com
Access-Control-Request-Method: PUT
Access-Control-Request-Headers: content-type, accept
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)
Content-Length: 0
响应指示为服务启用了 CORS,并且 CORS 规则与预检请求匹配:
HTTP/1.1 200 OK
Connection: Keep-Alive
Content-Length: 0
Content-Type: text/html; charset=UTF-8
Access-Control-Allow-Origin: *
Access-Control-Max-Age: 60
Access-Control-Allow-Methods: PUT
Access-Control-Allow-Headers: accept,content-type
注解
如果为服务启用了 CORS,并且 CORS 规则与预检请求匹配,则服务会响应状态代码为 200 的预检请求, (正常) 。 响应包含所需的 Access-Control
标头。 在这种情况下,对请求进行计费。
如果未启用 CORS 或者不存在与预检请求匹配的 CORS 规则,则服务将使用状态代码 403(“禁止”)进行响应。 在这种情况下,不会对请求计费。
OPTIONS
如果请求格式不正确,服务会响应状态代码 400 (错误请求) ,并且不会对请求计费。 格式不正确的请求的一个示例是不包含必需 Origin
和 Access-Control-Request-Method
标头的请求。
预检请求是一种机制,用于查询与特定存储帐户关联的存储服务的 CORS 功能。 预检请求不针对某个特定资源。
计费
定价请求可能源自使用 Blob 存储 API 的客户端,可以直接通过 Blob 存储 REST API 或 Azure 存储客户端库。 这些请求按事务产生费用。 事务类型会影响帐户的收费方式。 例如,读取事务累算到与写入事务不同的计费类别。 下表显示了基于存储帐户类型的请求的计费类别 Preflight Blob Request
:
操作 | 存储帐户类型 | 计费类别 |
---|---|---|
预检 Blob 请求 | 高级块 blob 标准常规用途 v2 |
其他操作 |
预检 Blob 请求 | 标准常规用途 v1 | 读取操作 |
若要了解指定计费类别的定价,请参阅Azure Blob 存储定价。