Définition des propriétés du service de File d'attenteSet Queue Service Properties

L' Set Queue Service Properties opération définit les propriétés du point de terminaison service de file d’attente d’un compte de stockage, notamment les propriétés des règles de Storage Analytics et de cors (partage des ressources Cross-Origin).The Set Queue Service Properties operation sets properties for a storage account’s Queue service endpoint, including properties for Storage Analytics and CORS (Cross-Origin Resource Sharing) rules. Pour plus d’informations sur les règles CORS, consultez prise en charge de cors pour les services de stockage .See CORS Support for the Storage Services for more information on CORS rules.

RequêteRequest

La demande Set Queue Service Properties peut être spécifiée comme suit.The Set Queue Service Properties request may be specified as follows. HTTPS est recommandé.HTTPS is recommended. Remplacez <account-name> par le nom de votre compte de stockage :Replace <account-name> with the name of your storage account:

MéthodeMethod URI de demandeRequest URI Version HTTPHTTP Version
PUTPUT https://<account-name>.queue.core.windows.net/?restype=service&comp=properties HTTP/1.1HTTP/1.1

Notez que l'URI doit toujours inclure la barre oblique (/) pour séparer le nom d'hôte du chemin d'accès et les portions de requête de l'URI.Note that the URI must always include the forward slash (/) to separate the host name from the path and query portions of the URI. Dans le cadre de cette opération, la partie de chemin d'accès de l'URI est vide.In the case of this operation, the path portion of the URI is empty.

Paramètres URIURI Parameters

ParamètreParameter DescriptionDescription
restype=service&comp=properties Obligatoire.Required. La combinaison des deux chaînes de requête est requise pour définir les propriétés de service de stockage.The combination of both query strings is required to set the storage service properties.
timeout facultatif.Optional. Le paramètre timeout est exprimé en secondes.The timeout parameter is expressed in seconds. Pour plus d’informations, consultez définition de délais d’attente pour les opérations de service de file d’attente.For more information, see Setting Timeouts for Queue Service Operations.

En-têtes de requêteRequest Headers

Le tableau suivant décrit les en-têtes de demande obligatoires ou facultatifs.The following table describes required and optional request headers.

En-tête de la demandeRequest Header DescriptionDescription
Authorization Obligatoire.Required. Spécifie le schéma d’autorisation, le nom du compte de stockage et la signature.Specifies the authorization scheme, storage account name, and signature. Pour plus d’informations, consultez autoriser les demandes dans le stockage Azure.For more information, see Authorize requests to Azure Storage.
Date ou x-ms-dateDate or x-ms-date Obligatoire.Required. Spécifie la date/heure en temps universel coordonné (UTC) pour la requête.Specifies the Coordinated Universal Time (UTC) for the request. Pour plus d’informations, consultez autoriser les demandes dans le stockage Azure.For more information, see Authorize requests to Azure Storage.
x-ms-version Obligatoire pour toutes les demandes autorisées.Required for all authorized requests. Spécifie la version de l'opération à utiliser pour cette demande.Specifies the version of the operation to use for this request. Pour plus d’informations, consultez contrôle de version pour les services de stockage Azure.For more information, see Versioning for the Azure Storage Services.
x-ms-client-request-id facultatif.Optional. Fournit une valeur opaque générée par le client avec une limite de 1 Kio de caractères qui est enregistrée dans les journaux d’analyse lorsque la journalisation de l’analyse de stockage est activée.Provides a client-generated, opaque value with a 1 KiB character limit that is recorded in the analytics logs when storage analytics logging is enabled. L’utilisation de cet en-tête est fortement recommandée pour la mise en corrélation des activités côté client avec les requêtes reçues par le serveur.Using this header is highly recommended for correlating client-side activities with requests received by the server. Pour plus d’informations, consultez à propos de la journalisation des Storage Analytics et de la journalisation Azure : utilisation des journaux pour suivre les demandes de stockage.For more information, see About Storage Analytics Logging and Azure Logging: Using Logs to Track Storage Requests.

Corps de la demandeRequest Body

Le format du corps de la demande pour la version 2012-02-12 et les versions antérieures est le suivant :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>  

