Set Table Service Properties

The Set Table Service Properties operation sets properties for a storage account's Azure Table Storage endpoint, including properties for Storage Analytics and Cross-Origin Resource Sharing (CORS) rules. For more information on CORS rules, see CORS support for the Azure Storage services.

Request

You can specify the Set Table Service Properties request as follows. We recommend HTTPS. Replace account-name with the name of your storage account.

Method Request URI HTTP version
PUT https://account-name.table.core.windows.net/?restype=service&comp=properties HTTP/1.1

Note that 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 is empty.

URI parameters

URI parameter Description
restype=service&comp=properties Required. The combination of both query strings is required to set the properties for the Azure Storage service.
timeout Optional. The timeout parameter is expressed in seconds.

Request headers

The following table describes required and optional request headers:

Request header Description
Authorization Required. Specifies the authorization scheme, storage account name, and signature. For more information, see Authorize requests to Azure Storage.
Date or x-ms-date Required. Specifies the Coordinated Universal Time (UTC) for the request. For more information, see Authorize requests to Azure Storage.
x-ms-version Required for all authorized requests. Specifies the version of the operation to use for this request. For more information, see Versioning for the Azure Storage services.
x-ms-client-request-id Optional. Provides a client-generated, opaque value with a 1-kibibyte (KiB) character limit that's recorded in the logs when logging is configured. We highly recommend that you use this header to correlate client-side activities with requests that the server receives.

Request body

For version 2012-02-12 and earlier, the format of the request body is as follows:

<?xml version="1.0" encoding="utf-8"?>  
<StorageServiceProperties>  
    <Logging>  
        <Version>version-number</Version>  
        <Delete>true|false</Delete>  
        <Read>true|false</Read>  
        <Write>true|false</Write>  
        <RetentionPolicy>  
            <Enabled>true|false</Enabled>  
            <Days>number-of-days</Days>  
        </RetentionPolicy>  
    </Logging>  
    <Metrics>  
        <Version>version-number</Version>  
        <Enabled>true|false</Enabled>  
        <IncludeAPIs>true|false</IncludeAPIs>  
        <RetentionPolicy>  
            <Enabled>true|false</Enabled>  
            <Days>number-of-days</Days>  
        </RetentionPolicy>  
    </Metrics>  
</StorageServiceProperties>  

For version 2013-08-15 and later, the format of the request body is as follows:

<?xml version="1.0" encoding="utf-8"?>  
<StorageServiceProperties>  
    <Logging>  
        <Version>version-number</Version>  
        <Delete>true|false</Delete>  
        <Read>true|false</Read>  
        <Write>true|false</Write>  
        <RetentionPolicy>  
            <Enabled>true|false</Enabled>  
            <Days>number-of-days</Days>  
        </RetentionPolicy>  
    </Logging>  
    <HourMetrics>  
        <Version>version-number</Version>  
        <Enabled>true|false</Enabled>  
        <IncludeAPIs>true|false</IncludeAPIs>  
        <RetentionPolicy>  
            <Enabled>true|false</Enabled>  
            <Days>number-of-days</Days>  
        </RetentionPolicy>  
    </HourMetrics>  
    <MinuteMetrics>  
        <Version>version-number</Version>  
        <Enabled>true|false</Enabled>  
        <IncludeAPIs>true|false</IncludeAPIs>  
        <RetentionPolicy>  
            <Enabled>true|false</Enabled>  
            <Days>number-of-days</Days>  
        </RetentionPolicy>  
    </MinuteMetrics>  
    <Cors>  
        <CorsRule>  
            <AllowedOrigins>comma-separated-list-of-allowed-origins</AllowedOrigins>  
            <AllowedMethods>comma-separated-list-of-HTTP-verb</AllowedMethods>  
            <MaxAgeInSeconds>max-caching-age-in-seconds</MaxAgeInSeconds>  
            <ExposedHeaders>comma-separated-list-of-response-headers</ExposedHeaders>  
            <AllowedHeaders> comma-separated-list-of-request-headers </AllowedHeaders>  
        </CorsRule>  
    </Cors>  
</StorageServiceProperties>  

Beginning with version 2013-08-15, you can call Set Table Service Properties with one or more root elements specified in the request body. The root elements include:

  • Logging

  • HourMetrics

  • MinuteMetrics

  • Cors

