В совместном проекте есть приложение 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.
Итак, есть два вопроса:
Можно ли действительно перезаписать заголовок HTTP по умолчанию из SWF-файла, открытого через Firefox? Мы что-то не так?
Лучше ли повторно использовать этот инструмент HTTP или, возможно, нам нужно придерживаться дополнительного параметра и начать переписывать URL-адреса в такие вещи, как /api/someObject.<json|xml>/123
?