Le format du corps de la demande pour la version 2013-08-15 et ultérieure est le suivant :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-seperated-list-of-response-headers</ExposedHeaders>  
            <AllowedHeaders> comma-seperated-list-of-request-headers </AllowedHeaders>  
        </CorsRule>  
    </Cors>  
</StorageServiceProperties>  

À partir de la version 2013-08-15, vous pouvez appeler Set Queue Service Properties avec un ou plusieurs éléments racine spécifiés dans le corps de la demande.Beginning with version 2013-08-15, you can call Set Queue Service Properties with one or more root elements specified in the request body. Les éléments racine incluent :The root elements include:

  • LoggingLogging

  • HourMetricsHourMetrics

  • MinuteMetricsMinuteMetrics

  • CorsCors

Il n'est plus nécessaire de spécifier chaque élément racine sur la demande.It is no longer necessary to specify every root element on the request. Si vous omettez un élément racine, les paramètres existants pour le service de cette fonctionnalité sont conservés.If you omit a root element, the existing settings for the service for that functionality are preserved. Toutefois, si vous spécifiez un élément racine donné, vous devez spécifier chaque élément enfant de cet élément.However, if you do specify a given root element, you must specify every child element for that element.

Le tableau suivant décrit les éléments du corps de la demande :The following table describes the elements of the request body:

Nom de l’élémentElement Name DescriptionDescription
LoggingLogging Paramètre facultatif à compter de la version 2013-08-15.Optional beginning with version 2013-08-15. Obligatoire pour les versions antérieures.Required for earlier versions. Regroupe les paramètres de journalisation d'analyse Azure.Groups the Azure Analytics Logging settings.
MétriquesMetrics Obligatoire pour la version 2012-02-12 et les versions antérieures.Required for version 2012-02-12 and earlier. Ne s'applique pas à la version 2013-08-15 ou version ultérieure.Not applicable for version 2013-08-15 or later. Regroupe les paramètres Metrics d'analyse Azure.Groups the Azure Analytics Metrics settings. Les paramètres Metrics fournissent un résumé des statistiques de demande regroupées par l'API en agrégats horaires des files d'attente.The Metrics settings provide a summary of request statistics grouped by API in hourly aggregates for queues.
HourMetricsHourMetrics Facultatif pour la version 2013-08-15 ou version ultérieure ; ne s'applique pas aux versions antérieures.Optional for version 2013-08-15 or later; not applicable for earlier versions. Regroupe les paramètres HourMetrics d'analyse Azure.Groups the Azure Analytics HourMetrics settings. Les paramètres HourMetrics fournissent un résumé des statistiques de demande regroupées par l'API en agrégats horaires des files d'attente.The HourMetrics settings provide a summary of request statistics grouped by API in hourly aggregates for queues.
MinuteMetricsMinuteMetrics Facultatif pour la version 2013-08-15 ou version ultérieure ; ne s'applique pas aux versions antérieures.Optional for version 2013-08-15 or later; not applicable for earlier versions. Regroupe les paramètres MinuteMetrics d'analyse Azure.Groups the Azure Analytics MinuteMetrics settings. Les paramètres MinuteMetrics fournissent des statistiques de demande pour chaque minutes des files d'attente.The MinuteMetrics settings provide request statistics for each minute for queues. Pour les versions antérieures à la version à 2013-08-15, MinuteMetrics n'est pas inclus dans le corps de la réponse.For versions earlier than 2013-08-15, MinuteMetrics is not included in the response body.
VersionVersion Obligatoire si les paramètres Logging, Metrics, HourMetrics ou MinuteMetrics sont spécifiés.Required if Logging, Metrics, HourMetrics, or MinuteMetrics settings are specified. La version de Storage Analytics à configurer.The version of Storage Analytics to configure.
SupprimerDelete Obligatoire si les paramètres Logging, Metrics, HourMetrics ou MinuteMetrics sont spécifiés.Required if Logging, Metrics, HourMetrics, or MinuteMetrics settings are specified. S'applique uniquement à la configuration de journalisation.Applies only to logging configuration. Indique si toutes les demandes de suppression doivent être journalisées.Indicates whether all delete requests should be logged.
LectureRead Obligatoire si les paramètres Logging, Metrics, HourMetrics ou MinuteMetrics sont spécifiés.Required if Logging, Metrics, HourMetrics, or MinuteMetrics settings are specified. S'applique uniquement à la configuration de journalisation.Applies only to logging configuration. Indique si toutes les demandes de lecture doivent être journalisées.Indicates whether all read requests should be logged.
ÉcritureWrite Obligatoire si les paramètres Logging, Metrics, HourMetrics ou MinuteMetrics sont spécifiés.Required if Logging, Metrics, HourMetrics, or MinuteMetrics settings are specified. S'applique uniquement à la configuration de journalisation.Applies only to logging configuration. Indique si toutes les demandes d'écriture doivent être journalisées.Indicates whether all write requests should be logged.
ActivéEnabled Obligatoire.Required. Indique si les métriques sont activées pour le service de File d'attente.Indicates whether metrics are enabled for the Queue service.

