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. java变量深入理解

    4,变量:其实就是内存中的一个存储空间,用于存储常量数据. 作用:方便于运算.因为有些数据不确定.所以确定该数据的名词和存储空间. 特点:变量空间可以重复使用. 什么时候定义变量?只要是数据不确定的时 ...

  2. 在Xcode4.5中禁用ARC(Automatic Referencing Counting) 转

    最近升级了xcode4.5,用上了ios6的SDK.但用着用着发现一个比较烦的问题,以前很多代码提示错误,发现原来因为xcode启用了ARC,当ARC启用后会自动在代码中加入retain.releas ...

  3. Unity3d操作的一些技巧知识点和BUG解决方案

    自己记录一些东西,转载请良心注明出处.     1.如何同时打开两个UNITY3D项目. 有时候需要对比,或者需要添加另一个项目的某资源到目前项目,同时打开两个项目看起来会比较明了.如果直接打开的话, ...

  4. 打印后台程序服务没有启动,每次打开Powerdesigner都会要我安装打印机

    原因: 不光这个,就是word也需要你有个打印机.随便安一个就可以了.一般系统自带个Microsoft Office Document Image Writer的还报打印机,要是你有这个打印机的话.查 ...

  5. MyEclipse中的内置浏览器中的历史记录怎么清除

    eclipse内置浏览器的访问记录是存储在对应的工程目录下的.metadata配置中,也就是说你新建一个工程的话就没有了. 如果确实要删除那就找到工作空间中的org.eclipse.ui.browse ...

  6. css3 实现圆角边框的border-radius属性和实现阴影效果的box-shadow属性

    首先我要介绍的是border-radius属性,它的作用是实现圆角边框,其中border-radius:20px;表示,一个’体‘四个角都圆滑20px,其值如果为100px那么圆角度则为最高,如果是正 ...

  7. MIR Flickr 1M 图像数据集(点击即可下载)

    Index of /mirflickr/mirflickr1m Name Last modified Size Description Parent Directory   -   exif.zip ...

  8. 关于MFC框架程序中CWinApp::OnIdle

    很早之前就发现,我写的图形引擎在MFC框架程序中的刷帧率始终在60FPS左右.好在自己的程序对刷帧率的要求不是很高,所以一直没有太过纠结此事.直到今天看了别人的程序才发现应该在函数CWinApp::O ...

  9. [转]一键安装藏隐患,phpStudy批量入侵的分析与溯源

    一.前言 近日,腾讯安全云鼎实验室监测到大量主机被入侵并添加了一个名为“vusr_dx$”的隐藏帐号:同时,云鼎实验室还监测到此类帐号被大量创建的同时存在对应帐号异地登录的情况. Windows 的帐 ...

  10. Eclipse 中java跨工程调用类

    在Eclipse中,有时候需要跨工程调用其他工程中的方法.如下面有两个Java Project : 如果要在A工程中调用B工程中的类,可以将B工程添加到A工程中: A---- >Build Pa ...