Как установить заголовок «Access-Control-Allow-Credentials» для загрузки файла в angular 4?

Я работаю над приложением angular 4, в котором у меня есть требование загрузить файл в форму отправки, для этого я использую плагин ng2-file-upload. Но я столкнулся с проблемой загрузки файла. Я создаю файл upload.php, завершающий процесс загрузки.
Upload.php выглядит следующим образом:

header("Access-Control-Allow-Origin: http://localhost:4200");
header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");

if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
echo json_encode(array('status' => false));
exit;
}

$path = 'uploads/';

if (isset($_FILES['file'])) {
$originalName = $_FILES['file']['name'];
$ext = '.'.pathinfo($originalName, PATHINFO_EXTENSION);
$generatedName = md5($_FILES['file']['tmp_name']).$ext;
$filePath = $path.$generatedName;

if (!is_writable($path)) {
echo json_encode(array(
'status' => false,
'msg'    => 'Destination directory not writable.'
));
exit;
}

if (move_uploaded_file($_FILES['file']['tmp_name'], $filePath)) {
echo json_encode(array(
'status'        => true,
'originalName'  => $originalName,
'generatedName' => $generatedName
));
}
}
else {
echo json_encode(
array('status' => false, 'msg' => 'No file uploaded.')
);
exit;
}

Но я получил следующую ошибку:

Ошибка загрузки Http: //localhost/uploads/uploads.php: Ответ на
предварительный запрос не проходит проверку контроля доступа: значение
Заголовок «Access-Control-Allow-Credentials» в ответе «», который
должно быть ‘true’, когда режим учетных данных запроса ‘include’.
ПроисхождениеHTTP: // локальный: 4200Поэтому не допускается доступ.
режим учетных данных запросов, инициированных XMLHttpRequest,
контролируется атрибутом withCredentials.

Если какая-либо помощь, пожалуйста, предложите мне, спасибо заранее!

5

Решение

Это вопрос безопасности браузера, а не Angular. Когда вы делаете междоменный запрос AJAX, если вы хотите отправить куки (в основном, информацию об авторизации), браузеры требуют, чтобы вы указали Access-Control-Allow-Credentials с true, указывая, что внешний домен позволяет это. Причина этих двух заголовков в том, что сайт может разрешать запросы AJAX из другого домена, но, возможно, они не хотят, чтобы этот домен использовал какие-либо потенциальные куки авторизации в браузере.

В качестве примера того, что влечет за собой этот риск, вы можете написать приложение для доступа к API Facebook через AJAX. Но если Facebook разрешил вам отправлять файлы cookie, которые могут существовать в браузере, вы можете создавать публикации, как если бы вы были аутентифицированным пользователем, что, конечно же, запрещено. Запретив отправку существующих файлов cookie, пользователь должен предоставить вашему приложению свои учетные данные Facebook, чтобы что-то сделать от своего имени.

В дополнение к этой проверке отправка файлов cookie через XMLHttp также не работает, если Access-Control-Allow-Origin установлен на «*». Домены должны быть явно добавлены, чтобы гарантировать, что вы не дадите доступ к потенциально опасным сайтам.

-1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]