HTTP协议的一些问题和解答

HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。

http请求消息和响应消息都是由开始行(对于请求消息,开始行就是请求行,对于响应消息,开始行就是状态行),消息报头(可选),

空行(只有CRLF的行),消息正文(可选)组成。这里我们主要讲一下消息报头中的一些问题。

请求消息报头:

在请求消息报头中常用有以下报头域

Accept请求报头域用于指定客户端接受哪些类型的信息,eg:Accept:image/gif;

Accept-Charset请求报头域用于指定客户端接受的字符集。eg:Accept-Charset:iso-8859-1,gb2312.

Accept-Encoding请求报头域类似于Accept,但是它是用于指定可接受的内容编码。

Accept-Language请求报头域类似于Accept,但是它是用于指定一种自然语言。

Host请求报头域主要用于指定被请求资源的Internet主机和端口号,它通常从HTTP URL中提取出来的。eg:image.baidu.com

User-Agent请求报头域允许客户端将它的操作系统、浏览器和其它属性告诉服务器。eg:User-Agent:Mozilla/4.0(compatible;MSIE6.0;Windows NT 5.0) 

Cache-Control请求报头域指定请求和响应遵循的缓存机制,可以自己设置。eg:Cache-Control:no-Cache

Connection请求报头域制定客户端与服务器是否使用长连接,可设置为close关闭长连接。

If-Modify-Since请求报头域为上次接收服务器发来的最后修改日期时间。

If-None-Match请求报头域为上次接收服务器发来的ETags信息。

响应消息报头:

在响应消息报头中常用一下报头域:

Location响应报头域用于重定向接受者到一个新的位置。

Server响应报头域包含了服务器用来处理请求的软件信息。eg:Server:Apache-Coyote/1.1

Expires报头域给出响应过期的日期和时间。eg:Expires:Thu,15 Sep 2006 16:23:12 GMT

Last-Modified报头域用于指示资源的最后修改日期和时间。

Content-Type报头域用语指明发送给接收者的实体正文的媒体类型。eg:Content-Type:text/html;charset=ISO-8859-1

ETags报头域可以是任何资源的任何属性,用于和If-None-Match配合使用判断资源是否改变的方法。

 

下面讨论一下Last-Modify/If-Modify-Since和Etags/If-None-Match这两对报头域的功能作用。

简单的说,Last-Modified 与If-Modified-Since 都是用于记录页面最后修改时间的 HTTP 头信息,只是 Last-Modified 是由服务器往客户端发送的 HTTP 头,而 If-Modified-Since 则是由客户端往服务器发送的头。浏览器将服务器端发送过来的Last-Modify值和页面内容一起存储至缓存文件中,当再次访问该网页时,把该日期赋给请求报头的If-Modify-Since报头域并传送至服务器,此时服务器判断该日期是否与内容最后修改日期一致,若一致则返回304告诉客户端其本地 cache 的页面是最新的,直接从本地加载页面。若不一致则返回200和新的资源。

Etags和If-None-Match与上述的类似,只不过Last-Modified和HTTP-IF-MODIFIED-SINCE只判断资源的最后修改时间,而ETags和If-None-Match可以是资源任何的任何属性,其他工作原理基本相同。

posted @ 2016-07-05 15:28  一个大木头  阅读(239)  评论(0编辑  收藏  举报