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. C++ 模板的编译 以及 类模板内部的实例化

    在C++中.编译器在看到模板的定义的时候.并不马上产生代码,仅仅有在看到用到模板时,比方调用了模板函数 或者 定义了类模板的 对象的时候.编译器才产生特定类型的代码. 一般而言,在调用函数的时候,仅仅 ...

  2. ActiveX控件开发

    VC2005从开发MFC ActiveX ocx控件到发布到.net网站的全部过程 开篇语:最近在弄ocx控件发布到asp.net网站上使用,就是用户在使用过程中,自动下载安装ocx控件.(此文章也是 ...

  3. Rete算法

    RETE算法介绍一. rete概述Rete算法是一种前向规则快速匹配算法,其匹配速度与规则数目无关.Rete是拉丁文,对应英文是net,也就是网络.Rete算法通过形成一个rete网络进行模式匹配,利 ...

  4. 使用msm配置分布式tomat,实现session共享

    一,环境说明 操作系统是Windows7家庭版(有点不专业哦,呵呵!),JDK是1.6的版本, Tomcat是apache-tomcat-6.0.35-windows-x86,下载链接:http:// ...

  5. linux下限制ip访问

    inux下最直接限制ip访问的方式有两种: 1.使用hosts.allow和hosts.deny来设置ip白名单和黑名单,/etc/目录下. 优先级为先检查hosts.deny,再检查hosts.al ...

  6. struts2中<welcome-file>index.action</welcome-file>直接设置action,404的解决方案

    这几天的项目页面的访问全部改为.action访问,在修改首页时遇到了问题.将web.xml文件中<welcome-file>index.action</welcome-file> ...

  7. 追MM和Java的23种设计模式

    我在Java论坛看到这篇文章,作者以轻松的语言比喻了java的32种模式,有很好的启发作用,但可惜没有给出具体的意思,我就在后边加上了.这些都是最简单的介绍,要学习的话建议你看一下阎宏博士的<J ...

  8. 怎样让你的APK跑在 com.android.phone 进程

    首先:为什么要跑在 com.android.phone 进程 这还用问,在同一个进程里就能够干非常多事情了这是黑客行为 为什么能跑在统一进程? Google 在设计 Dalivk 虚拟机的时候就考虑到 ...

  9. [实时更新]jquery全部版本号下载

    jquery-2.1.0   注!不再支持IE 6/7/8 直接引用地址:  开发版地址1: <script src="http://code.jquery.com/jquery-2. ...

  10. spring事务管理器的源码和理解

    原文出处: xieyu_zy 以前说了大多的原理,今天来说下spring的事务管理器的实现过程,顺带源码干货带上. 其实这个文章唯一的就是带着看看代码,但是前提你要懂得动态代理以及字节码增强方面的知识 ...