Si la réplication géographique redondante avec accès en lecture est activée, les métriques primaires et secondaires sont collectées.If read-access geo-redundant replication is enabled, both primary and secondary metrics are collected. Si la réplication géographique redondante avec accès en lecture n'est pas activée, seules les métriques primaires sont collectées.If read-access geo-redundant replication is not enabled, only primary metrics are collected.
IncludeAPIsIncludeAPIs Obligatoire uniquement si les métriques sont activées.Required only if metrics are enabled. S'applique uniquement à la configuration des métriques.Applies only to metrics configuration. Indique si les métriques doivent générer des statistiques de synthèse pour les opérations d'API appelées.Indicates whether metrics should generate summary statistics for called API operations.
RetentionPolicy/EnabledRetentionPolicy/Enabled Obligatoire.Required. Indique si une stratégie de rétention est activée pour le service de stockage.Indicates whether a retention policy is enabled for the storage service.
RetentionPolicy/DaysRetentionPolicy/Days Obligatoire uniquement si une stratégie de rétention est activée.Required only if a retention policy is enabled. Indique le nombre de jours pendant lesquels les métriques ou les données de journalisation doivent être conservées.Indicates the number of days that metrics or logging data should be retained. Toutes les données plus anciennes que cette valeur seront supprimées.All data older than this value will be deleted. La valeur minimale que vous pouvez spécifier est 1 ; la plus grande valeur est 365 (un an).The minimum value you can specify is 1; the largest value is 365 (one year).
CorsCors facultatif.Optional. L'élément Cors est pris en charge pour la version 2013-08-15 ou version ultérieure.The Cors element is supported for version 2013-08-15 or later. Regroupe toutes les règles CORS.Groups all CORS rules.

Si cet élément n'est pas spécifié, le regroupement ne remplace pas les paramètres CORS existants.Omitting this element group will not overwrite existing CORS settings.
CorsRuleCorsRule facultatif.Optional. Spécifie une règle CORS pour le service de File d'attente.Specifies a CORS rule for the Queue service. Incluez jusqu'à cinq éléments CorsRule dans la requête.You can include up to five CorsRule elements in the request. Si aucun élément CorsRule n'est inclus dans le corps de la requête, toutes les règles CORS sont supprimées, et les règles CORS sont désactivées pour le service de File d'attente.If no CorsRule elements are included in the request body, all CORS rules will be deleted, and CORS will be disabled for the Queue service.
AllowedOriginsAllowedOrigins Obligatoire si l'élément CorsRule est présent.Required if CorsRule element is present. Liste séparée par des virgules de domaines d'origine qui sont autorisés via les règles CORS, ou « * » si tous les domaines sont autorisés.A comma-separated list of origin domains that will be allowed via CORS, or "*" to allow all domains. Limitée à 64 domaines d'origine.Limited to 64 origin domains. Chaque origine autorisée peut comporter jusqu'à 256 caractères.Each allowed origin can have up to 256 characters.
ExposedHeadersExposedHeaders Obligatoire si l'élément CorsRule est présent.Required if CorsRule element is present. Liste séparée par des virgules d'en-têtes de réponse à exposer aux clients CORS.A comma-separated list of response headers to expose to CORS clients. Limitée à 64 en-têtes définis et deux en-têtes avec préfixe.Limited to 64 defined headers and two prefixed headers. Chaque en-tête peut comporter jusqu'à 256 caractères.Each header can be up to 256 characters.
MaxAgeInSecondsMaxAgeInSeconds Obligatoire si l'élément CorsRule est présent.Required if CorsRule element is present. Nombre de secondes pendant lesquelles le client/navigateur doit mettre en cache une réponse préliminaire.The number of seconds that the client/browser should cache a preflight response.
AllowedHeadersAllowedHeaders Obligatoire si l'élément CorsRule existe.Required if CorsRule element exists. Liste séparée par des virgules d'en-têtes autorisés à faire partie de la demande cross-origin.A comma-separated list of headers allowed to be part of the cross-origin request. Limitée à 64 en-têtes définis et deux en-têtes avec préfixe.Limited to 64 defined headers and 2 prefixed headers. Chaque en-tête peut comporter jusqu'à 256 caractères.Each header can be up to 256 characters.
AllowedMethodsAllowedMethods Obligatoire si l'élément CorsRule existe.Required if CorsRule element exists. Liste séparée par des virgules de méthodes HTTP qui sont autorisées à être exécutées par l'origine.A comma-separated list of HTTP methods that are allowed to be executed by the origin. Pour le stockage Azure, les méthodes autorisées sont DELETE, GET, HEAD, MERGE, POST, OPTIONS ou PUT.For Azure Storage, permitted methods are DELETE, GET, HEAD, MERGE, POST, OPTIONS or PUT.

