Я пишу немного TypeScript, который пытается загрузить несколько файлов из Azure, а затем сжать их на клиенте и загрузить zip;однако мои GET
запросы на скачивание файлов блокируются CORS.
Странно то, что предполетный ответ возвращает код состояния 200 (ОК) и правильные Access-Control
заголовки.
Код для попытки загрузки файла:
const _downloadFile = (absolutePath: string): Promise<Blob> => fetch(absolutePath, {
credentials: "include",
headers: {
"Access-Control-Allow-Headers": "*",
"Access-Control-Allow-Methods": "*",
"Access-Control-Allow-Origin": cdnDomain,
"Cache-Control": "no-cache",
"Content-Type": "*/*",
"Origin": window.location.origin,
},
method: "GET",
mode: "cors",
}).then((response: Response) => {
console.log(response);
return response.blob();
});
запрос перед полетом возвращает код состояния 200 (ОК) со следующими заголовками:
access-control-allow-credentials: true
access-control-allow-headers: access-control-allow-headers,access-control-allow-methods,access-control-allow-origin,cache-control,content-type
access-control-allow-methods: GET
access-control-allow-origin: http://localhost:8080
access-control-max-age: 50000
content-length: 0
date: Fri, 20 Sep 2019 19:15:19 GMT
server: Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
status: 200
x-ms-request-id: ff499fd5-a01e-0040-7de7-6f8a94000000
x-ms-version: 2014-02-14
Однакоответ на «реальный запрос» не включает заголовки Access-Control
и блокируется CORS, при этом браузер печатает следующую ошибку:
Access to fetch at '[url to my file]' from origin 'http://localhost:8080' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.
В Azure у меня есть следующая конфигурация CORS:
Разрешенные источники: http://localhost:5000,http://localhost:8080,http://localhost:8081,http://localhost:8082
Разрешенные методы: GET, HEAD, MERGE, POST, OPTIONS, PUT
Разрешенные заголовки: *
Открытые заголовки: *
EDIT:
Я думаю, что это может быть связано с тем фактом, что в Azure настроена «конечная точка», которая указывает на источник хранилища BLOB-объектов, поэтому заголовки CORS не пропускаются.Я не слишком знаком с Azure, поэтому не знаю, как правильно это настроить.