Файл ресурсов PHP:
<?php
header("Access-Control-Allow-Origin: *");
header("Content-Type: application/json; charset=UTF-8");
header("Access-Control-Allow-Methods: POST, DELETE, OPTIONS, GET, PUT");
header("Access-Control-Max-Age: 3600");
header("Access-Control-Allow-Headers: Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With");
require_once ("center_service.php");
$data = json_decode(file_get_contents("php://input"));
$method = $_SERVER['REQUEST_METHOD'];
if (!isset($routes[2])) {
$sql = "SELECT * FROM centers;";
Center::readCenter($sql);
} else if (isset($routes[2]) && is_numeric($routes[2]) && $method === "GET") {
$sql = "SELECT * FROM centers WHERE id='$routes[2]';";
Center::readCenter($sql);
} else if (isset($routes[2]) && is_numeric($routes[2]) && $method === "DELETE") {
Center::deleteCenter($routes[2]);
}
else {
header('HTTP/1.0 404 Not Found');
require '404.php';
}
Угловой сервисный файл:
readonly ROOT_URL = 'http://localhost/ecdweb/api/index.php';
getCenters(): Observable<Center[]> {
return this.http.get<Center[]>(this.ROOT_URL + '/centers');
}
deleteCenter(id: number): Observable<{}> {
return this.http.delete(this.ROOT_URL + '/centers/' + id);
}
Метод get работает и возвращает результаты, но не работает с методом delete. Если это из-за CORS, то почему метод get работает?
Смежные вопросы:
Ошибка «XMLHttpRequest не может загрузить файл: ///… предпечатная проверка не удалась»
Хорошо, я думаю, это потому, что если метод отличается от GET или DELETE, вы возвращаете 404. Поэтому, когда обрабатывается предпечатный запрос (глагол OPTIONS), вы возвращаете 404.
Вот пример CORS в PHP (Вот)
Основная тема:
Важным моментом здесь является то, что сценарий API должен распознавать, когда был получен первоначальный запрос OPTIONS, и возвращать соответствующие заголовки контроля доступа в этом случае (и ничего более). После этого браузер затем инициирует второй запрос, в котором выполняется настоящая работа.
В вашем конкретном случае я думаю, что код должен быть:
if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Headers: X-Requested-With, content-type, access-control-allow-origin, access-control-allow-methods, access-control-allow-headers');
exit;
}
Если вы хотите включить Cors более глобально, вы можете просто добавить
header('Access-Control-Allow-Origin: *');
в вашем PHP-скрипте (посмотреть здесь)
Других решений пока нет …