Service Fabric - удалить заголовок ReverseProxy Server «Microsoft-HTTPAPI / 2.0» - PullRequest
0 голосов
/ 09 октября 2018

У меня запущена служба без сохранения состояния на ядре asp.net 2.1 / kestrel.Услуга защищена и доступна извне через LB и SF Reverse Proxy.Версия Service Fabric - 6.3.187.9494.

У меня есть необходимость полностью удалить заголовок сервера из ответа, и не было никаких проблем сделать это в самом сервисе, манипулируя KestrelServerOptions.AddServerHeader, но, похоже, ReverseProxy добавляет свой собственный заголовок службы, который является Microsoft-HTTPAPI / 2.0 .

Итак, вот как я проверяю - я делаю запрос к конечной точке службы с узла, на котором она работает, и не получаюЗаголовок сервера.Затем я делаю то же самое, но через обратный прокси-сервер, и я возвращаюсь - Сервер: Microsoft-HTTPAPI / 2.0.

Чтение через ApplicationGateway / Http настроек, я нашел свойство с именем RemoveServiceResponseHeaders -

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

Я установил для этого параметра значение "Дата; сервер" и обновил кластер, но не повезло, поскольку я все еще получаю этот заголовок сервера.

Есть предложения?

1 Ответ

0 голосов
/ 10 октября 2018

Боюсь, вы не можете сделать это, используя обычную конфигурацию «RemoveServiceResponseHeaders» в ServiceFabric.Он удалит только те читатели, которые были получены из ответов вашей службы.

В Windows HttpGateway Service Fabric работает поверх HTTP.sys модуля ядра, который является ответственнымдля этого заголовка SF не имеет права голоса в этом.

Прежде чем идти дальше,

, если вы удаляете это по соображениям безопасности, вам следует переосмыслить использование встроенного ApplicationGateway, предоставленногопо SF, он будет предоставлять все ваши сервисы, и в настоящее время нет контроля над тем, какие сервисы предоставляются через него, я думаю, что риск выше, чем просто удаление заголовка сервера, поскольку он не предоставляет реального имени сервера.

Идем дальше,

Чтобы решить вашу проблему, у вас есть два варианта:

  1. Вы можете играть с HTTP.sys реестр настройки , чтобы удалить его на компьютере.

Вам потребуется добавить значение DisableServerHeader DWORD в ключ реестра HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\HTTP\Parameters и установить его значение на 2.

enter image description here

Этот ключ управляет поведением http.sys в отношении добавления заголовка ответа http «Сервер» для ответов, отправляемых клиентам. Значение 0, которое является значением по умолчанию , будет использовать значение заголовка, которое приложение предоставляет http.sys, или добавит значение по умолчанию «Microsoft-HTTPAPI / 2.0» к заголовку ответа.Значение 1 не добавит заголовок «Сервер» для ответов, сгенерированных http.sys (ответы, заканчивающиеся на 400, 503 и другие коды состояния).Значение 2 не позволит http.sys добавлять заголовок «Server» в ответ.Если в ответе присутствует заголовок «Сервер», он не будет удален, если его нет, он не будет добавлен.

Пожалуйста, ознакомьтесь с этим ответом с подробной информацией о том, какдля этого: GET запрос к IIS возвращает Microsoft-HttpApi / 2.0

.

На основании приведенного выше описания заголовок ответа содержит «Microsoft-HTTPAPI / 2.0», поскольку значение по умолчанию равно 0, а исходный ответ не содержит заголовка сервера. Если вы укажете какое-либо значение, оно будет использоваться вместо этого.Кроме того, настройте SF так, чтобы он не удалял заголовок сервера из вашего ответа, задав для конфигурации RemoveServiceResponseHeaders только что-то вроде «Дата», поскольку по умолчанию «Дата; Сервер»
...