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. Bootstrap 3之美04-自定义CSS、Theme、Package

    本篇主要包括: ■  自定义CSS■  自定义Theme■  自定义Package 自定义CSS 有时候,需要自定义或重写Bootstrap默认的CSS.→在css文件夹下创建一个site.css→假 ...

  2. MVC日期格式化,后台使用Newtonsoft.Json序列化日期,前端使用”f”格式化日期

    MVC控制器中,经常使用Newtonsoft.Json把对象序列化成json字符串传递到前端视图.当对象中有DateTime类型的属性时,前后台如何处理才能把DateTime类型转换成想要的格式呢? ...

  3. 【IDEA】【maven】idea使用maven插件 打包提示找不到符号找不到类,但是却没有错误

    [本篇方法如果无效,请使用终极解决方法] [终极解决方法]:https://www.cnblogs.com/sxdcgaq8080/p/10117852.html 如下,在右侧maven工具中进行打包 ...

  4. 命令行编译工具NMAKE

    简介 大家已经习惯于微软提供的功能强大的IDE,已经很少考虑手动编连项目了,所谓技多不压身,有空的时候还是随我一块了解一下命令行编译. C/C++/VC++程序员或有Unix/Linux编程经验应该很 ...

  5. 【Github教程】史上最全github使用方法:github入门到精通

    原文 http://www.eoeandroid.com/thread-274556-1-1.html git pull 命令 git pull <remote> <branch&g ...

  6. easyui input设置为disabled提交后获取不到属性值

    在做网站管理后台的用户修改功能时,由于当前用户修改个人信息时规定用户名不能修改,故使用了input标签的disabled属性,但是在提交数据后却发现用户名显示为空了.后 来一查才知道input设置为d ...

  7. [Android Pro] AtomicInteger的用法

    J2SE 5.0提供了一组atomic class来帮助我们简化同步处理.基本工作原理是使用了同步synchronized的方法实现了对一个long, integer, 对象的增.减.赋值(更新)操作 ...

  8. C# 编程指南

    此部分详细介绍了 C# 语言主要功能,以及通过 .NET Framework 可以在 C# 中使用的功能. 阅读此部分的大部分内容的前提是,你已对 C# 和一般编程概念有一定的了解. 如果完全没有接触 ...

  9. [开发工具]_[VS2010]_[vs2010的一个bug-使用stringstream时出现]

    1. 注冊Microsfot之后想提交bug, 发现有这个提示, 所以提交不了bug, 有能提交的提交下吧. You are not authorized to submit the feedback ...

  10. poj 食物链

    比基础的并查集有些进步. 在以下这个链接中有详解: http://blog.csdn.net/ditian1027/article/details/20804911 对于每两个动物的关系,都是先推与终 ...