Заголовок повторяющегося реферера - HTTP.sys barfs - PullRequest
7 голосов
/ 11 ноября 2009

Я тестировал браузер PS3 (NetFront) со встроенными компонентами Flash на веб-странице, и, похоже, существует довольно серьезная ошибка в способе подачи любых запросов от Flash. Браузер добавляет реферер (referer), так же как и проигрыватель Flash, что приводит к дублированию заголовков. Это на самом деле нормально, если заголовки реферера одинаковы, однако это не так, и в результате запрос останавливается http.sys на W2k8. Это серьезная проблема для меня, так как у меня есть компонент Flash, который должен вызывать веб-сервисы для работы.

Есть ли какой-нибудь способ, которым мы можем отфильтровать или пропустить эти запросы, возможно удалив дублирующие заголовки по пути.

Некоторые решения, о которых мы думали, но которые либо неоптимальны, либо невозможны в нашей среде разработки и в реальных условиях:

  • Добавление прокси перед серверами для очистки запроса.
  • Исправление запроса у наших балансировщиков нагрузки. Это может работать в нашей среде, но не в dev. Также использование балансировщика нагрузки для выполнения этой операции является плохой практикой, наша операционная команда не будет рада:)
  • Отправка всех данных во Flash во время инициализации через flashvars. Возможно делать любые обновления / обратные вызовы через Javascript. Это выглядит грязно и требует значительного пользовательского кода для одной платформы.
  • Запретить браузеру или Flash отправлять заголовки реферера. Это было бы приемлемо, однако, кажется, нет способа включить это во Flash или NetFront.

Для справки следующий запрос воспроизведет проблему (скопируйте и вставьте в Fiddler или другой инструмент, я предполагаю, что вы работаете с IIS7, W2K8, как мы). Вы должны получить ответ 400 Bad Request.

GET / HTTP/1.1
Host: localhost
Referer: http://localhost/NetFrontBrowser/
Referer: http://localhost/Flash/

Большое спасибо

Ответы [ 4 ]

1 голос
/ 13 июня 2015

Добавление этого в HTML остановит использование реферера, если он не нужен.

<meta name="referrer" content="never">

Пожалуйста, проголосуйте, если ответ хороший!

1 голос
/ 27 ноября 2009

Apache имеет модуль mod_headers. Это решило бы вашу проблему, но если вам нужно использовать http.sys, я бы попытался найти что-то эквивалентное mod_headers. Возможно, кто-то портировал mod_headers на http.sys?

Также я бы оценил переписывание URL. Я знаю, что речь идет о заголовках, а не об URL, но, возможно, модуль перезаписи URL в http.sys (если он существует) знает о заголовках.

Я предполагаю, что mod_headers или mod_rewrite, эквивалентный для http.sys, могут обработать запрос до http.sys barfs.

Удачи!

1 голос
/ 16 декабря 2009

stmedit из Windows DDK "демонстрирует замену строкового шаблона для соединения по протоколу управления передачей (TCP) с использованием платформы фильтрации Windows (WFP)".

Немного дополнительной хакерской атаки превращает его в FSM, который может вывести все, кроме первой строки реферера.

1 голос
/ 18 ноября 2009

Если бы я перечислил эти 1-4, я бы сказал, что 2 лучше всего подходит для вашей живой среды, а 3 может быть чем-то, что вам нужно сделать, если ваша среда разработки не может аналогичным образом соответствовать вашей живой среде. Числа 1 и 2 очень похожи, так как балансировщик нагрузки в основном обратный прокси. Номер 4, как вы указали, кажется невозможным, если не дождаться, пока Sony обновит браузер и используемый им плагин, что маловероятно, поскольку они, вероятно, обработали его и плохо контролируют его (во-первых, вроде прошивки). на моем корейском телевизоре сделано в Пало-Альто, и им потребовалось 10 месяцев, чтобы соответствовать GPL из-за неспособности общаться достаточно хорошо).

...