HTTP消息由客户端到服务器的请求和服务器到客户端的响应组成。请求消息和响应消息都是由开始行,消息报头,空行(只有CRLF的行),消息正文组成。对于请求消息,开始行就是请求行;对于响应消息,开始行就是状态行。

HTTP消息报头包括普通报头、请求报头、响应报头、实体报头。报头域由名字+“:”+空格+值组成,消息报头域的名字与大小写无关。

1. 普通报头:

  在普通报头中,有少数报头域用于所有的请求和响应消息,但并不用于被传输的实体,只用于传输的消息。

  • Cache-Control:

  A.用于指定缓存指令,缓存指令是单向的(响应中出现的缓存指令在请求中未必会出现),且是独立的(一个消息的缓存指令不会影响另一个消息处理的缓存机制),HTTP1.0使用的类似的报头域为Pragma。

  B.请求时的缓存指令包括:no-cache(用于指示请求或响应消息不能缓存)、no-store、max-age、max-stale、min-fresh、only-if-cached。

  C.响应时的缓存指令包括:public、private、no-cache、no-store、no-transform、must-revalidate、proxy-revalidate、max-age、s-maxage。

  eg:为了指示IE浏览器(客户端)不要缓存页面,服务器端的JSP程序可以编写如下:response.setHeader(“Cache-Control”,”no-cache”);或者response.setHeader(“Pragma”,”no-cache”); 两者作用相当。这句代码将在发送的响应消息中设置普通报头域:Cache-Control:no-cache。

  • Date:

  普通报头域表示消息产生的日期和时间

  • Connection:

  普通报头域允许发送指定连接的选项。例如指定连接是连续,或者指定“close”选项,通知服务器,在响应完成后,关闭连接

2.请求报头

  请求报头允许客户端向服务器端传递请求的附加信息以及客户端自身的信息。

  • Accept:

  用于指定客户端接受哪些类型的信息。如Accept:image/gif,表明客户端希望接受GIF图像格式的资源;text/html,表明客户端希望接受html文本。

  • Accept-Charset:

  用于指定客户端接受的字符集。如Accept-Charset:iso-8859-1,gb2312.如果在请求消息中没有设置这个域,缺省是任何字符集都可以接受。

  • Accept-Encoding:

  类似于Accept,用于指定可接受的内容编码。如Accept-Encoding:gzip.deflate.如果请求消息中没有设置这个域,服务器假定客户端对各种内容编码都可以接受。

  • Accept-Language:

  类似于Accept,用于指定一种自然语言。如Accept-Language:zh-cn.如果请求消息中没有设置这个报头域,服务器假定客户端对各种语言都可以接受。

  • Authorization:

  用于证明客户端有权查看某个资源。当浏览器访问一个页面时,如果收到服务器的响应代码为401(未授权),可以发送一个包含Authorization请求报头域的请求,要求服务器对其进行验证。

  • Host:

  发送请求时,该报头域是必需的,用于指定被请求资源的Internet主机和端口号,通常从HTTP URL中提取出来,如在浏览器中输入http://www.guet.edu.cn/index.html,浏览器发送的请求消息中,就会包含Host请求报头域,Host:www.guet.edu.cn。此处使用缺省端口号80,若指定了端口号,则为Host:www.guet.edu.cn:指定端口号

  • User-Agent:

  User-Agent请求报头域允许客户端将它的操作系统、浏览器和其它属性告诉服务器。不过,这个报头域不是必需的,如果我们自己编写一个浏览器,不使用User-Agent请求报头域,那么服务器端就无法得知我们的信息。

