用瀏覽器訪問網址時,請求頭(request header)是根據什麼生成的?

http request header是如何生成的?咱們能不能修改?主要有三種狀況:
  1. 瀏覽器自動生成的請求。絕大部分正經常使用戶訪問都是這類狀況,只要是用戶主動輸入網址訪問時發送的http請求,那這些頭部字段都是瀏覽器自動生成的,好比host,cookie,user-agent, Accept-Encoding:等。
  2. 瀏覽器插件,javascript腳本增長或者修改的header。JS可以控制瀏覽器發起請求,也能在這裏增長一些header,可是考慮到安全和性能的緣由,對JS控制 header的能力作了一些限制,好比host和cookie, user-agent等這些字段,JS是沒法干預的。
  • Accept-Charset
  • Accept-Encoding
  • Access-Control-Request-Headers
  • Access-Control-Request-Method
  • Connection
  • Content-Length
  • Cookie
  • Cookie2
  • Date
  • DNT
  • Expect
  • Host
  • Keep-Alive
  • Origin
  • Referer
  • TE
  • Trailer
  • Transfer-Encoding
  • Upgrade
  • User-Agent
  • Vi
更加詳細的信息能夠參考這裏: XMLHttpRequest Level 1
3.中間代理。若是用戶請求要通過一些中間代理(好比運營商或者公司網關),中間代理可以查看和修改用戶的所有數據,任何頭部字段。除非咱們使用了HTTPS。

不一樣的header字段有不一樣的意義,因此生成的依據也不同。我也簡單分一下類:
  1. 跟用戶請求和用戶屬性相關的,好比host這個字段的值就是你在瀏覽器中輸入的域名或者IP。cookie或者一些其餘數據也是用戶以前訪問時保存在瀏覽器端的,再次訪問時瀏覽器會自動填充這些字段。
  2. 瀏覽器能力和特性相關的。好比瀏覽器和操做系統的版本,可以支持的字符集,是否支持壓縮等。這些主要包括user-agent, connection, accept相關。
  3. 安全和協議相關的,好比有Upgrade-Insecure-Requests, hsts, upgrade ,Access-Control-Allow-Origin 等。
上面的分類不太標準,算是我大概羅列的吧。

至於能不能修改http header,個人建議是固然不能隨便修改任何字段。但也有一些狀況:
  1. 有一些字段是絕對不能修改的,好比最重要的host字段,若是沒有host值,http1.1協議會認爲這是一個不規範的請求從而直接丟棄。一樣的若是隨便修改這個值,好比將騰訊首頁改爲百度一下,你就知道,那目的網站也返回不了正確的內容。user-agent也不建議隨便修改,有不少網站是根據這個字段作內容適配的,好比PC和手機確定是不同的內容。
  2. 有一些字段可以修改,好比connection,cache-control等。不會影響你的正常訪問,但有可能會慢一點。
  3. 還有一些字段能夠刪除,好比你不但願網站記錄你的訪問行爲或者歷史信息,你能夠刪除cookie,referfer等字段。
  4. 固然你也能夠自定義構造任意你想要的字段,通常沒什麼影響,除非header太長致使內容截斷。一般自定義的字段都建議X-開頭。好比X-test: lance。
做者:player gg 連接:https://www.zhihu.com/question/34603729/answer/85911416 來源:知乎 著做權歸做者全部。商業轉載請聯繫做者得到受權,非商業轉載請註明出處。
相關文章
相關標籤/搜索