1,Location

用于重定向,和返回状态码302结合使用。

代码示例:

response.setStatus(302);

response.setHeader("location","/day20131128/1.html");

这样,当请求服务器的时候可以重定向到这个/day20131128/1.html文件

也可以这样:

response.sendRedirect("/day20131128/1.html");//是上面两句的合成版。

重定向会向服务器发送两次请求,加重服务器负担。地址栏会变。完成购买这样的操作要重定向,而不要用转发,不然刷新就会又买一次,客户会愤怒。

2,Content-Encoding,gzip,Content-Length

用于指定压缩格式,和压缩长度,gzip就是压缩格式的。电信会以流量向大网站收钱,所以压缩可以省钱。。。

关于如何压缩的代码示例:

String data = "abcd";//要压缩给客户端的数据

ByteArrayOutputStream bout = new ByteArrayOutStream();

/*下面三行将数据压缩*/

GZIPOutputStream gout = new GZIPOutputStream(bout);

gout.write(data.getBytes());

gout.close();

byte gzip = bout.toByteArray();//获取压缩后的数据

//通知浏览器数据采用的压缩格式和长度

response.setHeader("Content-Encoding","gzip");

response.setHeader("Content-Length",gzip.length+"");

response.getOutoutStream().write(gzip);

3,Content-Type

response.setHeader("content-type","image/bmp"); //设置文件的格式请参考Tomcat的web配置文件,如下图

InputStream in = this.getServletContext().getResourceAsStream("/1.bmp");

int len = 0;

byte buffer[] = new byte[1024];

OutputStream out = response.getOutputStream();

while((len=in.read(buffer))>0){

  out.write(buffer,0,len);

}

再来两个设置文字格式的例子:

response.setHeader("Content-type","text/html;charset=UTF-8"); //设置文字格式

String data = "中国";

OutputStream out = response.getOutputStream();

out.write(data.getBytes("UTF-8"));

response.setCharacterEncoding("UTF-8");

//response.setHeader("Content-type","text/html;charset=UTF-8"); //设置文字格式

response.setContentType("text/html;charset=UTF-8"); //以上一句可以换成这一句

String data = "中国";

PrintWriter out = response.getWriter();

out.write(data);

4,Refresh

服务器通知浏览器隔多长时间,刷新一次页面。比如聊天室。

代码:

response.setHader("refresh","3");//三秒刷新一次。

//

response.setHader("refresh","3;url='http://www.baidu.com'");//三秒后跳转到百度。

String data = "aaaa";

response.getOutputStream().write(data.getBytes());

5,Content-Disposition

告诉浏览器,以下载方式打开数据。

代码:

response.setHeader("content-disposition","attachment;filename=3.jpg"); //

InputStream in = this.getServletContext().getResourceAsStream("/3.jpg");

int len = 0;

byte buffer[] = new byte[1024];

OutputStream out = response.getOutputStream();

while((len=in.read(buffer))>0){

  out.write(buffer,0,len);

}

文件名是汉语名:

String path = this.getServletContext().getRealPath("/download/美女.jpg");

String filename = path.substring(path.lastIndexOf("\\")+1);

response.setHeader("content-disposition","attachment;filename=" + URLEncoder.encode(filename,"UTF-8")); //汉字需要经过URL编码

InputStream in = null;

OutputStream out = null;

try{

  in = new FileInputStream(path);

  int len = 0;

  byte buffer[] = new byte[1024];

  out = response.getOutputStream();

  while((len = in.read(buffer))>0){

    out.write(buffer,0,len);

  }

}finally{

  if(in!=null){

    try{

      in.close();

    }catch(Exception e){

      e.printStackTrace();

    }

  }

}

6,Transfer-Encoding

服务器通过该头告诉浏览器数据的传送格式,chunked表示块传送

7,Set_cookie:SS=Q0=5Lb_nQ;path=/search

8,ETag