3.响应报头

  响应报头允许服务器传递不能放在状态行中的附加响应信息,以及关于服务器的信息和对Request-URI所标识的资源进行下一步访问的信息。

  • Location:

  用于重定向接受者到一个新的位置。Location响应报头域常用在更换域名的时候。表示客户应当到哪里去提取文档。Location通常不是直接设置的,而是通过HttpServletResponse的sendRedirect方法,该方法同时设置状态代码为302。

  • Server:

  包含了服务器用来处理请求的软件信息,如服务器名字。与User-Agent请求报头域是相对应的。Servlet一般不设置这个值,而是由Web服务器自己设置。如Server:Apache-Coyote/1.1。

  • WWW-Authenticate:

  客户应该在Authorization头中提供什么类型的授权信息?在包含401(Unauthorized)状态行的应答中这个头是必需的。客户端收到401响应消息时候,并发送Authorization报头域请求服务器对其进行验证时,服务端响应报头就包含该报头域。

  例如,response.setHeader("WWW-Authenticate", "BASIC realm=\"executives\"")。注意Servlet一般不进行这方面的处理,而是让Web服务器的专门机制来控制受密码保护页面的访问(例如.htaccess)。

4.实体报头

  请求和响应消息都可以传送一个实体。一个实体由实体报头域和实体正文组成,但并不是说实体报头域和实体正文要在一起发送,可以只发送实体报头域。实体报头定义了关于实体正文(如有无实体正文)和请求所标识的资源的元信息。

  • Content-Encoding:

  文档的编码(Encode)方法。它的值指示了已经被应用到实体正文的附加内容的编码,只有在解码之后才可以得到Content-Type头指定的内容类型。利用gzip压缩文档能够显著地减少HTML文档的下载时间。如Content-Encoding:gzip。

  Java的GZIPOutputStream可以很方便地进行gzip压缩,但只有Unix上的Netscape和Windows上的IE 4、IE 5才支持它。因此,Servlet应该通过查看Accept-Encoding头(即request.getHeader("Accept-Encoding"))检查浏览器是否支持gzip,为支持gzip的浏览器返回经gzip压缩的HTML页面,为其他浏览器返回普通页面。

  • Content-Language:

  描述了资源所用的自然语言。没有设置该域,则认为实体内容将提供给所有的语言阅读者。eg:Content-Language:da。

  • Content-Length:

  用于指明实体正文的长度,以字节方式存储的十进制数字来表示。

  • Content-Type:

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

  • Last-Modified:

  用于指示资源的最后修改日期和时间。

  • Expires:

  给出响应过期的日期和时间。为了让代理服务器或浏览器在一段时间以后更新缓存中的页面(再次访问曾访问过的页面时,直接从缓存中加载,缩短响应时间和降低服务器负载)。使用Expires指定页面过期时间。如Expires:Thu,15 Sep 2006 16:23:12 GMT。

  HTTP1.1的客户端和缓存必须将其他非法的日期格式(包括0)看作已经过期。为了让浏览器不要缓存页面,也可以利用Expires实体报头域,设置为0,jsp中程序如下:response.setDateHeader(“Expires”, ”0″);