It's no longer necessary to specify every root element on the request. If you omit a root element, the existing settings for the service for that functionality are preserved. But if you do specify a root element, you must specify every child element for that element.

The following table describes the elements of the request body:

Element name Description
Logging Optional for version 2013-08-15 and later. Required for earlier versions. Groups the Storage Analytics Logging settings.
Metrics Required for version 2012-02-12 and earlier. Not applicable for version 2013-08-15 and later. Groups the Storage Analytics Metrics settings. The Metrics settings provide a summary of request statistics grouped by API in hourly aggregates for tables.
HourMetrics Optional for version 2013-08-15 and later. Not applicable for earlier versions. Groups the Storage Analytics HourMetrics settings. The HourMetrics settings provide a summary of request statistics grouped by API in hourly aggregates for tables.
MinuteMetrics Optional for version 2013-08-15 and later. Not applicable for earlier versions. Groups the Storage Analytics MinuteMetrics settings. The MinuteMetrics settings provide request statistics for each minute for tables. For versions earlier than 2013-08-15, MinuteMetrics is not included in the response body.
Version Required. Indicates the version of Storage Analytics to configure.
Delete Required. Applies only to logging configuration. Indicates whether all delete requests should be logged.
Read Required. Applies only to logging configuration. Indicates whether all read requests should be logged.
Write Required. Applies only to logging configuration. Indicates whether all write requests should be logged.
Enabled Required. Indicates whether metrics are enabled for the Azure Storage service.

If read-access geo-redundant replication is enabled, both primary and secondary metrics are collected. If read-access geo-redundant replication is not enabled, only primary metrics are collected.
IncludeAPIs Required only if metrics are enabled. Applies only to metrics configuration. Indicates whether metrics should generate summary statistics for called API operations.
RetentionPolicy/Enabled Required. Indicates whether a retention policy is enabled for the Azure Storage service.
RetentionPolicy/Days Required only if a retention policy is enabled. Indicates the number of days that metrics or logging data should be retained. All data older than this value will be deleted. The minimum value that you can specify is 1. The largest value is 365 (one year).
Cors Optional. Supported for version 2013-08-15 and later. Groups all CORS rules.

Omitting this element group will not overwrite existing CORS settings.
CorsRule Optional. Specifies a CORS rule for Table Storage. You can include up to five CorsRule elements in the request. If no CorsRule elements are included in the request body, all CORS rules will be deleted, and CORS will be disabled for Table Storage.
AllowedOrigins Required if CorsRule element is present. Provides a comma-separated list of origin domains that will be allowed via CORS, or contains * to allow all domains. An origin domain might also include a wildcard character in the subdomain to permit requests via CORS for all subdomains of a domain. Limited to 64 origin domains. Each allowed origin can have up to 256 characters.
ExposedHeaders Required if the CorsRule element is present. Provides a comma-separated list of response headers to expose to CORS clients. Limited to 64 defined headers and two prefixed headers. Each header can be up to 256 characters.
MaxAgeInSeconds Required if the CorsRule element is present. Indicates the number of seconds that the client or browser should cache a preflight response.
AllowedHeaders Required if the CorsRule element exists. Provides a comma-separated list of headers allowed to be part of the cross-origin request. Limited to 64 defined headers and 2 prefixed headers. Each header can be up to 256 characters.
AllowedMethods Required if the CorsRule element exists. Provides a comma-separated list of HTTP methods that the origin is allowed to execute. For Azure Storage, permitted methods are DELETE, GET, HEAD, MERGE, POST, OPTIONS, and PUT.

Response

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

Status code

A successful operation returns status code 202 (Accepted).

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.

Response header Description
x-ms-request-id Specifies a value that uniquely identifies a request made against the service.
x-ms-version Specifies the version of the operation used for the response. For more information, see Versioning for the Azure Storage services.
x-ms-client-request-id Can be used to troubleshoot requests and corresponding responses. The value of this header is equal to the value of the x-ms-client-request-id header, if it's present in the request and the value is at most 1,024 visible ASCII characters. If the x-ms-client-request-id header is not present in the request, this header won't be present in the response.

Response body

None.

Authorization

Only the account owner can call this operation.

Remarks

