Ответ перед полетом CORS возвращает 200 (ОК), но реальный запрос все еще заблокирован - PullRequest
0 голосов
/ 20 сентября 2019

Я пишу немного 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, поэтому не знаю, как правильно это настроить.

...