报头
每一个报头都是由 [名称 + ":" + 空格 + 值 + <CR><LF>] 组成。有四种不同类型的报头:
  • 通用报头:可用于请求,也可以用于响应,它是作为一个整体而不是特定的资源与事务相关联。
  • 请求报头:允许客户端传递关于自身的信息和希望得到的响应格式。
  • 响应报头:服务端关于传递自身信息的响应。
  • 实体报头:定义被传输资源的信息,可以用于请求,也可以用于响应。
 
注意,每个报头后必须以 <CR><LF> (即 \r\n)结尾,报头与主体之间以 <CR><CL> 分割。
 
通用报头
通用头包含请求和响应消息都支持的头域,但不能用于实体报头。对通用报头的扩展要求通讯双方都支持此扩展,若存在不支持的通用报头,一般会作为实体头域处理。
 
Cache-Control:指定请求和响应遵循的缓存机制。
     public 指示所有的内容都将被缓存(客户端和代理服务都可缓存)
     private 默认值,指示内容只缓存到私有缓存中(仅客户端可以缓存,代理服务器不能缓存)
     no-cache 指示请求或响应消息不能缓存。
     no-store 指示所有的内容都不会被缓存到缓存或 Internet 临时文件中。
     max-age 指示缓存的内容将在多少秒后失效,仅在 HTTP/1.1 可用,与 Last-Modified 一起使用时,优先级更高。
     must-revalidate 若缓存失效,请求必须发生到服务器以进行重新验证。
 
Date:表示消息产生的日期和时间。
Pragma:唯一值为 no-cache,表示服务器必须返回一个刷新后的文档。其作用等价于 Cache-Control: no-cache 。
     在 HTTP/1.0 版本中,只实现了 Pragma: no-cache,而 Cache-Control 是在 HTTP/1.1 引入的。
Connection:允许发送指定连接的选项。
     keep-alive 客户端与服务器的连接不关闭,后续会再次使用这一条连接。
     close 表示一个请求完成后,客户端与服务器断开连接。
Transfer-Encoding:标明报文主体的传输编码方式。
     若是请求和响应的头信息中都要 Transfer-Encoding: chunked , 表明回应将由数量未定的数据快组成。在每个非空的数据块之前,会一个 16 进制的数值,表示这个块的长度。最后是一个大小为 0 的块,表示本次回应的数据发送完毕。
Upgrade:升级为其他协议,允许服务器指定一种新的协议或新的协议版本,与响应编码 101(切换协议)配合使用。
Via:代理服务器相关信息。
 
请求报头
请求报头允许客户端向服务端传输请求的附加信息以及客户端自身的信息。在 HTTP/1.1 协议中,所有的请求头,除 Host 外,都是可选的。
 
Accept:用于指定客户端接受哪些类型的信息。
Accept-Charset:用于指定客户端接受的字符集。
Accept-Encoding:用于指定客户端可接受的内容编码。如 gzip、deflate
Accept-Language:用于指定客户端可接受的自然语言。如 zh-cn、de
Authorization:用于证明客户端有权限查看某个资源。
Cookie:用于将 Cookie 值发送给服务器。
Host:用于指定被请求资源的主机和端口号。
If-Modified-Since:请求时指定资源的最后修改时间,用于比较资源的更新时间,与 Last-Modified 一起配合 Cache-Control 使用。
     当资源过期时(Cache-Control 中 max-age 设置),发现资源有 Last-Modified 声明,则再次向服务器请求时带上 If-Modified-Since,表示请求时间。服务器收到请求后发现头有 If-Modified-Since ,则与被请求的资源进行最后修改时间进行对比。若最后修改时间较新,说明资源又被改动过,则响应整片资源内容(200);若最后修改时间较旧,说明资源没有修改,会响应 304,告知浏览器继续使用保存的 cache 。
If-None-Match:请求时加上的资源 ETag 值,用于比较实体标识(ETag),与 ETag 一起配合 Cache-Control 使用。
     当资源过期时(Cache-Control 中 max-age 设置),发现资源有 ETag 声明,则再次向服务器请求带上 If-None-Match (ETag 值)。服务器收到请求后发现头 If-None-Match,则与被请求资源相应校验串进行对比,返回 200 或 304 。
