programing

$.ajax에 "Preflight is invalid redirect error"라고 표시되어 있는 이유는 무엇입니까?

css3 2023. 3. 11. 09:17

$.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이 경우는,

다른 이유로는 인증 토큰이 전송되지 않거나 올바르지 않은 경우가 있습니다.대부분의 서버는 인증 토큰을 포함하지 않는 모든 요청을 로그인 페이지로 리디렉션하도록 설정되어 있습니다.다시 한 번 확인하겠습니다.Locationheader를 클릭하여 전송처인지 확인하고 브라우저가 인증 토큰을 요청과 함께 전송했는지 확인합니다.

대부분의 경우 서버는 인증 토큰이 없는 요청을 항상 로그인 페이지로 리다이렉트하도록 구성됩니다(예: 프리플라이트/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