用浏览器访问网址时,请求头(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 来源:知乎 著做权归做者全部。商业转载请联系做者得到受权,非商业转载请注明出处。
相关文章
相关标签/搜索