HTTP消息的头字段:谁选择它们?

时间:2015-08-09 16:20:28

标签: http http-headers

查看Google Chrome开发人员工具中的网络面板,我可以读取网页中每个文件的HTTP请求和响应消息,特别是,我可以读取所有字段的起始行和标题。

我知道(我希望这是对的)每条HTTP消息的起始行都有一个特定而严格的结构(当然,请求和响应消息不同),并且不能错过起始行内的任何元素。

与起始行不同,HTTP消息的标题包含其他信息,因此,我猜,标题字段是兼容性的,或者至少不像开始行中的字段那样严格要求。

考虑到这一切,我想知道:谁在HTTP消息中设置头字段?或者,换句话说,如何确定HTTP消息的头字段?

例如,我实际上可以看到网页的HTTP请求消息是这样的:

GET / HTTP/1.1
Host: www.corriere.it
Connection: keep-alive
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.130 Safari/537.36
Accept-Encoding: gzip, deflate, sdch
Accept-Language: it-IT,it;q=0.8,en-US;q=0.6,en;q=0.4,de;q=0.2
Cookie: rccsLocalPref=milano%7CMilano%7C015146; rcsLocalPref=milano%7CMilano; _chartbeat2=DVgclLD1BW8iBl8sAi.1422913713367.1430683372200.1111111111111111; rlId=8725ab22-cbfc-45f7-a737-7c788ad27371; __ric=5334%3ASat%20Jun%2006%202015%2014%3A13%3A31%20GMT+0200%20%28ora%20legale%20Europa%20occidentale%29%7C; optimizelyEndUserId=oeu1433680191192r0.8780217287130654; optimizelySegments=%7B%222207780387%22%3A%22gc%22%2C%222230660652%22%3A%22false%22%2C%222231370123%22%3A%22referral%22%7D; optimizelyBuckets=%7B%7D; __gads=ID=bbe86fc4200ddae2:T=1434976116:S=ALNI_MZnWxlEim1DkFzJn-vDIvTxMXSJ0g; fbm_203568503078644=base_domain=.corriere.it; apw_browser=3671792671815076067.; channel=Direct; apw_cache=1438466400.TgwTeVxF.1437740670.0.0.0...EgjHfb6VZ2K4uRK4LT619Zau06UsXnMdig-EXKOVhvw; ReadSpeakerSettings=enlarge=enlargeoff; _ga=GA1.2.1780902850.1422986273; __utma=226919106.1780902850.1422986273.1439110897.1439114180.19; __utmc=226919106; __utmz=226919106.1439114180.19.18.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=(not%20provided); s_cm_COR=Googlewww.google.it; gvsC=New; rcsddfglr=1441375682.3.2.m0i10Mw-|z1h7I0wH.3671792671815076067..J3ouwyCkNXBCyau35GWCru0I1mfcA3hRLNURnDWREPs; cpmt_xa=5334,5364; utag_main=v_id:014ed4175b8e000f4d2bb480bdd10606d001706500bd0$_sn:74$_ss:1$_st:1439133960323$_pn:1%3Bexp-session$ses_id:1439132160323%3Bexp-session; testcookie=true; s_cc=true; s_nr=1439132160762-Repeat; SC_LNK_CR=%5B%5BB%5D%5D; s_sq=%5B%5BB%5D%5D; dtLatC=116p80.5p169.5p91.5p76.5p130.5p74p246.5p100p74.5p122.5; dtCookie=E4365758C13B82EE9C1C69A59B6F077E|Corriere|1|_default|1; dtPC=-; NSC_Wjq_Dpssjfsf_Dbdif=ffffffff091a1f8d45525d5f4f58455e445a4a423660; hz_amChecked=1

如何选择这些标题字段?谁/他们选择了什么? (浏览器?当然不是我......)

P.S .: 希望我的问题很明确,请原谅我糟糕的英语

2 个答案:

答案 0 :(得分:2)

所有互联网网站都托管在HTTP servers上,这些标头由托管该网页的http服务器设置。它们用于控制页面的显示,缓存和编码方式。

Web浏览器在从服务器请求页面时设置标头。这种相互通信协议是上面链接的HTTP协议。

答案 1 :(得分:1)

  

这里是请求消息的所有可能标头字段的列表:问题是,为什么更加明智的选择器只选择其中一些?

浏览器不会在每个请求中包含所有可能的请求标头,因为:

  • 它们不适用于当前请求
  • 默认值为所需值

例如:

Accept告诉服务器响应中只接受某些数据格式。如果可以接受任何类型的数据,则可以省略它,因为默认值是“所有”。

Content-Length描述了请求正文的长度。 GET请求没有正文,因此无需描述长度。

Cookie包含服务器(或JavaScript)在先前请求中设置的cookie。如果尚未设置cookie,则无法将其发送回服务器。

等等。