CORS / xhr.getRequestHeaders - PullRequest
       23

CORS / xhr.getRequestHeaders

3 голосов
/ 17 января 2011

Привет,

Я пытаюсь использовать CORS (http://www.w3.org/TR/2009/WD-cors-20090317/#access-control-allow-methods-header) для приложения в Safari, и когда я пытаюсь прочитать заголовки ответа из XMLHTTPRequest, я получаю только Content-Type. Ни один из других вполне стандартных заголовков проходит, и я не могу понять, как заставить это работать.

Кто-нибудь может узнать, как решить эту проблему? Может ли это быть ошибкой WebKit?

1009 ** * Редактировать 1010 ** * 1011

вот конфигурация, которую я использую с nGinx:

add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Headers Cache-Control,Pragma,Date;
add_header Access-Control-Allow-Methods GET,POST;

Ответы [ 4 ]

1 голос
/ 05 октября 2011

Для того чтобы заголовки были доступны для JS, вам нужно установить Access-Control-Expose-Headers header в список заголовков через запятую, который вы хотите выставить.

К сожалению, этот заголовок плохо поддерживается.Mozilla реализовала его только в Firefox 4, Webkit на данный момент не реализует .Я не уверен насчет IE8 и выше (Google не нашел ничего полезного, и у меня нет их, чтобы проверить себя).

(см. Также, например. Ограничения getResponseHeader в XMLHttpRequest()? )

0 голосов
/ 30 декабря 2013

ЗАПРОС:

$.ajax({
            url: "http://localhost:8079/students/add/",
            type: "POST",
            crossDomain: true,
            data: JSON.stringify(somejson),
            dataType: "json",
            success: function (response) {
                var resp = JSON.parse(response)
                alert(resp.status);
            },
            error: function (xhr, status) {
                alert("error");
            }
        });

ОТВЕТ:

response = HttpResponse(json.dumps('{"status" : "success"}'))
response.__setitem__("Content-type", "application/json")
response.__setitem__("Access-Control-Allow-Origin", "*")

return response
0 голосов
/ 02 февраля 2013

Я был в той же ситуации вчера.https://stackoverflow.com/users/713326/gijs дал вам правильный ответ, но есть другая часть, специфичная для nginx, о которой вы должны позаботиться.«Добавить заголовок» работает только в случае, если ответ от службы является успешным (200, 204, 301, 302 или 304).Вы должны сделать пользовательскую сборку nginx, чтобы включить HttpHeadersMoreModule (http://wiki.nginx.org/HttpHeadersMoreModule). После того, как вам нужно заменить add_header на more_set_headers.

Пример:

    more_set_headers 'Access-Control-Allow-Origin: $http_origin';
    more_set_headers 'Access-Control-Allow-Credentials: false';
    more_set_headers 'Access-Control-Allow-Methods: GET, POST, OPTIONS, HEAD, PUT, PATCH, DELETE';
    more_set_headers 'Access-Control-Allow-Headers:Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Accept,Authorization;
    more_set_headers 'Access-Control-Expose-Headers: Location';
0 голосов
/ 22 января 2011

Подтвердили ли вы, что ваш сервер фактически отправляет заголовки Cache-Control, Pragma и Date?Возможно, настроить трассировку Wireshark на клиенте, чтобы увидеть фактические заголовки HTTP, которыми обмениваются?

...