关于HTTP Headers的讨论

关于HTTP Headers的讨论   

            前些天因为一些编程须要,接触到了HTTPheader的有关知识,因而就本着学习的目的索性把这个东西弄个明白。今天在这里总结一下,但愿能帮助到一些有这方面知识要求的同窗,也方便本身在之后的学习中做参考。因为我也是第一次接触到这个东西,若是有什么错误的理解和表述但愿你们能够热心的及时提出来,以避免误导了更多看到这篇文章的人,也方便我本身及时更正本身的错误。 html

下面入正题。 web

WHAT IS HTTP 编程

HTTP是“Hypertext Transfer Protocol”的缩写,是一个应用层协议,整个万维网都在使用这种协议,几乎你在浏览器里看到的大部份内容都是经过http协议来传输的。 浏览器

WHAT  IS  HTTPHEADER 缓存

HTTP Headers(HTTP头部)HTTP请求和相应的核心,它承载了关于客户端浏览器,请求页面,服务器等相关的信息。 安全

HTTP Headers 中的 HTTP请求 服务器

当咱们打开浏览器,点击一个超级连接的时候(好比https://www.google.com.hk/ )此时浏览器会作出相似以下的HTTP请求 cookie

这个图是我在打开这个网页的时候用HTTP Analyzer抓取的 app

下面咱们一行一行的来解释各句话的的意思  dom

第一行,被称做“Request - Line”请求行它包括三个部分: 

I)第一个字段为“method” 它代表这是何种类型的请求最多见的请求类型有 GET,     POST 和 HEAD.学过WEB的应该比较熟悉这三种方法的区别与联系,此处使用的GET 方法,这也是浏览器中比较经常使用的方法

II)第二个字段为“path” 它体现的是主机以后的路径例如,当你作出请求 

      GET /webhp?hl=zh-CN&sourceid=cnh path HTTP/1.1path就是

 “/webhp?hl=zh-CN&sourceid=cnhes/.它表示获取/webhp?hl=zh-CN目录下资源ID   cnhes的页面,再如GET /images/logo.gif HTTP/1.1,表示从/images目录下请求logo.gif   动态图片文件。

 III)第三个字段为“protocol” 包含有 “HTTP” 和版本号现代浏览器都会使用1.1.


