CORS 비행 전 요청이 접근통제 검사를 통과하지 못했습니다.HTTP OK 상태가 아닙니다.
Authorization Headers를 사용하여 Wordpress REST API에 GET/POST 요청을 작성하려고 하는데, 이에 대한 응답을 받고 있습니다.
비행 전 요청이 액세스 제어 검사를 통과하지 못했습니다.HTTP OK 상태가 아닙니다.
WP-API 인증을 위해 JWT 인증을 사용하고 있으며, 인터넷에서 찾을 수 있는 거의 모든 옵션을 시도해 보았지만 잘 되지 않았습니다.
현재 .htaccess 설정을 확인합니다.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule ^(.*) - [E=HTTP_AUTHORIZATION:%1]
SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1
RewriteCond %{REQUEST_METHOD} OPTIONS
RewriteRule ^(.*)$ $1 [R=200,L]
</IfModule>
<IfModule mod_headers.c>
Header always set X-Content-Type-Options "nosniff"
<IfModule mod_setenvif.c>
SetEnvIf Origin "^(http://localhost:3000)$" CORS=$0
</IfModule>
Header set Access-Control-Allow-Origin %{CORS}e env=CORS
Header set Access-Control-Allow-Credentials "true" env=CORS
Header set Access-Control-Allow-Methods "GET, POST, OPTIONS, HEAD" env=CORS
Header set Access-Control-Allow-Headers "*" env=CORS
Header set Access-Control-Expose-Headers "*" env=CORS
<FilesMatch "\.(php|html)$">
</FilesMatch>
</IfModule>
요청이 axios에서 이루어졌을 때 이 오류가 발생합니다.
오리진 'http://localhost:3000'에서 HIDDEN_SERVER_ADDRESS'의 XMLHttpRequest에 대한 액세스가 CORS 정책에 의해 차단되었습니다.비행 전 요청에 대한 응답이 액세스 제어 검사를 통과하지 못했습니다.HTTP OK 상태가 아닙니다.
PostMan에서 통화는 정상적으로 동작하고 있으며 원하는 결과를 얻을 수 있습니다.
.htaccess에서 가능한 모든 솔루션을 시도해봐도 도움이 되지 않았습니다.다른 누군가가 같은 생각을 하고 있다면, 여기 나에게 효과가 있는 솔루션이 있습니다.
이 코드를 index.filename 파일에 넣으면 마법처럼 작동합니다.
header('Access-Control-Allow-Origin: *');
header("Access-Control-Allow-Methods: HEAD, GET, POST, PUT, PATCH, DELETE, OPTIONS");
header("Access-Control-Allow-Headers: X-API-KEY, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method,Access-Control-Request-Headers, Authorization");
header('Content-Type: application/json');
$method = $_SERVER['REQUEST_METHOD'];
if ($method == "OPTIONS") {
header('Access-Control-Allow-Origin: *');
header("Access-Control-Allow-Headers: X-API-KEY, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method,Access-Control-Request-Headers, Authorization");
header("HTTP/1.1 200 OK");
die();
}
아자즈 칸이 제공한 해결책은 내게 효과가 있었다.OPTIONS 방식의 요청에 대해 왜 동작하는지 검색해보니
CORS(Cross-Origin Resource Sharing)를 사용하면 OPTIONS를 포함한 사전 전송 요청이 자동으로 전송되므로 대상 리소스가 허용 가능한 매개 변수로 응답합니다.일반적인 웹 개발 시나리오에서는 OPTION 호출은 브라우저에서 발행되므로 할 필요가 없습니다.
그래서 인증요청 전에 OPTIONS 방식의 요구가 발생했지만 백엔드 API에서 200 OK 응답이 반환되지 않았다고 생각합니다.백엔드에서 PHP 오류(아마 404 http 오류)가 반환되었습니다.체크하지 않았습니다만, 이 코드로 API가 200 OK 응답을 반환하는 것은 종료 때문입니다.
<?php
header('Access-Control-Allow-Origin: *');
header('Content-Type: application/json; charset=UTF-8');
header('Access-Control-Allow-Methods: GET,POST,PUT,PATCH,DELETE');
header('Access-Control-Allow-Headers: Content-Type,Access-Control-Allow-Headers,Authorization,X-Requested-With');
if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
header('HTTP/1.1 200 OK');
exit();
}
언급URL : https://stackoverflow.com/questions/57901808/cors-preflight-request-doesnt-pass-access-control-check-it-does-not-have-http
'programing' 카테고리의 다른 글
| 반응 DOMException:'노드'에서 'removeChild'를 실행하지 못했습니다.제거할 노드가 이 노드의 하위 노드가 아닙니다. (0) | 2023.03.20 |
|---|---|
| MongoDB 콘솔 클리어 방법 (0) | 2023.03.20 |
| 각 요소에서 페이드 - 하나씩 (0) | 2023.03.20 |
| UUID 최대 문자 길이 (0) | 2023.03.20 |
| JavaScript 개체를 JSON으로 인코딩하려면 어떻게 해야 합니까? (0) | 2023.03.20 |