programing

jQuery CORS 콘텐츠 유형 옵션

newsource 2023. 3. 26. 11:25

jQuery CORS 콘텐츠 유형 옵션

커스텀 콘텐츠 타입의 jQuery CORS를 사용하여 AJAX 바디 리퀘스트를 보내는 데 문제가 있습니다.제 코드는 다음과 같습니다.

$.ajax({
  url: "http://some-other-domain/my-path",
  type: "POST",
  contentType: "application/json",
  dataType: "json",
  data: JSON.stringify({
    key: 1,
    key2: 2
  }),
  statusCode: {
    200: function(data) {
    }
  },
  xhrFields: {
    withCredentials: true
  },
  crossDomain: true
});

컨텐츠 타입은 서버측에서 필요하기 때문에 「어플리케이션/json」으로 설정할 필요가 있습니다.그러나 POST jQuery가 요청을 보내는 대신 OPTIONS로 요청을 보냅니다.

머리글은 다음과 같습니다.

응답 헤더:

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Pragma: No-cache
Cache-Control: no-cache
Expires: Thu, 01 Jan 1970 03:00:00 EET
Set-Cookie: JSESSIONID=BB9D6783E58FB0F2ADE1924A2F0CBA52; Path=/
Content-Type: text/html;charset=UTF-8
Content-Length: 6233
Date: Fri, 07 Sep 2012 14:41:13 GMT

요청 헤더:

OPTIONS /my-path HTTP/1.1
Host: MY-HOME-NAME
User-Agent: MY_USER_AGEMT
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Origin: HERE-GOES-DOMAIN
Access-Control-Request-Method: POST
Access-Control-Request-Headers: content-type
Pragma: no-cache
Cache-Control: no-cache

CORS는 정상적으로 동작합니다.필요한 헤더는 모두 서버에서 송신되지만 OPTIONS 타입으로 송신되는 경우는 송신되지 않습니다.jQuery 문제인가요?

jQuery - 1.8.1

이 OPTIONS 요청은 CORS 비행 전 요청입니다.이는 요청을 수행할 권한을 요청하기 위해 실제 요청 전에 서버로 전송되는 요청입니다.커스텀 Content-Type이 실제로 프리플라이를 트리거하고 있습니다.CORS 사양(http://www.w3.org/TR/cors/),에 따르면 application/x-www-form-urlencoded, multipart/form-data 또는 text/multipart 이외의 Content-Type은 프리플라이를 트리거합니다.

리모트 서버를 제어할 수 없는 경우는, CORS 프리플라이트 지원을 의뢰하거나, JSON-P등의 다른 옵션을 시험해 볼 필요가 있습니다.

원격 서버를 제어할 수 있는 경우 사전 이동을 처리하도록 변경할 수 있습니다.프리플라이트 요구를 처리하려면 OPTIONS 요구에 대한 응답으로 다음 헤더를 전송해야 합니다.

Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: POST
Access-Control-Allow-Headers: Content-Type

응답은 HTTP 200이어야 합니다.Access-Control-Allow-Methods응답 헤더는, 다음의 값을 에코할 수 있습니다.Access-Control-Request-Method또는 그냥 이렇게 할 수도 있고GET, POST, PUT, DELETE모든 방법을 지원합니다.Access-Control-Allow-Headers응답 헤더는 의 값을 에코해야 합니다.Access-Control-Request-Headersrequest.

브라우저는 이러한 헤더를 수신하면 실제 요청을 합니다.CORS 비행 전 요청에 대한 자세한 내용은 여기를 참조하십시오.

http://www.html5rocks.com/en/tutorials/cors/

언급URL : https://stackoverflow.com/questions/12320467/jquery-cors-content-type-options