Указания за HTTP заглавни части
Заглавните части са много важна част от обработката на HTTP заявките и всяка от тях има своя
Заглавните части са много важна част от обработката на HTTP заявките и всяка от тях има своя собствена семантика и особености. По подразбиране повечето заглавни части се проксират, но някои от тях, използвани за контрол на доставянето на заявката, се коригират автоматично или се премахват от прокси сървъра. Връзките между клиента и прокси сървъра и между прокси сървъра и дестинацията са независими една от друга. Затова заглавните части, които засягат връзката и транспортния слой, трябва да бъдат филтрирани. Много заглавни части съдържат информация като имена на домейни, пътища или други данни, които могат да бъдат засегнати, когато обратен прокси сървър е включен в архитектурата на приложението. По-долу е представена колекция от указания за това как конкретни заглавни части могат да бъдат засегнати и какво да предприемете по отношение на тях.
Филтриране на заглавни части в YARP
YARP автоматично премахва заглавни части на заявката и отговора, които биха могли да повлияят на способността му да препраща заявката правилно, или които биха могли да бъдат използвани злонамерено за заобикаляне на функции на прокси сървъра. Пълен списък можете да намерите тук, а по-долу са описани някои по-важни моменти.
Connection , KeepAlive , Close
Тези заглавни части контролират начина на управление на TCP връзката и се премахват, за да не се повлияе на връзката от другата страна на прокси сървъра.
Transfer-Encoding
Тази заглавна част описва формата на тялото на заявката или отговора при преноса, например 'chunked', и се премахва, защото форматът може да се различава между вътрешната и външната връзка. Входящият и изходящият HTTP стек ще добавят транспортни заглавни части при необходимост.
TE
През прокси сървъра се пропуска само стойността TE: trailers, тъй като тя е необходима за някои реализации на gRPC.
Upgrade
Тя се използва за протоколи като WebSockets. По подразбиране се премахва и се добавя обратно само за изрично поддържаните протоколи (WebSockets, SPDY).
Proxy-*
Това са заглавни части, използвани с прокси сървъри, и не се считат за подходящи за препращане.
Alt-Svc
Тази заглавна част на отговора се използва при надграждания до HTTP/3 и важи само за непосредствената връзка.
Заглавни части за разпределено проследяване
Тези заглавни части включват TraceParent , Request-Id , TraceState , Baggage и Correlation- Context .
Те се премахват автоматично въз основа на DistributedContextPropagator.Fields, което позволява на препращащия HttpClient да ги замени с актуализирани стойности.
Можете да се откажете от промяната на тези заглавни части, като зададете SocketsHttpHandler.ActivityHeadersPropagator на null :
C# services.AddReverseProxy()
.ConfigureHttpClient((_, handler) => handler.ActivityHeadersPropagator =
null);Strict-Transport-Security
Тази заглавна част инструктира клиентите винаги да използват HTTPS, но може да възникне конфликт между стойностите, предоставени от прокси сървъра и от дестинацията. За да се избегне объркване, стойността от дестинацията не се копира в отговора, ако вече е била добавена стойност в отговора от прокси приложението.
Други указания за заглавни части
Host
Заглавната част Host указва за кой сайт на сървъра е предназначена заявката. По подразбиране тя се премахва, тъй като хост името, използвано публично от прокси сървъра, вероятно се различава от това, използвано от услугата зад прокси сървъра. Това поведение може да се конфигурира чрез трансформацията RequestHeaderOriginalHost.
X-Forwarded-* , Forwarded
Тъй като за комуникацията с дестинацията се използва отделна връзка, тези заглавни части на заявката могат да се използват за препращане на информация за оригиналната връзка, като например IP адрес, схема, порт и клиентски сертификат. X-Forwarded-For , X-Forwarded-Proto , X-Forwarded-Host и X-Forwarded-Prefix са активирани по подразбиране. Тази информация е податлива на атаки чрез подправяне (spoofing), затова всички съществуващи заглавни части в заявката се премахват и заменят по подразбиране. Приложението на дестинацията трябва да бъде внимателно относно това колко доверие оказва на тези стойности. Вижте трансформациите за конфигуриране на тези заглавни части в прокси сървъра. За указания относно конфигурирането на приложението на дестинацията да чете тези заглавни части, вижте Configure ASP.NET Core to work with proxy servers and load balancers.
X-http-method-override , x-http-method , x-method-override
Някои клиенти и сървъри ограничават кои HTTP методи позволяват (например GET). Тези заглавни части на заявката понякога се използват за заобикаляне на тези ограничения. По подразбиране тези заглавни части се проксират. Ако искате да предотвратите тези заобикаляния в прокси сървъра, използвайте трансформацията RequestHeaderRemove.
Set-Cookie
Тази заглавна част на отговора може да съдържа полета, които ограничават аспекти на URL адреса, като схема, домейн или път, за които бисквитката трябва да се използва. Използването на обратен прокси сървър може да промени ефективната схема, домейн или път на даден сайт спрямо публичната гледна точка. Макар да е възможно да презаписвате бисквитките в отговора чрез персонализирани трансформации, препоръчваме вместо това да използвате описаните по-горе заглавни части Forwarded, за да предадете правилните стойности на приложението на дестинацията, така че то да може да генерира правилните заглавни части set-cookie.
Location
Тази заглавна част на отговора се използва при пренасочвания и може да съдържа схема, домейн и път, различни от публичните стойности поради използването на прокси сървъра. Макар да е възможно да презапишете заглавната част Location чрез персонализирани трансформации, препоръчва се вместо това да използвате описаните по-горе заглавни части Forwarded, за да предадете правилните стойности на приложението на дестинацията, така че то да може да генерира правилните заглавни части Location.
Server
Тази заглавна част на отговора указва каква сървърна технология е използвана за генериране на отговора (например IIS, Kestrel). По подразбиране тази заглавна част се проксира от дестинацията. Приложенията, които искат да я премахнат, могат да използват трансформацията ResponseHeaderRemove, като в такъв случай
ще се използва подразбиращата се заглавна част на сървъра на прокси сървъра. Потискането на подразбиращата се заглавна част на сървъра на прокси сървъра е специфично за
сървъра, например за Kestrel.
X-Powered-By
Тази заглавна част на отговора указва каква уеб рамка е използвана за генериране на отговора (например ASP.NET). ASP.NET Core не генерира тази заглавна част, но IIS може. По подразбиране тази заглавна част се проксира от дестинацията. Приложенията, които искат да я премахнат, могат да използват трансформацията ResponseHeaderRemove.
Тази статия е създадена от автора с помощта на AI. Научете повече