Preflight Blob Request

The Preflight Blob Request operation queries the Cross-Origin Resource Sharing (CORS) rules for Azure Blob Storage before sending the request.

A web browser or another user agent sends a preflight request that includes the origin domain, method, and headers for the request that the agent wants to make. If CORS is enabled for Blob Storage, then Blob Storage evaluates the preflight request against the CORS rules that the account owner has configured via Set Blob Service Properties. Blob Storage then accepts or rejects the request.

For more information about CORS and the preflight request, see the CORS specification and CORS support for Azure Storage.

Request

You can specify Preflight Blob Request as follows. Replace <account-name> with the name of your storage account. Replace <blob-resource> with the container or blob resource that will be the target of the request.

HTTP verb Request URI HTTP version
OPTIONS http://<account-name>.blob.core.windows.net/<blob-resource> HTTP/1.1

The URI must always include the forward slash (/) to separate the host name from the path and query portions of the URI. In the case of this operation, the path portion of the URI can be empty, or it can point to any container or blob resource.

The resource might or might not exist at the time that the preflight request is made. The preflight request is evaluated at the service level against the service's CORS rules, so the presence or absence of the resource name does not affect the success or failure of the operation.

URI parameters

None.

Request headers

The following table describes required and optional request headers:

Request header Description
Origin Required. Specifies the origin from which the request will be issued. The origin is checked against the service's CORS rules to determine the success or failure of the preflight request.
Access-Control-Request-Method Required. Specifies the method (or HTTP verb) for the request. The method is checked against the service's CORS rules to determine the failure or success of the preflight request.
Access-Control-Request-Headers Optional. Specifies the request headers that will be sent. If it's not present, the service assumes that the request doesn't include headers.

Request body

None.

Response

The response includes an HTTP status code and a set of response headers.

Status code

A successful operation returns status code 200 (OK).

For information about status codes, see Status and error codes.

Response headers

The response for this operation includes the following headers. The response might also include additional standard HTTP headers. All standard headers conform to the HTTP/1.1 protocol specification.

For details about preflight request headers, see the CORS specification.

Response header Description
Access-Control-Allow-Origin Indicates the allowed origin, which matches the origin header in the request if the preflight request succeeds.
Access-Control-Allow-Methods If the preflight request succeeds, this header is set to the value or values specified for the request header Access-Control-Request-Method.
Access-Control-Allow-Headers If the preflight request succeeds, this header is set to the value or values specified for the request header Access-Control-Request-Headers.
Access-Control-Max-Age Specifies the length of time that the user agent is allowed to cache the preflight request for future requests.
Access-Control-Allow-Credentials Indicates whether the request can be made through credentials. This header is always set to true.

Response body

None.

Authorization

The Preflight Blob Request operation always executes anonymously. It does not require authorization, and it ignores credentials if they're provided.

Note

If you have enabled Azure Storage analytics and are logging metrics, a call to the Preflight Blob Request operation is logged as AnonymousSuccess. For this reason, if you view metrics in the Azure portal, you'll see AnonymousSuccess logged for Preflight Blob Request. This metric does not indicate that your private data has been compromised, but only that the Preflight Blob Request operation succeeded with a status code of 200 (OK).

Sample request and response

The following example sends a preflight request for the origin www.contoso.com. The request method is set to PUT, and the request headers are set to content-type and 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  
  

The response indicates that CORS is enabled for the service, and that a CORS rule matches the preflight request:

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  
  

Remarks

If CORS is enabled for the service and a CORS rule matches the preflight request, the service responds to the preflight request with status code 200 (OK). The response includes the required Access-Control headers. In this case, the request is billed.

If CORS is not enabled or no CORS rule matches the preflight request, the service responds with status code 403 (Forbidden). In this case, the request is not billed.

If the OPTIONS request is malformed, the service responds with status code 400 (Bad Request) and the request is not billed. An example of a malformed request is one that doesn't contain the required Origin and Access-Control-Request-Method headers.

The preflight request is a mechanism to query the CORS capability of a storage service that's associated with a certain storage account. The preflight request is not targeted to a specific resource.

Billing

Pricing requests can originate from clients that use Blob Storage APIs, either directly through the Blob Storage REST API, or from an Azure Storage client library. These requests accrue charges per transaction. The type of transaction affects how the account is charged. For example, read transactions accrue to a different billing category than write transactions. The following table shows the billing category for Preflight Blob Request requests based on the storage account type:

Operation Storage account type Billing category
Preflight Blob Request Premium block blob
Standard general-purpose v2
Other operations
Preflight Blob Request Standard general-purpose v1 Read operations

To learn about pricing for the specified billing category, see Azure Blob Storage Pricing.

See also

Operations on the account (Blob Storage)
CORS support for Azure Storage