缓存相关。服务器根据 web资源的内容生成的 资源对应的串、标示符,客户机发送来的数据会带着服务器发给它的ETag这个东西。服务器根据这个东西有没有改变来决定是否让客户机调用其缓存。这个可以实现实时性很高的更新。如果是按If-Modifed-Since和Last-Modified来确定更新,则在500ms内的差别会被忽略。

9,Expires

服务器通过这个,告诉浏览器把服务器发送的资源缓存保存到什么时间。-1或0,则不缓存。

response.setDataHeader("expires",Sysem.currentTimeMillis()+1000*3600);//缓存数据3600秒。剩下这一个小时再访问这个servlet都不会向服务器发送请求,而是直接去拿缓存。

String data = "djklasja";

response.getWriter().write(data);

10,以下两个头和也是控制浏览器不要缓存。实时性要求很高的数据不要缓存,比如股票行情。

Cache-Control:no-cache

Pragma:no-cache

11,Range

HTTP请求头字段:

该头指示服务器只传输一部分呢Web资源,可以实现断点续传功能。Range字段可以通过三种格式设置要传输的字节范围:

Range: bytes=1000-2000  传输范围从1000到2000字节。

Range: bytes=1000-     传输Web资源中第1000个字节以后的所有内容。

Range: bytes=1000     传输最后1000个字节。

HTTP响应消息头字段:

Accept-Ranges:这个字段说明Web服务器是否支持Range。支持则返回“Accept-Ranges:bytes”,不支持则“Accept-Ranges:none”。

Content-Range:指定了范围的Web资源的字节发内,这字段值的格式是:Content-Range:1000-3000/5000(返回给客户端1000字节到3000字节部分,整个资源大小为5000)

客户端模拟请求服务器某资源5个字节后的内容下载:

