java Web笔记-HTTp协议请求头和响应头

时间:2023-02-16 13:58:41


lHTTP的常用请求头

Accept: text/html,image/*    //用于告诉服务器,客户机支持的数据类型Accept-Charset: ISO-8859-1//用于告诉服务器。客户机采用的编码Accept-Encoding: gzip,compress//用于告诉服务器。客户机支持的数据压缩格式Accept-Language: en-us,zh-cn//用于告诉服务器。客户机的语言环境Host: www.it315.org:80//用于告诉服务器,客户机想访问的主机名If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT/客户机/用于告诉服务器资源的缓存时间Referer: http://www.it315.org/index.jsp//客户机用于告诉服务器它是从哪个资源来访问服务器的(防盗链)User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)//用于告诉服务器。客户机软件环境Cookie//客户机通过这个头可以向服务器带数据Connection: close/Keep-Alive   // 控制连接后的状态,是继续连接还是连接上后就关闭。继续连接则可以继续访问其他资源Date: Tue, 11 Jul 2000 18:23:51 GMT// 请求时间

Range: 指示服务器只传输一部分Web资源。这个头可以用来实现断点续传功能。

Range字段可以通过三种格式设置要传输的字节范围:

1.Range: bytes =1000-2000    // 传输范围从1000到2000字节

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

3.Range: bytes = 1000 //传输最后1000个字节


lHTTP常用响应头Location: http://www.it315.org/index.jsp // 这个头配合320状态吗使用,用于告诉客户找谁Server:apache tomcat//服务器通过这个头,告诉浏览器服务器的类型Content-Encoding: gzip//服务器通过这个头,通知浏览器数据的压缩格式Content-Length: 80// 服务器通过这个头,通知浏览器回送数据的长度Content-Language: zh-cn// 服务器通过这个头,通知浏览器回送的语言环境Content-Type: text/html; charset=GB2312  // 服务器通过这个头,通知浏览器回送的数据的类型(图片,文字。。。)Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT  // 服务器通过这个头,通知浏览器当前资源缓存时间Refresh: 1;url=http://www.it315.org // 服务器通过这个头,通知浏览器多长时间刷新一次Content-Disposition: attachment; filename=aaa.zip// 服务器通过这个头,通知浏览器以下载方式打开数据Transfer-Encoding: chunked // 服务器通过这个头,通知浏览器数据的传送格式ETag: // 缓存相关头,具有实时性,比Last-Modified要求更高。//当第一次请求服务器时会根据访问资源的内容生成一个ETag发送给浏览器,当再次请求时,会带着这个ETag去请求服务器,服务器会更具当前被访问资源内容生成一个//ETage来和其比较,如果被访问的资源没有变,则生成的ETage则和访问者发来的ETag相同,则浏览器会从缓存中读取数据,否则,服务器会把最新的内容发给浏览器。Expires: -1//服务器通过这个头,告诉浏览器把回送的资源缓存多长时间,-1或0,则是不缓存Cache-Control: no-cache // 也是控制浏览器不要缓存数据Pragma: no-cache   // 也是控制浏览器不要缓存数据Connection: close/Keep-Alive  // 控制连接后的状态,是继续连接还是连接上后就关闭。继续连接则可以继续访问其他资源Date: Tue, 11 Jul 2000 18:23:51 GMT// 响应时间

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

Content-Range: 指定了返回的Web资源的字节范围,

例子:Content-Range: 1000-3000/5000    // 回送1000-3000中间的字节,总共5000字节



java Web笔记-HTTp协议请求头和响应头java Web笔记-HTTp协议请求头和响应头

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException ,IOException{

//test1(response);

//test2(response);

//test3(response);

//test4(response);
test5(response);


}



// 用location和302实现请求重定向

public void test1(HttpServletResponse response){

response.setStatus(302);

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

}



// 压缩数据输出

public void test2(HttpServletResponse response){

String data = "dddddddddddddddddddddddddddddddddddddddddddddd";

System.out.println("原始数据大小:"+data.getBytes().length);


ByteArrayOutputStream bout = new ByteArrayOutputStream();

// 压缩流

GZIPOutputStream gout = new GZIPOutputStream(bout);// 压缩流

gout.write(data.getBytes());

// 当用装饰流(gout)来包装一个底层流(bout)时,会有一个缓冲区,如果数据太少,缓冲区不会被装满也
//就不会被自动刷新。所以要手动刷新,让数据进入到底层流中
gout.close();//或者gout.flush();

byte gzip[]= bout.toByteArray();// 得到压缩后的数据


// 通知浏览器数据采用压缩格式

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

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

response.getOutputStream().write(gzip);

}


// content-type通知浏览器以哪种数据类型打开数据

public void test3(HttpServletResponse response){

response.setHeader("content-type","image/bmp");  // 表示输出的是bmp格式图片数据,

//在Tomcat,conf目录下的web.xml文件中查找各种数据对应的content-type类型(.jpg对应 "image/jpeg"

// 获取图片文件读取流

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);

}

}


// 定时刷新

public void test4(HttpServletResponse response){

 response.setHeader("refresh","3");  // 每隔3秒钟刷新一次页面:  如股票页面会自动动态刷新,

// response.setHeader("refresh","3;url='http://www.sina.com'");  // 3秒钟后跳转到指定页面;如注册完成后,会出现5秒后自动跳转到首页

String data = "aaaa";

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

}


/ 下载方式打开数据

public void test5(HttpServletResponse response){

/*

如果下载文件是中文,则文件名需要经过url编码
String filename= "赏花.jpg";
response.setHeader("content-disposition","attachment;filename="+URLEncoder.encod(filename,"UTF-8"));

*/

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);

}

}



// 断点续传

public static void main(String[] args) throws Exception{

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

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

conn.setRequestProperty("Range","bytes=5-");//从第5个字节开始传送


InputStream in = conn.getInputStream();

int len =0;

byte buffer[] = new byte[1024];

FileOutputStream out = new FileOutputStream("c:\\a.txt",true);  // 以追加方式打开文件

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

{

out.write(buffer,0,len);

}

in.close();

out.close();

}