responseResponse

La réponse inclut un code d'état HTTP et un ensemble d'en-têtes de réponse.The response includes an HTTP status code and a set of response headers.

Code d’étatStatus Code

Une opération réussie renvoie le code d'état 202 (Accepté).A successful operation returns status code 202 (Accepted).

En-têtes de réponseResponse Headers

La réponse de l'opération inclut les en-têtes suivants.The response for this operation includes the following headers. La réponse peut aussi inclure des en-têtes HTTP standard supplémentaires.The response may also include additional standard HTTP headers. Tous les en-têtes standard sont conformes à la spécification du protocole HTTP/1.1.All standard headers conform to the HTTP/1.1 protocol specification.

En-tête de réponseResponse Header DescriptionDescription
x-ms-request-id Une valeur qui identifie de façon unique une demande faite au service.A value that uniquely identifies a request made against the service.
x-ms-version Spécifie la version de l'opération utilisée pour la réponse.Specifies the version of the operation used for the response. Pour plus d’informations, consultez contrôle de version pour les services de stockage Azure.For more information, see Versioning for the Azure Storage Services.
x-ms-client-request-id Cet en-tête peut être utilisé pour dépanner les demandes et les réponses correspondantes.This header can be used to troubleshoot requests and corresponding responses. La valeur de cet en-tête est égale à la valeur de l' x-ms-client-request-id en-tête si elle est présente dans la demande et que la valeur est supérieure à 1024 caractères ASCII visibles.The value of this header is equal to the value of the x-ms-client-request-id header if it is present in the request and the value is at most 1024 visible ASCII characters. Si l' x-ms-client-request-id en-tête n’est pas présent dans la demande, cet en-tête ne sera pas présent dans la réponse.If the x-ms-client-request-id header is not present in the request, this header will not be present in the response.

Corps de la réponseResponse Body

Aucun.None.

AutorisationAuthorization

Seul le propriétaire du compte peut appeler cette opération.Only the account owner may call this operation.

RemarquesRemarks