URL url = new URL(http://localhost:8080/day05/a.txt);

HttpURLConnection conn = (HttpURLConnection)url.openConnection();

conn.setRequestProperty("Range","bytes=5-");//Tomcat6以上才开始支持断点续传

InputStream in = conn.getInputStream();

int len = 0;

byte buffer[] = new byte[1024];

FileOutputStream out = new FileOutputStream("c:\\a.txt",true);//true表示从后边接着写,而非从头覆盖。

while((len = in.read (byte))!=-1)

  out.write(buffer,0,len);

in.close();

out.close();

servlet 服务器HTTP响应头设置示例(response用法)的更多相关文章

  1. HttpServletResponse ServletResponse 返回响应 设置响应头设置响应正文体 重定向 常用方法 如何重定向 响应编码 响应乱码

    原文地址:HttpServletResponse ServletResponse 返回响应 设置响应头设置响应正文体 重定向 常用方法 如何重定向 响应编码 响应乱码 HttpServletRespo ...

  2. HTTP 响应头信息(Http Response Header) Content-Length 和 Transfer-Encoding

    Tomcat 中响应头信息(Http Response Header) Content-Length 和 Transfer-Encoding 客户端(PC浏览器或者手机浏览器)在接受到Tomcat的响 ...

  3. HttpServletResponse ServletResponse 返回响应 设置响应头设置响应正文体 重定向 常用方法 如何重定向 响应编码 响应乱码

    HttpServletResponse  和 ServletResponse  都是接口 具体的类型对象是由Servlet容器传递过来   ServletResponse对象的功能分为以下四种:   ...

  4. Servlet 服务器 HTTP 响应

    状态行包括 HTTP 版本(在本例中为 HTTP/1.1).一个状态码(在本例中为 200)和一个对应于状态码的短消息(在本例中为 OK). 下表总结了从 Web 服务器端返回到浏览器的最有用的 HT ...

  5. 最全 HTTP 安全响应头设置指南

    销售“安全记分卡”的公司正在崛起,并已开始成为企业销售的一个因素.这些公司组合使用 HTTP 安全报头和 IP 信誉来进行评级.不过,在很大程度上,公司的得分取决于对外开放网站上设置的安全响应报头.本 ...

  6. http响应头设置

    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletExcep ...

  7. nginx自定义模块记录上游服务器特定响应头

    功能,服务器通过扩展自定义命令,记录上游的服务器返回的特定响应头内容,记录到本地文件中 代码如下: /* * Copyright (C) Ciaos */ #include <ngx_confi ...

  8. Tomcat 中响应头信息(Http Response Header) Content-Length 和 Transfer-Encoding

    户端(PC浏览器或者手机浏览器)在接受到Tomcat的响应的时候,头信息通常都会带上Content-Length ,一般情况下客户端会在接受完Content-Length长度的数据之后才会开始解析.而 ...

  9. servlet 服务器HTTP请求头说明

    Accept:用于告诉服务器,客户机支持的数据类型. Accept-Charset:用于告诉服务器,客户机采用的编码. Accept-Language:客户机的语言环境. Host:客户机通过该头告诉 ...

随机推荐

  1. 【Nginx】ngx_event_core_module模块

    ngx_event_core_module模块属于事件模块,它是其他事件类模块的基础.它主要完毕下面任务: 创建连接池 决定使用哪些事件驱动机制 初始化将要使用的事件模块 以下分析该模块的代码. ng ...

  2. iOS获取网络类型的四种方法

    Reachability类只能区分WIFI和WWAN类型,却无法区分2G网和3G网. 网上也有些方法,却都存在Bug. 经过网上查找资料和测试,基本上总结了以下几种方法: 1.使用导航栏的方式:(私有 ...

  3. 在windows上搭建C语言开发环境——借助eclipse和MinGW

    0. 前言     [本文目的]     近期在电脑上又一次安装了MinGW,发现MinGW的安装方法和之前的方法稍有差别,全部再写了一篇博文记录一下具体的安装方法.     [本文主要内容]     ...

  4. [ IOS ] iOS-控制器View的创建和生命周期

    reference to  : 1. 控制器View的创建 首先我们来看一下控制器view创建的流程图 控制器view加载.jpeg 从图中我们可以看出,在控制器view加载过程中有两个重要的方法lo ...

  5. 物联网(IoT)的11大云平台:AWS、Azure、谷歌云、Oracle、

    物联网(IoT)的11大云平台:AWS.Azure.谷歌云.Oracle. 2018-11-06 14:02 云技术 关键词:物联网AzureGoogleSalesforce云计算 导读:现在,我们将 ...

  6. go语言之进阶篇非结构体匿名字段

    1.非结构体匿名字段 示例 : package main import "fmt" type mystr string //自定义类型,给一个类型改名 type Person st ...

  7. 百度编辑器ueditor通过ajax方式提交,不需要事先转义字符的方法(异常:从客户端(xxx)中检测到有潜在危险的 Request.Form 值)

    最近项目中使用百度编辑神器ueditor,确实是很好用的一款编辑器.官网教程提供的与后端数据交互都是跟表单方式有关的,项目中使用的是ajax方式提交,因此出现了不少问题,现在记录备忘下. 环境:.ne ...

  8. IE6的3像素神奇bug:缘起与解决方案

    在我们这样一个神奇的国度,到了2014年了,居然还是有很多人的电脑上用着XP,安装的是IE6,他们没有想过要升级,我们就得想着兼容他们.... 一. 6爷我喝高了,最后一行有重影.那什么是IE6 的3 ...

  9. 架构师书单 2nd Edition

    了2007年的目标,列了下面待读或重读的书单.    "其实中国程序员,现在最需要的是一张安静的书桌.",的确,中国架构师大多缺乏系统的基础知识,与其自欺欺人的宣扬"读书 ...

  10. (转)Unity中protobuf的使用方法

    在移动手机游戏开发中,目前Unity3D已成为比较主流的开发技术. 那么对于客户端服务器协议的打解包,我们有3中常用的处理方式: 1.自定义结构体:在协议中直接传输代码中自定义的结构体:这种方式的坏处 ...