$.ajax에 "Preflight is invalid redirect error"라고 표시되어 있는 이유는 무엇입니까?
우체국에서 다음 코드를 시도했는데 작동했어요.코드에 무슨 문제라도 있나요?
$.ajax({
url: 'http://api.example.com/users/get',
type: 'POST',
headers: {
'name-api-key':'ewf45r4435trge',
},
data: {
'uid':36,
},
success: function(data) {
console.log(data);
}
});
콘솔에 다음과 같은 오류가 발생하였습니다.
XMLHttpRequest가 http://api.example.com/users/get을 로드할 수 없습니다. 사전 비행에 대한 응답이 잘못되었습니다(비활성).
https 웹 서비스를 http 웹 서비스로 호출하려고 했을 때 동일한 오류가 발생했습니다.
e.g when I call url 'http://api.example.com/users/get'
which should be 'https://api.example.com/users/get'
이 오류는 https가 아닌http를 호출하려고 하면 리다이렉션 상태 302가 원인입니다.
이 답변은 (단, 각도가 있는 경우) 완전히 같은 것입니다.이것은 CORS 문제입니다.
빠른 수정 방법 중 하나는 "사전 비행"을 트리거하지 않는 "Content-Type" 헤더 값 중 하나를 지정하여 각 POST 요청을 수정하는 것입니다.다음과 같은 유형이 있습니다.
- application/x-www-form-urlencoded
- 멀티파트/폼 데이터
- 텍스트/메시지
그 외 어떤 것도 비행 전을 유발합니다
예를 들어 다음과 같습니다.
$.ajax({
url: 'http://api.example.com/users/get',
type: 'POST',
headers: {
'name-api-key':'ewf45r4435trge',
'Content-Type':'application/x-www-form-urlencoded'
},
data: {
'uid':36,
},
success: function(data) {
console.log(data);
}
});
이 에러는, 프리플라이가 리다이렉트 응답을 수신하고 있는 것을 나타냅니다.이는 여러 가지 이유로 발생할 수 있습니다.어디서 리다이렉트되는지 알아보고 왜 그런 일이 일어나는지 알 수 있습니다. [ Developer Tools ]의 [Network]탭을 확인합니다.
@Peter T가 설명한 것처럼 API에 HTTP가 아닌 HTTPS 접속이 필요하며 HTTP를 통한 모든 요구가 리다이렉트되기 때문입니다.그Location
에 의해 반환된 헤더302
응답은 같은 url을 말합니다.http
로 변경되었다https
이 경우는,
다른 이유로는 인증 토큰이 전송되지 않거나 올바르지 않은 경우가 있습니다.대부분의 서버는 인증 토큰을 포함하지 않는 모든 요청을 로그인 페이지로 리디렉션하도록 설정되어 있습니다.다시 한 번 확인하겠습니다.Location
header를 클릭하여 전송처인지 확인하고 브라우저가 인증 토큰을 요청과 함께 전송했는지 확인합니다.
대부분의 경우 서버는 인증 토큰이 없는 요청을 항상 로그인 페이지로 리다이렉트하도록 구성됩니다(예: 프리플라이트/OPTIONS
요청한다.이것이 문제가 된다.서버 구성을 허용하도록 변경합니다.OPTIONS
인증되지 않은 사용자로부터의 요청.
헤더에 http content type을 설정하고 서버가 CORS를 인증하고 있는지 확인하십시오.PHP에서는 다음과 같이 합니다.
//NOT A TESTED CODE
header('Content-Type: application/json;charset=UTF-8');
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: DELETE, HEAD, GET, OPTIONS, POST, PUT');
header('Access-Control-Allow-Headers: Content-Type, Content-Range, Content-Disposition, Content-Description');
header('Access-Control-Max-Age: 1728000');
다음을 참조해 주세요.
http://www.w3.org/TR/cors/ #cross-class-request-with-pre-flight-0
Access-Control-Allow-Origin 헤더는 어떻게 동작합니까?
문제는 POST 요청에 후행 슬래시 '/'가 필요하다는 것입니다.
나도 같은 문제가 있어서 며칠 동안 잠을 못 잤어.결국 앱을 가리키는 URL이 완전히 틀렸다는 것을 알게 되었습니다.예:
URL: 'http://api.example.com/'
URL: 'https://api.example.com/'.
verifyhttp일 경우 https로 설정합니다.
리다이렉트 URL 을 확인해, 전달하고 있는 것과 같은 것을 확인해 주세요.
같은 에러가 있었습니다만, URL에 오타가 있는 것이 문제였습니다.
url: 'http://api.example.com/TYPO'
API에서 잘못된 모든 URL(404 오류)에 대해 다른 도메인으로 리디렉션되었습니다.
그래서 오타를 올바른 URL로 수정해서 수정이 되었습니다.
제 문제는 @ehacinom과 정반대의 문제였습니다.Larabel에서 생성된 API는 POST 요청의 '/' 뒤에 오는 것을 좋아하지 않았습니다.localhost에서는 정상적으로 동작했지만 서버에 업로드 했을 때는 동작하지 않았다.
언급URL : https://stackoverflow.com/questions/33645511/why-my-ajax-showing-preflight-is-invalid-redirect-error
'programing' 카테고리의 다른 글
SVN이 외부 정의 내의 디렉토리를 무시하도록 하는 방법 (0) | 2023.03.11 |
---|---|
SpringMvc와 webflux를 함께 사용할 수 있나요? (0) | 2023.03.11 |
JavaScript 어레이(JSON 형식)를 동적으로 작성하려면 어떻게 해야 합니까? (0) | 2023.03.11 |
PHP에서의 REST vs. RPC (0) | 2023.03.11 |
PHP 및 WordPress: 디버깅 (0) | 2023.03.11 |