javascript django tutorial - '요청 헤더 필드 승인이 허용되지 않습니다'오류 - Tastypie




3 Answers

이것은 같은 출처 정책 때문에 발생합니다.

요청이가는 동일한 도메인에서 AJAX 호출을해야합니다. 또는 서버 측 변경을 수행하여 외부 도메인의 요청을 허용 할 수 있습니다.

이 문제를 해결하려면 헤더에 외부 도메인을 허용하여 http://domain.com 에서 헤더를 변경해야합니다.

Access-Control-Allow-Origin: *

more 읽으십시오

AJAX 및 Tastypie를 사용하여 HTTP 요청을 수행하려고하면 Tastypie 리소스에 ApiKeyAuthentication을 사용하는 동안 다음 오류가 발생합니다.

XMLHttpRequest cannot load http://domain.com/api/v1/item/?format=json&username=popo&api_key=b83d21e2f8bd4952a53d0ce12a2314c0ffa031b1. Request header field Authorization is not allowed by Access-Control-Allow-Headers.

이 문제를 해결하는 방법에 대한 아이디어가 있습니까?

다음은 Chrome의 요청 헤더입니다.

Request Headersview source

Accept:*/*
Accept-Charset:
ISO-8859-1,utf-8;q=0.7,*;q=0.3

Accept-Encoding:gzip,deflate,sdch

Accept-Language:en-US,en;q=0.8

Access-Control-Request-Headers:
origin, authorization, access-control-allow-origin, accept, access-control-allow-headers

Access-Control-Request-Method:
GET

다음은 Chrome의 응답 헤더입니다.

Response Headersview source

Access-Control-Allow-Headers:
Origin,Content-Type,Accept,Authorization

Access-Control-Allow-Methods:
POST,GET,OPTIONS,PUT,DELETE

Access-Control-Allow-Origin:*

Connection:keep-alive

Content-Length:0
Content-Type:
text/html; charset=utf-8

Date:Fri, 11 May 2012 21:38:35 GMT

Server:nginx

보시다시피, 둘 다 권한 부여에 대한 헤더가 있지만 권한이 작동하지 않습니다.

다음은 응답 헤더를 편집하는 데 사용하는 장고 미들웨어입니다. https://gist.github.com/1164697

편집 : 나는 문제를 알아 냈다. www.domain.com에 연결하려고했는데 domain.com 만 허용합니다.




나는 마누엘 비트토의 대답을지지하지 않았지만,
나는 아파치 톰캣 5.x와 함께 나를 위해 작동하는 완벽한 Cors 필터를 포함하는 또 다른 답변을 게시하고 싶습니다 :

public class CorsFilter implements Filter {

    public CorsFilter() { }

    public void init(FilterConfig fConfig) throws ServletException { }

    public void destroy() { }

    public void doFilter(

            ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException {
        HttpServletResponse httpServletResponse = (HttpServletResponse)response;
        httpServletResponse.addHeader("Access-Control-Allow-Origin", "*");
        httpServletResponse.addHeader("Access-Control-Allow-Methods", "GET, POST, PUT, OPTIONS, DELETE");
        httpServletResponse.addHeader("Access-Control-Allow-Headers", "Authorization");

        chain.doFilter(request, response);
    }
}

나는 특별히 "Access-Control-Allow-Methods"헤더 값에 OPTIONS를 추가하는 것에주의를 기울일 것을 제안합니다.
그 이유는 모질라에 의해 제공된 설명에 따르면,
귀하의 요청 (POST라고 가정 해 봅시다)에 특수 헤더 나 내용 유형이 포함되어 있다면 XMLHttpRequest 객체는 코드에서 다루어야하는 OPTIONS 호출을 추가로 생성합니다.
이게 도움이 되길 바란다.




나는이 질문이 더 오래되었다는 것을 알고있다.

하지만 오늘은 오우 인을 추가 한 후에 같은 문제에 부딪 혔습니다. google에 수색의 수 그리고 각종 해결책을 시도한 후에. 아래에 추가하여 코르 문제를 해결했습니다.

<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<remove name="OPTIONSVerbHandler" />
<remove name="TRACEVerbHandler" />

자세한 내용은 아래 링크를 참조하십시오. 감사.

[ http://benfoster.io/blog/aspnet-webapi-cors]




Related