剩下的部分每行都是一个“NameValue”对。它们包含了各式各样关于请求和你浏览器的信息

    第二行,字段以下 它指明了主机的名称很显然这是Googleweb服务器;


    第三行,字段以下它代表了连接状态

        若是为close 则表示告诉WEB服务器或者代理服务器,在完成本次请求的响应后,断开链接,不要等待本次链接的后续请求了

        Keepalive 则表示告诉WEB服务器或者代理服务器,在完成本次请求的响应后,保持链接,等待本次链接的后续请求。

        Keep-Alive:若是浏览器请求保持链接,则该头部代表但愿 WEB 服务器保持链接多长时间(秒)。例如:Keep-Alive300


    第四行,

        是在告诉web服务器本身接受什么样的介质text/html表示接受text文档下的子文档html文档,*/*表示接受全部的文档


    第五行

                它指明了  

                一、浏览器名,版本号,Moziall/5.0 Chrome/31.0.1650.63 Safari/537.36AppleWebKit/537.36 (KHTML, like Gecko

                二、操做系统名,版本号Windows NT 6.1; WOW64

                三、默认的)语言等

    第六行,这应该是Chrome的一些变量参数,我也不太清楚这个东西

 

    第七行,表示能够接受的编码,大部分的现代浏览器都支持gzip压缩,并会把这一信息报告给服务器。这时服务器就会压缩过的HTML发送给浏览器。

            这能够减小近80%的文件大小,以节省下载时间和带宽。

    第八行,表示支持的语言

            这个信息能够说明用户的默认语言设置。若是网站有不一样的语言版本,那么就能够经过这个信息来重定向用户的浏览器。它还能够经过逗号分割来携带多国语言。第一个会是首选的语                 言,其它语言会携带一个“q”值,来表示用户对该语言的喜爱程度(0~1)。

        第九行,

         

        是有关cookie的说明

 

    另外,还可能有以下字段一并整理以下

    Referer字段

      Referer字段容许客户端指定请求uri的源资源地址,这能够容许服务器生成回退链表,可用来登录、优化cache等。他也容许废除的或错误的链接因为维护的目的被追踪。

        若是请求的uri没有本身的uri地址,Referer不能被发送。若是指定的是部分uri地址,则此地址应该是一个相对地址。

    Range字段

          Range字段能够请求实体的一个或者多个子范围。例如,

          表示头500个字节:bytes=0-499

          表示第二个500字节:bytes=500-999

          表示最后500个字节:bytes=-500

          表示500字节之后的范围:bytes=500-

          第一个和最后一个字节:bytes=0-0,-1

      同时指定几个范围:bytes=500-600,601-999

      可是服务器能够忽略此请求头,若是无条件GET包含Range请求头,响应会以状态码206PartialContent)返回而不是以200OK)。

 

HTTP Headers 中的 HTTP响应

                这是HTTP响应的Header部分

                 

                第一行,“Status Header”称为状态行HTTP/1.1 302 Found意思是说,请求的资源如今临时从不一样的 URI 响应请求。

                因为这样的重定向是临时的,客户端应当继续向原有地址发送之后的请求,下附HTTP状态码表 

状态码

已定义范围

分类

1XX

100-101

信息提示

2XX

200-206

成功

3XX

300-305

重定向

4XX

400-415

客户端错误

5XX

500-505

服务器错误

                下面是详细更的解释    

   I1XX信息状态码

状态码

 状态消息

 含义

100

Continue(继续)

收到了请求的起始部分,客户端应该继续请求

101

Switching Protocols(切换协议)

服务器正根据客户端的指示Update Header)切换协议

  II2XX成功状态码

状态码

状态消息

含义

200

OK

服务器成功处理了请求(这个是咱们见到最多的)

201

Created(已建立)

对于那些要服务器建立对象的请求来讲,资源已建立完毕。

202

Accepted(已接受)

请求已接受, 但服务器还没有处理

203

Non-Authoritative Information(非权威信息)

服务器已将事务成功处理,只是实体Header包含的信息不是来自原始服务器,而是来自资源的副本。

204

No Content(没有内容)

Response中包含一些Header和一个状态行, 但不包括实体的主题内容(没有response body

205

Reset Content(重置内容)

 另外一个主要用于浏览器的代码。意思是浏览器应该重置当前页面上全部的HTML表单。

206

Partial Content(部份内容)

 部分请求成功             

  III3XX成功状态码

状态码

状态消息

含义

300

Multiple Choices(多项选择)

 客户端请求了实际指向多个资源的URL。这个代码是和一个选项列表一块儿返回的,而后用户就能够选择他但愿的选项了

301

Moved Permanently(永久移除)

请求的URL已移走。Response中应该包含一个Location URL, 说明资源如今所处的位置

302

Found(已找到)

与状态码301相似。但这里的移除是临时的。 客户端会使用Location中给出的URL,从新发送新的HTTP request

303

 See Other(参见其余)

相似302

304

Not Modified(未修改)

客户的缓存资源是最新的, 要客户端使用缓存

305

 Use Proxy(使用代理)

必须经过代理访问资源, 代理的地址在Response Location

306

 未使用

 这个状态码当前没使用

307

Temporary Redirect(临时重定向

相似302

                 

                IV)客户端错误状态码

状态码

状态消息

含义

400

Bad Request(坏请求)

告诉客户端,它发送了一个错误的请求。

401

Unauthorized(未受权)

须要客户端对本身认证

402

Payment Required(要求付款)

这个状态还没被使用, 保留给未来用

403

Forbidden(禁止)

请求被服务器拒绝了

404

Not Found(未找到)

未找到资源

405

Method Not Allowed(不容许使用的方法)

不支持该Request的方法。

406

Not Acceptable(没法接受)


407

Proxy Authentication Required(要求进行代理认证)

与状态码401相似, 用于须要进行认证的代理服务器

408

Request Timeout(请求超时)

 若是客户端完成请求时花费的时间太长, 服务器能够回送这个状态码并关闭链接

409

Conflict(冲突)

发出的请求在资源上形成了一些冲突

410

Gone(消失了)

服务器曾经有这个资源,如今没有了, 与状态码404相似

411

Length Required(要求长度指示)

服务器要求在Request中包含Content-Length

412

Precondition Failed(先决条件失败)


413

Request Entity Too Large(请求实体太大)

客户端发送的实体主体部分比服务器可以或者但愿处理的要大

414

Request URI Too Long(请求URI太长)

客户端发送的请求所携带的URL超过了服务器可以或者但愿处理的长度

415

Unsupported Media Type(不支持的媒体类型)

服务器没法理解或不支持客户端所发送的实体的内容类型

416

Requested Range Not Satisfiable(所请求的范围未获得知足)


417

Expectation Failed(没法知足指望)

            

                VI)服务器端错误状态码  

状态码

状态消息

含义

500

Internal Server Error(内部服务器错误)

服务器遇到一个错误,使其没法为请求提供服务

501

Not Implemented(未实现)

客户端发起的请求超出服务器的能力范围(好比,使用了服务器不支持的请求方法)时,使用此状态码。

502

Bad Gateway(网关故障)

代理使用的服务器遇到了上游的无效响应

503

Service Unavailable(未提供此服务)

服务器目前没法为请求提供服务,但过一段时间就能够恢复服务

504

Gateway Timeout(网关超时)

与状态吗408相似, 可是响应来自网关或代理,此网关或代理在等待另外一台服务器的响应时出现了超时

505

HTTP Version Not Supported(不支持的HTTP版本)

服务器收到的请求使用了它不支持的HTTP协议版本。 有些服务器不支持HTTP早期的HTTP协议版本,也不支持过高的协议版本

                第二行,

                

                这个头部是用来重定向的。若是响应代码为 301 或者 302 ,服务器就必须发送该头部。


                第三行,

                

                

                Cache-Control指定请求和响应遵循的缓存机制。在请求消息或响应消息中设置Cache-Control并不会修改另外一个消息处理过程当中的缓存处理过程。

                请求时的缓存指令包括no-cacheno-storemax-agemax-stalemin-freshonly-if-cached,响应消息中的指令包括publicprivateno-cacheno-storeno-transformmust-revalidateproxy-revalidatemax-age。各个消息中的指令含义以下:

                  Public指示响应可被任何缓存区缓存。

                  Private指示对于单个用户的整个或部分响应消息,不能被共享缓存处理。这容许服务器仅仅描述当用户的部分响应消息,此响应消息对于其余用户的请求无效。

                  no-cache指示请求或响应消息不能缓存

                  no-store用于防止重要的信息被无心的发布。在请求消息中发送将使得请求和响应消息都不使用缓存。

                  max-age指示客户机能够接收生存期不大于指定时间(以秒为单位)的响应。

                  min-fresh指示客户机能够接收响应时间小于当前时间加上指定时间的响应。

                max-stale指示客户机能够接收超出超时期间的响应消息。若是指定max-stale消息的值,那么客户机能够接收超出超时期指定值以内的响应消息。            

                第四行,

                                这个头部包含了文档的”mime-type”。浏览器将会依据该参数决定如何对文档进行解析。                     

                                Content-Type: text/html; charset=UTF-8

                               text’ 是文档类型,‘html’则是文档子类型。 这个头部还包括了更多信息,例如 charset 指明了字符集;

                若是是一个图片,将会发送这样的响应:Content-Type: image/gif  浏览器能够经过mime-type来决定使用外部程序仍是自身扩展来打开该文档。

                                以下的例子将会调用Adobe Reader

                                Content-Type: application/pdf

                                直接载入,Apache一般会自动判断文档的mime-type而且添加合适的信息到头部去。

                        而且大部分浏览器都有必定程度的容错,在头部未提供或者错误提供该信息的状况下它会去自动检测mime-type        


           第五行,很显然,这是指明了响应的时间(GMT为格林威治世界时间)。


           第六行,

                Server响应头包含处理请求的原始服务器的软件信息。此域能包含多个产品标识和注释,产品标识通常按照重要性排序显然,Google使用的是自家的Google Web Server

                下附国内网站的Web服务器表

业名称

  Web服务器

说明

谷歌中国

   Gws

谷歌自主开发的Google Web Server

百度

   BWS

由百度自主开发的Baidu Web Server

人人网

  Ngnix

 由Igor Sysoev为俄罗斯访问量第二

 的Rambler.ru站点开发的

 

腾讯

  Ngnix


163

  Ngnix


淘宝

  Tengine

(已开源)

 

 

 Ngnix的一个变种

 

 

Sina

  Apache


搜狐

  Apache

Apache旗下的开源http服务器

开心网

  Apache


优酷

  Apache


                第七行,

                  Content-Length: WEB 服务器告诉浏览器本身响应的对象的长度。

                剩下的部分是有关安全的一些字段,这里不作过多讨论(暂不清楚具体意思)

                有的还有Set-Cookie字段

                Set-Cookie:BDRCVFR[feWj1Vr5u3D]=I67x6TjHwwYf0; path=/; domain=.baidu.com

                Set-Cookie:BD_CK_SAM=1;path=/

                Set-Cookie:BDSVRTM=175; path=/

                Set-Cookie:H_PS_PSSID=5013_5141_5041_1422_4261_4760; path=/; domain=.baidu.com

                当一个网站须要设置或者更新你浏览的cookie信息时,它就会使用这样的头部           

      

                还有的会有这些字段

                 

                其中ExpireWEB服务器代表该实体将在何时过时,对于过时了的对象,只有在跟 WEB服务器验证了其有效性后,才能用来响应客户请求。

                 Last-Modified 顾名思义,这个头部信息用GMT格式代表了文档的最后修改时间;         

                Etag 服务器可能会将该信息和每一个被发送文件一块儿响应给浏览器。该值能够包含文档    的最后修改日期,文件大小或者文件校验和。这是一个对象(好比URL)的标志值, 就一个对                象而言,好比一个 html 文件,若是被修改了,其 Etag 也会别修改, 因此, ETag 的做用跟 Last-Modified 的做用差很少,主要供 WEB 服务器 判断一个对象是 否改变了。好比前一次请              求某个 html 文件时,得到了其 ETag,当此次又请求这个文 件时,浏览器就会把先前得到的 ETag 值发送给 WEB 服务器,而后 WEB 服务器会 把这个 ETag 跟该文件的当前 ETag 进行              对比,而后就知道这个文件   有没有改变了。

               还有以下字段

                If-Match:若是对象的 ETag 没有改变,其实也就意味著对象没有改变, 才执行请求的动做。

                If-None-Match:若是对象的 ETag 改变了,其实也就意味著对象也改变了,才执行请求的动做。

                对于Accept-Ranges

                WEB服务器代表本身是否接受获取其某个实体的一部分(好比文件的一部分)的请求。

                bytes:表示接受,none:表示不接受

                另外,还有

                Vary:Accept-Encoding    诉代理服务器缓存两种版本的资源:压缩和非压缩,这有助于避免一些公共代理不能正确地检测Content-Encoding标头的问题

                Transfer-Encoding:chunked 当不能预先肯定报文体的长度时,不可能在头中包含Content-Length域来指明报文体长度,此时就须要经过Transfer-Encoding域来肯定报文体长度,一般状况                               下,Transfer-Encoding域的值应当为chunked,代表采用chunked编码方式来进行报文体的传输。

                基本上关于HTTP Headers的内容就到这里了。但愿能够帮助到你们!

相关文章
相关标签/搜索