URLRequest с заголовком Accept: помещается в тело запроса, не переопределяет заголовок запроса по умолчанию - PullRequest
4 голосов
/ 13 февраля 2012

В совместном проекте есть приложение Flash, которое использует своего рода API (незавершенное, связанное с PHP-методом). API, используемый для обслуживания данных в JSON, но теперь нам требуется поддержка другого формата. Есть несколько способов указать формат, в котором мы ожидаем, что данные будут возвращены. Я хотел бы выбрать HTTP Accept header, чтобы избежать повторного изобретения колеса.

В нашем приложении Flash у нас есть стандартный набор кода, отвечающий за установку заголовка Accept.

var request:URLRequest = new URLRequest(url);
var acceptHeader:URLRequestHeader = new URLRequestHeader("Accept", "application/json");
request.requestHeaders.push(acceptHeader);
request.method = URLRequestMethod.POST;
// add parameters, init a URLLoader, load the request etc.

Это отлично работает в Internet Explorer и Chrome / Chromium - веб-консоли показывают заголовок, измененный, как и ожидалось (хотя и в нижнем регистре). Но Firefox / Iceweasel демонстрируют странное поведение. Согласно разделу заголовков во встроенном инспекторе, стандартный заголовок передается только:

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

Запуск живых HTTP-заголовков (расширение FF) и перехват запросов от приложения дает странные результаты (неважные заголовки пропущены, пути изменены и т. Д.):

POST /path-to-script.phtml?id=1 HTTP/1.1
Host: devserver.com
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
<...>
    Referer: http://devserver.com/path-to-flash.swf
    Content-Type: application/x-www-form-urlencoded
    Accept: application/json

    <POST payload>

Фактическая полезная нагрузка является заглушкой, поскольку URLRequest запрещает изменение заголовков для метода GET. По какой-то причине полезная нагрузка и три последних заголовка также имеют отступ, что делает их частью тела запроса, а не заголовками запроса.

Сканирование POST-запросов в Firefox - фактически в Iceweasel 9.01 в Debian, если это имеет значение, как в FF10 в Win7 - выявляет другие случаи с такими же симптомами. А именно на community.adobe.com, но запросы от SWF сопровождаются как заголовком Accept, так и параметром POST, указывающим желаемый формат JSON.

Итак, есть два вопроса:

  1. Можно ли действительно перезаписать заголовок HTTP по умолчанию из SWF-файла, открытого через Firefox? Мы что-то не так?

  2. Лучше ли повторно использовать этот инструмент HTTP или, возможно, нам нужно придерживаться дополнительного параметра и начать переписывать URL-адреса в такие вещи, как /api/someObject.<json|xml>/123?

1 Ответ

0 голосов
/ 25 января 2015
var acceptHeader:URLRequestHeader = new URLRequestHeader("Accept", "application/json");

это работает для нас.Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...