Referer:用于指定客户端是从哪个资源来访问服务器的,可用于防盗链。
User-Agent:允许客户端将其操作系统、浏览器和其它属性告诉服务器。
 
响应报头
响应报头允许服务器传递不能放在状态行中的附加信息,以及关于服务器的信息和对 Request-URL 所标识的资源进行下一步访问的信息。
 
ETag:缓存相关的头,可用于实时更新。和 If-None-Match 配合使用。
     ETag 主要作用是在文件后面添加一个唯一的参数,该参数由服务器生成,并随着文件的改变而改变。下次浏览器只需要重新获取 ETag 发送了变化的文件。
Location:用于重定向一个新的位置。该响应状态码为 302(临时重定向),常用于在更换域名时。
Server:与 User-Agent 相对应,包含了服务器用来处理请求的软件信息。
WWW-Authenticate:包含在 401(为授权)响应信息中,当客户端收到 401 响应消息,并发送 Authorization 报头请求服务器对其进行验证时,服务器端响应报头就会包含该消息。
 
实体报头
实体报头定义了关于实体的元信息,实体信息一般由实体报头和实体组成。
 
Content-Encoding:指明数据的压缩方法。发送数据可以是任何格式,我们可以把数据压缩后再发送
     客户端请求时,Accept-Encoding 指明可以接受哪些压缩方法。
Content-Language:描述资源所用的自然语言。
Content-Length:指明响应的实体正文的长度。
     对于 HTTP/1.1 引入的持久连接机制,一个 TCP 连接可以传送多个响应,此时要区分数据包是属于哪一个响应的。Content-Length 指明本次响应的数据长度,当到达指定的长度后,后面的字节就属于下一个响应了。
Content-Type:指明发送给接收者的实体正文的媒体类型(MIME)。
     客户端请求时,Accept 指明可以接受哪些类型。
Content-Disposition:指明浏览器以下载的方式打开数据。
Last-Modified:指明资源最后修改的时间(该文件在服务器端最后修改的时间)。
     当 Last-Modified 与 ETag 一起使用时,服务器会优先验证 ETag。
Expires:指明响应文档过期的日期和时间。当文档过期后,会重新从服务器获取,并更新缓存。
     为了让代理服务器或浏览器在一段时间后更新缓存的页面,可通过 Expires 指定页面过期的时间。当设置为 0 时,表示不让浏览器缓存页面。Expires 等同与 Cache-Control: max-age ,但若同时存在,则会被后者覆盖。Expires 属于 HTTP/1.0 的产物,从 HTTP/1.1 开始,使用 Cache-Control: max-age= 代替。
 

参考文章:
RFC 2616 -- HTTP/1.1: http://www.faqs.org/rfcs/rfc2616.html

