2012-04-29 153 views
16

在通過代理服務器轉發到服務器之前,是否有任何請求頭添加或修改爲HTTP請求?HTTP代理服務器是否修改請求包?

如果是這樣,是對同一個數據包所做的更改,還是用於創建具有修改的新請求數據包的內容?

回答

25

有幾種不同類型的代理服務器。由於您提到了請求標頭,因此我將假設您正在討論HTTP代理服務器,它會轉發HTTP請求,而不是數據包。

注:HTTPS requests的(TLS/SSL通過CONNECT)的特殊情況下,代理服務器的TCP報文的只是將內容轉發(並不能檢查數據包,除非充當man-in-the-middle代理) 。


當然這取決於代理軟件和它的配置,但HTTP代理是預計遵循W3C的Guidelines for Web Content Transformation Proxies,其中指出很多東西,但最貼切:

  • 除在HEADGET之間進行轉換外,代理不得更改請求方法。

  • 如果請求中包含Cache-Control: no-transform指令,則代理不能改變請求,除非遵從RFC 2616 HTTP部分14.9.5節和13.5.2節中定義的透明HTTP行爲,並按照4.1.6 Additional HTTP Header Fields

  • 大於由RFC 2616 HTTP代理不應該修改比User-AgentAcceptAccept-CharsetAccept-Encoding,和Accept-Language頭字段其他首標字段的值所需的修改

    其它和不得刪除報頭字段。

  • 代理應該將請求發起者的IP地址添加到X-Forwarded-For HTTP頭字段中逗號分隔列表的末尾。

  • 代理必須(根據RFC 2616)包含Via HTTP頭字段。


總之,您可以普遍預期這些HTTP報頭由符合標準的代理更改/補充道:

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

我沒有得到這個角色 「轉發請求不包」。你的意思是它會重構來自傳入數據包的http請求,然後修改它們? – Ashwin 2012-04-29 06:45:16

+0

@Ashwin:我想你在這裏誤解了HTTP協議。 HTTP是一種應用程序協議,位於[OSI模型](http://en.wikipedia.org/wiki/OSI_model)的_application_層中。所有HTTP'數據包'實際上都是TCP數據包,HTTP不直接處理數據包(這全部發生在[OSI模型](http://en.wikipedia.org/wiki/OSI_model)的_transport_和_network_圖層上。 )。 – Xenon 2012-04-29 06:57:38

+0

當我在「www.google.com」中向bowser發出請求時,此請求會從應用程序級別(瀏覽器)移動到物理級別(即NIC)。現在,代理服務器檢索它,然後將物理層數據解碼到第2層等等以便傳輸(第4層)。在這裏修改數據然後轉發它? – Ashwin 2012-04-29 07:05:11