2012-04-29 5 views
16

Wird ein Anforderungsheader der HTTP-Anforderung hinzugefügt oder geändert, bevor er von einem Proxyserver an den Server weitergeleitet wird?Ändern HTTP-Proxy-Server Anfragepakete?

Wenn ja, werden die Änderungen an den gleichen Paketen vorgenommen, oder werden die Inhalte verwendet, um neue Anfragepakete mit den Änderungen zu erstellen?

Antwort

25

Es gibt ein paar verschiedene Arten von Proxy-Servern. Da Sie Anforderungsheader erwähnt haben, gehe ich davon aus, dass Sie über HTTP-Proxy-Server sprechen, die HTTP-Anfragen und nicht Pakete weiterleiten.

HINWEIS: Im speziellen Fall von HTTPS requests (TLS/SSL über CONNECT), Proxy-Server wird nur vorwärts der Inhalt der TCP-Pakete (und ist nicht in der Lage, die Pakete, es sei denn, die als eine man-in-the-middle Proxy zu überprüfen) .


Natürlich ist es auf der Proxy-Software und deren Konfiguration abhängig ist, aber HTTP-Proxies sind erwartet, dass die W3C Guidelines for Web Content Transformation Proxies, zu folgen, die viele Dinge erklärt, aber die meisten einschlägig:

  • Anders als zwischen HEAD und GET konvertieren dürfen Proxys Request-Methoden nicht ändern.

  • Wenn die Anforderung eine Cache-Control: no-transform Direktive enthält, dürfen Proxys die Anforderung nur ändern, um transparentem HTTP-Verhalten gemäß den Abschnitten in RFC 2616 Abschnitt 14.9.5 und Abschnitt 13.5.2 zu entsprechen und Header-Felder wie in beschrieben hinzuzufügen 4.1.6 Additional HTTP Header Fields.

  • Andere als die von RFC 2616 HTTP-Proxies erforderlichen Änderungen sollten nicht die Werte der Header-Felder außer den Feldern User-Agent, Accept, Accept-Charset, Accept-Encoding und Accept-Language Header ändern und darf nicht Header-Felder löschen.

  • Proxies sollte die IP-Adresse des Initiators der Anforderung an das Ende einer durch Kommata getrennte Liste in einem X-Forwarded-For HTTP-Header-Feld hinzufügen.

  • Proxies müssen (gemäß RFC 2616) ein HTTP-Header-Feld Via enthalten.


Zusammenfassend kann man im Allgemeinen erwarten, dass diese HTTP-Header von einem standardkonformen Proxy geändert/hinzugefügt werden:

  • User-Agent
  • Accept
  • Accept-Charset
  • Accept-Encoding
  • Accept-Language
  • X-Forwarded-For
  • Via
+0

Ich habe nicht den Teil "forward-Anfragen keine Pakete". Meinst du, dass es die HTTP-Anfrage von den eingehenden Paketen rekonstruieren und sie dann ändern wird? – Ashwin

+0

@Ashwin: Ich glaube, Sie missverstehen das HTTP-Protokoll hier. HTTP ist ein Anwendungsprotokoll, das in der Schicht des _application_ [OSI-Modells] ist (http://en.wikipedia.org/wiki/OSI_model). Alle HTTP ‚Pakete‘ sind wirklich TCP-Pakete und HTTP befasst sich nicht mit Paketen, die direkt (dies geschieht alles auf der _transport_ und _network_ Schichten des [OSI-Modell] (http://en.wikipedia.org/wiki/OSI_model)). – Xenon

+0

, wenn ich eine Anfrage im Bowser wie „www.google.com“ machen, reist diese Anforderung von der Anwendungsebene (Browser) direkt auf der physischen Ebene (das ist die NIC). Nun ruft der Proxy-Server sie ab und dekodiert dann die Daten der physikalischen Ebene in Schicht 2 usw. zum Transport (Schicht 4). Hier ändert er die Daten und leitet sie dann weiter? – Ashwin