HTTP 协议 -- 报头信息的更多相关文章

  1. http协议报头信息和主体鉴别

    http协议报头信息和主体是使用一个空行分开.这是什么空行?简单的说,那是,\r\n\r\n. 所以会server数据的回归\r\n\r\n结果分离,一个是标题信息.它是一个消息的文本. C#例如,下 ...

  2. http协议报头详解HTTP协议结构

    http协议 请求报文和响应报文都是由以下4部分组成 1.请求行 2.请求头 3.空行 4.消息主体 下图为http请求的报文结构 下图为http响应报文结构 请求行 格式为: Method Requ ...

  3. PHP HTTP协议(报头/状态码/缓存)

    一.HTTP协议介绍 1. #HTTP协议       # (1 建立在TCP/IP协议基础上       # (2 web开发数据传输依赖于http协议       # (3 http 协议全称是文 ...

  4. http协议报头详解

    目录: 1. http协议简介 2. http报头举例 3. http报头详解 4. 几个字段的说明 5. 总结 6. 参考文章 1. http协议简介 HTTP是Hyper Text Transfe ...

  5. HTTP协议请求信息详解

    通常HTTP消息包括客户机向服务器的请求消息和服务器向客户机的响应消息.客户端向服务器发送一个请求,请求头包含请求的方法.URI.协议版本.以及包含请求修饰符.客户信息和内容的类似于MIME的消息结构 ...

  6. python网络编程——使用UDP、TCP协议收发信息

    UDP UDP是面向无连接的通讯协议,UDP数据包括目的端口号和源端口号信息,由于通讯不需要连接,所以可以实现广播发送. UDP传输数据时有大小限制,每个被传输的数据报必须限定在64KB之内. UDP ...

  7. Linux--网络基础(概念+协议的了解+OSI七层模型,TCP/IP五层协议,网络数据传输流程)

    网络的发展 网络的发展有下面几个阶段: 独立模式:计算机最开始是以单机模式被广泛使用的.每一台计算机都是独立的,之间不能够进行数据共享与通信 网络互联: 计算机之间可以链接在一起,完成数据共享,计算机 ...

  8. javaweb学习总结十九(http协议概述以及http请求信息分析)

    一:http协议概述 1:http协议定义 2:使用telnet程序连接web服务器,获取资源 3:http协议:超文本传输协议,它是基于tcp/ip协议,就是建立在tcp/ip之上工作的, http ...

  9. HTTP超文本传输协议-HTTP/1.1中文版

    摘要 超文本传输协议(HTTP)是一种为分布式,合作式,多媒体信息系统服务,面向应用层的协议.它是一种通用的,不分状态(stateless)的协议,除了诸如名称服务和分布对象管理系统之类的超文本用途外 ...

随机推荐

  1. nginx之 nginx-1.9.7 编译安装、理论简介

    nginx是一个web网站常用的高性能http和反向代理服务器,其具有较好的并发能力,被网易.百度.腾讯.新浪等网站广泛使用. 一. 理论简介 1.首先弄清楚正向代理和反向代理 正向代理:代理客户端, ...

  2. 自己封装的AJAX (带JSON)

    最简单的封装的AJAX: function myajax(url,onsuccess,fail){ //确定是否支持xhr var xhr = new XMLHttpRequest ? new XML ...

  3. phyton方面相关书籍

    0基础:<简明PYTHON教程>http://linux.chinaitlab.com/manual/Python_chinese/<与孩子一起学编程>http://book. ...

  4. 四川第七届 E Rectangle

    Rectangle frog has a piece of paper divided into nn rows and mm columns. Today, she would like to dr ...

  5. 【OK210试用体验】进阶篇(2)视频图像采集之MJPG-streamer编译(arm移植)

    上一篇([OK210试用体验]进阶篇(1)视频图像采集之MJPG-streamer编译(Ubuntu系统下))进行了MJPG-streamer在Ubuntu下的编译及测试,这一篇针对OK210,进行a ...

  6. Eclipse与github整合完整版

    最近朋友都推荐使用github管理自己的项目,而且免费用户可以有5个仓库,恰好我也想了解下git,借此机会学习一下. github官方指南使用独立第三方git工具来进行版本控制,并不借助于eclips ...

  7. LAMP 2.4 Apache访问控制

    通过查看日志发现有个IP 恶意攻击你的网址,可以控制这个IP的访问. 打开主配置文件复制模板. vim /usr/local/apache2/conf/httpd.conf 搜索 /Order 复制 ...

  8. Android中Activity之间的数据传递

    在开发中,我们经常涌用到Activity,那么既然用到了Activity,就一定免不了在两个或者多个Activity之间传递数据.这里我们先说一说原理,然后在看看代码和例子. 情况A:我们需要从Act ...

  9. Cookies和Session的定义与区别

    Cookies和Session二者的定义: 当你在浏览网站的时候,WEB 服务器会先送一小小资料放在你的计算机上,Cookie 会帮你在网站上所打的文字或是一些选择,都纪录下来.当下次你再光临同一个网 ...

  10. 装饰器,装饰器多参数的使用(*arg, **kwargs),装饰器的调用顺序

    一.#1.执行outer函数,并且将其下面的函数名,当作参数 #2.将outer的返回值重新赋值给f1 = outer的返回值 #3.新f1 = inner #4.func = 原f1 #!/usr/ ...