The following restrictions and limitations apply to CORS rules in Azure Storage:

  • You can store a maximum of five rules.

  • The maximum size of all CORS rule settings on the request, excluding XML tags, should not exceed 2 KiB.

  • The length of an allowed header, exposed header, or allowed origin should not exceed 256 characters.

  • Allowed headers and exposed headers can be either:

    • Literal headers where the exact header name is provided, such as x-ms-meta-processed. You can specify a maximum of 64 literal headers on the request.

    • Prefixed headers where a prefix of the header is provided, such as x-ms-meta-data\. Specifying a prefix in this way allows or exposes any header that begins with that prefix. You can specify a maximum of two prefixed headers on the request.

  • The methods (or HTTP verbs) specified in the AllowedMethods element must conform to the methods that the Azure Storage service APIs support. Supported methods are DELETE, GET, HEAD, MERGE, POST, OPTIONS, and PUT.

Specifying CORS rules on the request is optional. If you call Set Table Service Properties without specifying the Cors element in the request body, any existing CORS rules are maintained.

To disable CORS, call Set Table Service Properties with empty CORS rules settings (for example, </Cors>) and no inner CORS rules. This call deletes any existing rules and disables CORS for Table Storage.

All CORS rule elements are required if you specify the CorsRule element. If any element is missing, the request will fail with error code 400 (Bad Request).

Beginning with version 2013-08-15, elements for XML settings are optional. You can update a specific element by sending XML that contains only the updated element and doesn't affect other settings.

For detailed information about CORS rules and evaluation logic, see CORS support for the Azure Storage services.

Sample request and response

The following sample URI makes a request to change the Table Storage properties for the fictional storage account named myaccount:

PUT https://myaccount.table.core.windows.net/?restype=service&comp=properties HTTP/1.1  

The request is sent with the following headers:

x-ms-version: 2013-08-15  
x-ms-date: Mon, 21 Oct 2013 04:38:23 GMT  
Authorization: SharedKey  
myaccount:Z1lTLDwtq5o1UYQluucdsXk6/iB7YxEu0m6VofAEkUE=  
Host: myaccount.table.core.windows.net  

The request is sent with the following XML body:

<?xml version="1.0" encoding="utf-8"?>  
<StorageServiceProperties>  
    <Logging>  
        <Version>1.0</Version>  
        <Delete>true</Delete>  
        <Read>false</Read>  
        <Write>true</Write>  
        <RetentionPolicy>  
            <Enabled>true</Enabled>  
            <Days>7</Days>  
        </RetentionPolicy>  
    </Logging>  
    <HourMetrics>  
        <Version>1.0</Version>  
        <Enabled>true</Enabled>  
        <IncludeAPIs>false</IncludeAPIs>  
        <RetentionPolicy>  
            <Enabled>true</Enabled>  
            <Days>7</Days>  
        </RetentionPolicy>  
    </HourMetrics>  
    <MinuteMetrics>  
        <Version>1.0</Version>  
        <Enabled>true</Enabled>  
        <IncludeAPIs>true</IncludeAPIs>  
        <RetentionPolicy>  
            <Enabled>true</Enabled>  
            <Days>7</Days>  
        </RetentionPolicy>  
    </MinuteMetrics>  
    <Cors>  
        <CorsRule>  
            <AllowedOrigins> http://www.fabrikam.com,http://www.contoso.com</AllowedOrigins>  
            <AllowedMethods>GET,PUT</AllowedMethods>  
            <MaxAgeInSeconds>500</MaxAgeInSeconds>  
            <ExposedHeaders>x-ms-meta-data*,x-ms-meta-customheader</ExposedHeaders>  
            <AllowedHeaders>x-ms-meta-target*,x-ms-meta-customheader</AllowedHeaders>  
        </CorsRule>  
    </Cors>  
</StorageServiceProperties>  
  

After the request is sent, the following response is returned:

HTTP/1.1 202 Accepted  
Connection: Keep-Alive  
Transfer-Encoding: chunked  
Date: Mon, 21 Oct 2013 04:38:24 GMT  
Server: Windows-Azure-Table/1.0 Microsoft-HTTPAPI/2.0  
x-ms-request-id: cb939a31-0cc6-49bb-9fe5-3327691f2a30  
x-ms-version: 2013-08-15  
  

See also