李姐 http header

116 阅读2分钟

http请求头那么多,死记硬背肯定是不行的,如果理解了原理,就会知道,一些常用的header之间是有逻辑关系的,不需要死记硬背,那么我们先来简单看一下。

http 协议,就是客户端(这里拿浏览器举例),和服务端之间传递消息的约定,可以理解为劫道的"黑话",只有黑话对的上,才能相互交流、交易,那么浏览器和服务端都有哪些"黑话"呢?

媒体类型(MIME-type)

首先,浏览器向服务器请求数据,双方肯定要知道是什么类型的数据,不然丢过来一大坨数据,浏览器要怎么处理呢?给浏览器返回个html文档,浏览器傻乎乎的当做图片解析? 所以引出 type 的概念,对应到http中,就引出了两个header。

  1. Accept,作用是浏览器告诉服务器,我能接受这些类型,你看着办。

格式为: Accept: type/subtype,值可以是多个,用";"分割,举个栗子 Accept: text/plain; text/html

完整MIME类型见MDN文档

  1. Content-type,作用是服务器告诉浏览器,我给你数据是什么类型。

格式为: Content-type: type/subtype,举个栗子 Content-type: text/plain

编码格式(Encoding)

数据难道要直接传输到网络么?当然要压缩,数据传输过程通常都是要编码压缩的,虽然这个步骤开发者通常不需要感知,浏览器、cdn、运营商等都是会处理的,所以又引出了两个header。

  1. Accept-Encoding 浏览器告诉服务器,我能看懂哪些类型的压缩。
  2. Content-Encoding 服务器告诉浏览器,你用我这玩意解码,贼好使。

语言(Language)

有了上述两个过程,已经可以正确的传递并解析数据了,但这只是计算机能正确的理解,还需要给出让人理解的标识,假如一个多语言的网站,一个印度人访问,返回的是德语,岂不是一脸懵,所以引出Language的概念,对应的 http header

  1. Accept-Language 期望页面的语言
  2. Content-Language 服务端返回页面的语言