(四)HTTP消息报头的更多相关文章

  1. Http协议消息报头

    哎.不知道怎么写Http协议... 超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议. HTTP基于TCP/IP通信协议来传递数据 ...

  2. 原生socket请求url获取状态码、消息报头、响应正文

    需求: (1)使用socket及ssl模块写通用的web客户端 (2)向服务器发起请求 (3)接受响应内容并解析出状态码.消息报头.响应正文 (4)最核心的函数: 输入一个url,返回状态码.消息报头 ...

  3. XMPPFrameWork IOS 开发(四)消息和好友上下线

    原始地址:XMPPFrameWork IOS 开发(四) 消息 //收到消息 - (void)xmppStream:(XMPPStream *)sender didReceiveMessage:(XM ...

  4. 《HTTP协议详解》读书笔记---请求篇之消息报头

    不管是请求消息还是响应消息都包含消息报头,那么消息报头包含哪些内容?他们都代表什么含义呢?以下将带着 这些问题去学习消息报头. http消息(不管是请求消息还是响应消息)都是由开始行,消息报头(可选) ...

  5. HTTP协议详解之消息报头

    原文地址:http://www.cnblogs.com/devinzhang/archive/2012/02/06/2340186.html HTTP消息由客户端到服务器的请求和服务器到客户端的响应组 ...

  6. ActiveMQ学习系列(四)----消息持久化到mysql

    前记:目前学习还比较杂乱,还未找到系统化地学习ActiveMq的方法.在网上看到消息持久化的demo,了解了一下,在此记录. 一.目前ActiveMq支持的持久化方法 url:http://activ ...

  7. Delphi 7中的四种消息框

    Delphi中平常使用的消息框有四种形式,有ShowMessage.MessageDlg.Application.MessageBox.MessageBox.下面来深入了解下这四种形式的实现和使用.1 ...

  8. SpringBoot笔记十四:消息队列

    目录 什么是消息队列 消息队列的作用 异步通信 应用解耦 流量削峰 RabbitMQ RabbitMQ流程简介 RabbitMQ的三种模式 安装RabbitMQ RabbitMQ交换器路由和队列的创建 ...

  9. android 进程/线程管理(四)----消息机制的思考(自定义消息机制)

    关于android消息机制 已经写了3篇文章了,想要结束这个系列,总觉得少了点什么? 于是我就在想,android为什么要这个设计消息机制,使用消息机制是现在操作系统基本都会有的特点. 可是andro ...

随机推荐

  1. 朴素贝叶斯分类器Naive Bayes

    优点Naive Bayes classifiers tend to perform especially well in one of the following situations: When t ...

  2. 基于GAN的特征抽取 Feature Extraction by GAN

    InfoGAN 期望的是 input 的每一个维度都能表示输出数据的某种特征.但实际改变输入的一个特定维度取值,很难发现输出数据随之改变的规律. InfoGAN 就是想解决这个问题.在 GAN 结构以 ...

  3. 如何用5000行JS撸一个关系型数据库

    首先声明,我不是标题党,我真的是用5000行左右的JS实现了一个轻量级的关系型数据库JSDB,核心是一个SQL编译器,支持增删改查. 源代码放到github上了:https://github.com/ ...

  4. Nginx 配置 http 强制跳转到 https

    个人真实配置 架构:Nginx 反向代理 + Nginx 前端(LNMP) 在 Nginx 反向代理的 虚拟机主机配置文件中,作如下配置: upstream ilexa_cn { server 192 ...

  5. vue项目打包-2-九五小庞

    vue项目打包 一.终端运行命令 npm run build 二.打包成功的标志与项目的改变,如下图: 3.点击index.html,通过浏览器运行,出现以下报错,如图: 四.那么应该如何修改呢?具体 ...

  6. ansible-playbook安装tomcat

    1. ansible-playbook安装tomcat  1) 编写playbook的tomcat安装配置 1 [root@test-1 bin]# vim /ansible/tomcat/bin/t ...

  7. MeteoInfoLab脚本示例:subplot

    subplot命令可以自动等间距分配多个坐标系(Axes),命令中有三个参数,前两个定义了行数和列数,第三个指定了当前的坐标系(Axes),绘图命令是作用在当前坐标系中的. 脚本程序: def f(t ...

  8. day44 Pyhton 数据库Mysql

    内容回顾 什么是进程? 就是为了形容执行中的程序的一种称呼 它是操作系统中资源分配的最小单位 进程之间是数据隔离的,占用操作系统资源相对多 独立存在的 谈谈你对并发的理解 同时有多个任务需要执行,但是 ...

  9. 查看centos 7.6 当前所有监听端口

    由于要开展服务器安全工作查看系统当前所监听端口 ss -lnt 缺点发现有重复端口也显示出来了! ss -lnt | awk '/*

  10. 第十八章 HTTPS介绍及实战演练

    一.HTTPS介绍 1.概述 为什么需要使用HTTPS,因为HTTP不安全,当我们使用http网站时,会遭到劫持和篡改,如果采用https协议,那么数据在传输过程中是加密的,所以黑客无法窃取或者篡改数 ...