Les restrictions et limitations suivantes s'appliquent aux règles CORS du stockage Azure :The following restrictions and limitations apply to CORS rules in Azure Storage:

  • Il ne peut pas y avoir plus de cinq règles enregistrées.A maximum of five rules can be stored.

  • La taille maximale de tous les paramètres de règles CORS sur la demande, à l’exception des balises XML, ne doit pas dépasser 2 Kio.The maximum size of all CORS rules settings on the request, excluding XML tags, should not exceed 2 KiB.

  • La longueur d'un en-tête autorisé, d'un en-tête exposé ou d'une origine autorisée ne doit pas dépasser 256 caractères.The length of an allowed header, exposed header, or allowed origin should not exceed 256 characters.

  • Les en-têtes autorisés et les en-têtes exposés peuvent être :Allowed headers and exposed headers may be either:

    • des en-têtes littéraux, où le nom exact de l’en-tête est spécifié, tel que x-ms-meta-processed.Literal headers, where the exact header name is provided, such as x-ms-meta-processed. Il ne peut pas y avoir plus de 64 en-têtes littéraux spécifiés sur la demande ;A maximum of 64 literal headers may be specified on the request.

    • En-têtes préfixés, où un préfixe de l’en-tête est fourni, tel que x- * MS-Meta-Data.Prefixed headers, where a prefix of the header is provided, such as x-ms-meta-data*. Le fait de spécifier un préfixe de cette façon autorise ou expose tout en-tête qui commence par le préfixe donné.Specifying a prefix in this manner allows or exposes any header that begins with the given prefix. Il ne peut pas y avoir plus de deux en-têtes préfixés spécifiés sur la demande.A maximum of two prefixed headers may be specified on the request.

  • Les méthodes (ou verbes HTTP) spécifiées dans l’élément AllowedMethods doivent respecter les méthodes prises en charge par les API de service de stockage Azure.The methods (or HTTP verbs) specified in the AllowedMethods element must conform to the methods supported by Azure storage service APIs. Les méthodes prises en charge sont DELETE, GET, HEAD, MERGE, POST, OPTIONS et PUT.Supported methods are DELETE, GET, HEAD, MERGE, POST, OPTIONS and PUT.

La spécification de règles CORS sur la demande est facultative.Specifying CORS rules on the request is optional. Si vous appelez Set Queue Service Properties sans spécifier l'élément Cors dans le corps de la requête, toutes les règles CORS existantes sont conservées.If you call Set Queue Service Properties without specifying the Cors element in the request body, any existing CORS rules are maintained.

Pour désactiver les règles CORS, appelez Set Queue Service Properties avec un paramètre de règles CORS vide (c.-à-d.,</Cors>) et aucune règle CORS interne.To disable CORS, call Set Queue Service Properties with an empty CORS rules settings (i.e.,</Cors>) and no inner CORS rules. Cet appel supprime toutes les règles existantes, ce qui désactive les règles CORS pour le service de File d'attente.This call deletes any existing rules, disabling CORS for the Queue service.

Tous les éléments de règle CORS sont requis si l’élément CorsRule est spécifié.All CORS rule elements are required if the CorsRule element is specified. La demande échoue avec le code d'erreur 400 (Bad Request) si un élément est manquant.The request will fail with error code 400 (Bad Request) if any element is missing.

Avec la version 2013-08-15, les éléments de paramètres XML sont facultatifs ; par conséquent, la mise à jour d'un élément spécifique peut être effectuée en envoyant un paramètre XML qui contient uniquement l'élément mis à jour et les autres paramètres ne sont pas affectés.Beginning with version 2013-08-15, XML settings elements will be optional so updating a specific element can be done by sending an XML that only contains the updated element and other settings will not be affected.

Pour plus d’informations sur les règles CORS et la logique d’évaluation, consultez prise en charge de cors pour les services de stockage.For detailed information about CORS rules and evaluation logic, see CORS Support for the Storage Services.

Exemple de demande et de réponseSample Request and Response

L'exemple d'URI suivant effectue une demande pour modifier les propriétés du service de File d'attente pour le compte de stockage fictif nommé myaccount:The following sample URI makes a request to change the Queue service properties for the fictional storage account named myaccount:

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

La demande est envoyée avec les en-têtes suivants :The request is sent with the following headers:

x-ms-version: 2013-08-15  
x-ms-date: Wed, 23 Oct 2013 04:28:19 GMT  
Authorization: SharedKey  
myaccount:Z1lTLDwtq5o1UYQluucdsXk6/iB7YxEu0m6VofAEkUE=  
Host: myaccount.queue.core.windows.net  

La demande est envoyée avec le corps XML suivant :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>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> 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>  
  

Une fois la demande envoyée, la réponse suivante est renvoyée :After the request has been sent, the following response is returned:

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

Voir aussiSee Also

En-têtes HTTP améliorés pour la reprise au téléchargement et une modification dans les conditions If-Match Improved HTTP Headers for Resume on Download and a Change in If-Match Conditions
Prise en charge de CORS pour les services de stockage CORS Support for the Storage Services
Spécification HTTP CORSCORS HTTP specification