前端须知的http header

文件信息:javascript

Content-Type: application/x-javascript
Content-Length: 2000

Content-Type:指定请求和响应的内容类型,若是未指定即为text/htmlhtml

      经常使用的Content-Typejava

        text/plain:普通文本json

        tex/html:html文本浏览器

        application/x-javascript:js缓存

        application/x-www-form-urlencoded:默认形式表单发包类型服务器

        multipart/form-data:用在发送文件的post包中网络

        application/json:经过json传输app

        application/xml:经过xml传输ide

Content-Length:用于指定请求或相应的内容长度

       1.若是存在Transfer-Encoding(chuncked)则在头信息中不能有Content-Type有也会被忽略

       2.若是是短链接则能够经过关闭链接来肯定长度

       3.Content-Length必须与传输内容长度相同,过长会致使超时,太短会直接截断

       4.http1.1以前不支持keep-alive,Content-Length无关紧要。http1.1若为keep-alive则chuncked和Content-Length必须二选一,若为非keep-alive则Content-Length无关紧要

压缩:

Accept-Encoding: gzip
Content-Encoding: gzip

编码方式

  • gzip  代表实体采用GNU zip编码
  • compress 代表实体采用Unix的文件压缩程序
  • deflate  代表实体是用zlib的格式压缩的
  • identity  代表没有对实体进行编码。当没有Content-Encoding header时, 就默认为这种状况

压缩流程:

  1.浏览器在发送请求时会带上Accept-Encoding头信息,里面有浏览器支持的全部压缩方式。

  2.服务器在接收到浏览器发过来的信息以后,对Accept-Encoding里面的信息进行判断,选择合适的压缩方式对相应内容进行压缩,而后增长Content-Encoding头信息,将其改成当前使用的压缩方式名,将响应发回浏览器。

  3.浏览器接收到响应后,经过对Content-Encoding中的信息进行判断,选择合适的解压方式进行解压,并展现

 代理缓存:

Vary: Accept-Encoding

  代理缓存,从服务器到浏览器可能通过多个中间体,如:缓存服务器。如今不少应用都用到了缓存机制,而一个url可能会返回多个文档,中间服务器应该缓存哪些,浏览器请求时应该返回哪些文档,这就涉及到浏览器和服务器之间的一个内容协商问题。

  通常有两种方式:

    1)服务器每次都返回多个版本,300(Mutiple choices),让浏览器本身选择,可是这种会致使多一次网络请求,还有就是某些版本的文档是给具备特殊功能(好比压缩)的浏览器准备的,让普通用户选可能会出现问题

    2)服务器根据浏览器发送的Accept字段来选择合适的内容发送

请求字段  字段说明  响应头字段
Accept  告知服务器接收哪一种媒体类型 Content-Type
Accept-Encoding 告知服务器接收哪一种压缩形式 Content-Encoding
Accept-Language 告知服务器接受哪一种语言 Content-Language
Accept-Charset 告知服务器接收哪一种编码方式 Content-Type

  有时候这四个字段不够用会用User-Agent和Cookie一块判断,这时候就须要加一个

Vary: User-Agent, Cookie

  通常来讲只须要在Vary中写除了Accept-*以外的字段,可是存在一些服务器对这个机制实现有Bug,它们会直接忽略响应头中的Content-Encoding,从而可能会给不支持压缩的浏览器发回压缩后的文档,因此若是有压缩的话,须要给响应头中增长Accept-Encoding使得Bug服务器可以正确的缓存。

缓存:

Expires: Mon, 24 Feb 2014 03:34:00 GMT 
Cache-Control: max-age=3600
If-None-Match: "b3234c-9999-45334a15"
Etag: "b3234c-9999-45334a15"
If-Modified-Since: Mon, 24 Feb 2014 03:34:00 GMT 
Last-Modified: Mon, 24 Feb 2014 03:34:00 GMT 

  Expires:过时时间,这个属性告诉缓存方,相关副本在多长时间内是可用的,当超过这个时间,缓存方就会向服务器发送请求从新获取

      注意点: 1.时间格式必须为GMT时间格式,其余时间格式,其他的时间格式都会被当成以前的时间

           2.缓存方时间必须和服务器时间一致,否则会致使提早或延迟更新

  Cache-Control:缓存控制

      经常使用的有如下几种属性值

      max-age:指示在多少秒以内,缓存方不用向服务器发送这个文件的请求,直接使用缓存。在max-age时间以内,浏览器请求该文件的响应老是为200(from cache)

      no-cache:强制缓存方必须每次都向服务器发送请求,由服务器决定缓存方保存的是否为最新的文件。若是为最新的,服务器就会返回304(Not Modified),缓存方直接使用缓存;若是不是最新返回200,并返回最新的文件。通常配合last-modified或Etag一块儿使用。

      no-store:强制缓存方永远不缓存该文件,每次都是向服务器请求最新的文件

      public:表示任何缓存方均可缓存该响应

      private:只会缓存给该用户不会共享缓存

  Etag/If-None-Match:

      1)缓存方第一次请求时,服务器返回的响应头中会包含一个Etag的hash

      2)以后每次缓存方向服务器请求时都会包含一个If-None-Match头信息,内容为服务器返回的Etag,而后服务器对这个头信息进行判断,若是为最新的,服务器就会返回304(Not Modified),缓存方直接使用缓存;若是不是最新返回200,并返回最新的文件,更新Etag字段。

  Last-Modified/If-Modified-Since:

      1)缓存方第一次请求时,服务器返回的响应头中会包含一个Last-Modified头信息,内容为该文件的最后更新时间

      2)以后每次缓存方向服务器请求时都会包含一个If-Modified-Since头信息,内容为服务器返回的Last-Modified,而后服务器对这个头信息进行判断,若是为最新的,服务器就会返回304(Not Modified),缓存方直接使用缓存;若是不是最新返回200,并返回最新的文件,更新Last-Modified字段。

  总结:Expires和Cache-Control为缓存方判断是直接读取缓存仍是向服务端发请求的字段,只不过Cache-Control比Expires控制的要多一点

     Etag/If-None-Match和Last-Modified/If-Modified-Since为服务器判断缓存方保存的是否为最新的,若是为最新就返回304让缓存方使用缓存,若是不是最新则返回最新内容。不过前者是经过随机字符串判断,后者是经过时间判断

长链接:

connection: keep-alive
Keep-Alive: timeout=20, max=2

   将connection设置为keep-alive可让多个链接共用一个TCP链接,提升了交互效率

   Keep-Alive用来设置该链接的过时时间,上例中20秒后或者在该链接中请求了两次后断开

   connection可为请求或者响应头,Keep-Alive仅为响应头。

重定向:

Location: http://www.baidu.com
相关文章
相关标签/搜索