Подтвердить что ты не робот

Ошибка запроса заголовка поля авторизации не допускается - Tastypie

Я получаю следующую ошибку при использовании ApiKeyAuthentication для моих ресурсов Tastypie, когда я пытаюсь выполнить HTTP-запрос с использованием AJAX и Tastypie:

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

Как вы можете видеть, оба они имеют заголовки для авторизации, но авторизация не работает.

Вот промежуточное программное обеспечение django, которое я использую для редактирования заголовков ответов: https://gist.github.com/1164697

Изменить: Я понял проблему. Я пытался подключиться к www.domain.com, и он принимает только домен .com

4b9b3361

Ответ 1

Это происходит из-за То же правило происхождения.

Вам нужно сделать вызов AJAX из того же домена, в котором будет отправлен запрос. Или сделайте изменения на стороне сервера, разрешив запросы из внешних доменов.

Чтобы решить эту проблему, вам нужно внести изменения в заголовки в http://domain.com, разрешив свой внешний домен в заголовках:

Access-Control-Allow-Origin: *

Прочитайте подробнее

Ответ 2

Ответ Antyrat не завершен.

Вы должны указать, какие заголовки разрешены вашим сервером; в вашем случае Авторизация.

Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, POST, PUT, DELETE
Access-Control-Allow-Headers: Authorization

Ответ 3

Хотя я поддержал ответ @Manuel Bitto,
Я хотел бы опубликовать еще один ответ, который содержит полный фильтр Cors, который работает для меня с Apache tomcat 5.x:

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);
    }
}

Я хотел бы предложить специально обратить внимание на добавление OPTIONS к значениям заголовка "Access-Control-Allow-Methods".
Причина этого заключается в том, что согласно объяснению, представленному здесь Mozilla,
если ваш запрос (скажем, POST) содержит специальный заголовок или тип содержимого (и это мой случай), то объект XMLHttpRequest будет генерировать дополнительный вызов OPTIONS, который вам нужно указать в вашем коде.
Надеюсь, это поможет.

Ответ 4

Проблема заключалась в том, что www.domain.com рассматривался как отличный от domain.com. domain.com работал, но когда я использовал www.domain.com, он обнаружил, что я делаю запросы из другого домена

Ответ 5

Я знаю, что этот вопрос старше.

Но сегодня я столкнулся с тем же вопросом, что и после добавления owin. После нескольких поисковых запросов в Google и различных решений. Я решил проблему cors, добавив ниже

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

Подробнее см. ниже. Спасибо.

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