Чтобы загрузить конфигурацию CORS, нужно сформировать XML-документ.
Список методов для конфигураций CORS бакета:
- Get Bucket CORS — получить список конфигураций CORS для бакета.
- Set Bucket CORS — установить конфигурацию CORS.
- Delete Bucket CORS — удалить конфигурацию CORS.
Общий вид XML конфигурации CORS
1<CORSConfiguration>
2 <CORSRule>
3 <AllowedOrigin>URL</AllowedOrigin>
4 <AllowedMethod>HTTP_Method</AllowedMethod>
5 <AllowedHeader>Header_Name</AllowedHeader>
6 ...
7 </CORSRule>
8 ...
9</CORSConfiguration>
Get Bucket CORS
С помощью этой операции можно вернуть информацию по конфигурации CORS, установленной для бакета.
Для выполнения данной операцией нужно обладать правами на запись WRITE_ACP. Автоматически владелец бакета имеет это разрешение, а также может предоставлять его другим пользователям.
Запрос:
GET /?cors HTTP/1.1
Host: my-test-bucket1.hb.bizmrg.com
x-amz-content-sha256: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
x-amz-date: 20200831T185319Z
Authorization: AWS4-HMAC-SHA256 Credential=II5JDQBAN3JYM4DNEB6C/20200831/ru-msk/s3/aws4_request,SignedHeaders=host;x-amz-content-sha256;x-amz-date,Signature=f7d7879992a9f3a06ddacd59e53ac318e99b2ed6230692b30099739e34469a91
Ответ:
1HTTP/1.1 200 OK
2Date: Mon, 31 Aug 2020 18:53:20 GMT
3x-amz-request-id: tx00000000000000279651f-005963cd20-1268c-ru-mska
4Content-Type: application/xml
5Content-Length: 430
6Connection: close
7
8<CORSConfiguration xmlns="https://s3.amazonaws.com/doc/2006-03-01/">
9 <CORSRule>
10 <AllowedMethod>PUT</AllowedMethod>
11 <AllowedMethod>DELETE</AllowedMethod>
12 <AllowedMethod>POST</AllowedMethod>
13 <AllowedOrigin>https://example.com</AllowedOrigin>
14 <AllowedHeader>\*</AllowedHeader>
15 </CORSRule>
16 <CORSRule>
17 <AllowedMethod>GET</AllowedMethod>
18 <AllowedOrigin>\*</AllowedOrigin>
19 </CORSRule>
20</CORSConfiguration>
Set Bucket CORS
С помощью операции PUT можно установить конфигурацию CORS для бакета, требуется обладать правами на запись WRITE_ACP, чтобы воспользоваться ей. Конфигурация будет переписана, если она уже существует.
Конфигурацию можно настроить на бакете так, что он сможет обслуживать запросы Cross-origin. К примеру, можно предоставить доступ запросу из источника https://www.example.com к бакету my.example.bucket.com, используя функционал браузера XMLHttpRequest.
Чтобы настроить совместное использование ресурсов между разными источниками (CORS) на бакете, нужно добавить подресурс CORS на бакет. Подресурс CORS — это XML-документ, в котором настраиваются правила, определяющие источники и методы HTTP, которые можно использовать в вашем бакете. Максимум размер документа может быть 64 КБ. Примеры правил, установленных на конфигурации CORS на бакете:
- Разрешает использовать Cross-origin-запросы PUT, POST и DELETE из источников https://www.example.com. Данное правило также разрешает использовать все заголовки в предполетном запросе OPTIONS с помощью заголовка Access-Control-Request-Headers. Следовательно, в качестве ответа на любой предполетный запрос OPTIONS, сервис возвращает любой запрошенный заголовок.
- Разрешает использовать Cross-origin-запросы GET со всех источников. Подстановочный знак «*» указывает на возможность использования любого источника.
Запрос:
1PUT /?cors HTTP/1.1
2Host: my-test-bucket1.hb.bizmrg.com
3Content-Length: 374
4Content-Type: application/xml
5x-amz-content-sha256: 745320970930725bd18820ec990f7334960f0a47358be189e77504cc094be77e
6x-amz-date: 20200831T185043Z
7Authorization: AWS4-HMAC-SHA256 Credential=II5JDQBAN3JYM4DNEB6C/20200831/ru-msk/s3/aws4_request,SignedHeaders=content-md5;content-type;host;x-amz-content-sha256;x-amz-date,Signature=f52b2bfb6ec975c86cadd2e51a6ee9842c6151b737e46ce90a3cb3cc0d0dea97
8
9<CORSConfiguration>
10 <CORSRule>
11 <AllowedOrigin>https://example.com</AllowedOrigin>
12
13
14 <AllowedMethod>PUT</AllowedMethod>
15 <AllowedMethod>POST</AllowedMethod>
16 <AllowedMethod>DELETE</AllowedMethod>
17
18
19 <AllowedHeader>\*</AllowedHeader>
20 </CORSRule>
21 <CORSRule>
22 <AllowedOrigin>\*</AllowedOrigin>
23 <AllowedMethod>GET</AllowedMethod>
24 </CORSRule>
25</CORSConfiguration>
Ответ:
HTTP/1.1 200 OK
Date: Mon, 31 Aug 2020 18:50:44 GMT
x-amz-request-id: tx0000000000000027946fc-005963cc84-1268c-ru-mska
Content-Type: application/xml
Content-Length: 0
Connection: close
Delete Bucket CORS
С помощью операции DELETE можно удалить информацию по конфигурации CORS, которая установлена для бакета.
Для выполнения этой операцией требуется обладать правами на запись WRITE_ACP.
Запрос:
DELETE /static-images?cors HTTP/1.1
Host: my-test-bucket1.hb.bizmrg.com
x-amz-content-sha256: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
x-amz-date: 20200831T182537Z
Authorization: AWS4-HMAC-SHA256 Credential=II5JDQBAN3JYM4DNEB6C/20200831/ru-msk/s3/aws4_request,SignedHeaders=content-md5;content-type;host;x-amz-content-sha256;x-amz-date,Signature=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
Ответ:
1HTTP/1.1 204 No Content
2Date: Mon, 31 Aug 2020 18:25:38 GMT
3x-amz-request-id: tx0000000000000002fae1f-0059690ca2-6441-ru-mska
4Connection: close