http request header是如何生成的?咱们能不能修改?主要有三种状况:
- 浏览器自动生成的请求。绝大部分正经常使用户访问都是这类状况,只要是用户主动输入网址访问时发送的http请求,那这些头部字段都是浏览器自动生成的,好比host,cookie,user-agent, Accept-Encoding:等。
- 浏览器插件,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字段有不一样的意义,因此生成的依据也不同。我也简单分一下类:
- 跟用户请求和用户属性相关的,好比host这个字段的值就是你在浏览器中输入的域名或者IP。cookie或者一些其余数据也是用户以前访问时保存在浏览器端的,再次访问时浏览器会自动填充这些字段。
- 浏览器能力和特性相关的。好比浏览器和操做系统的版本,可以支持的字符集,是否支持压缩等。这些主要包括user-agent, connection, accept相关。
- 安全和协议相关的,好比有Upgrade-Insecure-Requests, hsts, upgrade ,Access-Control-Allow-Origin 等。
上面的分类不太标准,算是我大概罗列的吧。
至于能不能修改http header,个人建议是固然不能随便修改任何字段。但也有一些状况:
- 有一些字段是绝对不能修改的,好比最重要的host字段,若是没有host值,http1.1协议会认为这是一个不规范的请求从而直接丢弃。一样的若是随便修改这个值,好比将腾讯首页改为百度一下,你就知道,那目的网站也返回不了正确的内容。user-agent也不建议随便修改,有不少网站是根据这个字段作内容适配的,好比PC和手机确定是不同的内容。
- 有一些字段可以修改,好比connection,cache-control等。不会影响你的正常访问,但有可能会慢一点。
- 还有一些字段能够删除,好比你不但愿网站记录你的访问行为或者历史信息,你能够删除cookie,referfer等字段。
- 固然你也能够自定义构造任意你想要的字段,通常没什么影响,除非header太长致使内容截断。一般自定义的字段都建议X-开头。好比X-test: lance。
做者:player gg 连接:https://www.zhihu.com/question/34603729/answer/85911416 来源:知乎 著做权归做者全部。商业转载请联系做者得到受权,非商业转载请注明出处。