HTTP请求和响应
1、HTTP请求包含的内容:
(1)HTTP请求的请求行
(2)HTTP请求的请求头
2、HTTP响应包含的内容:
(1)HTTP响应的状态行
200表示成功接受请求并完成整个处理过程
302表示去新地址找资源
307和304表示去缓存中找资源
404表示客户请求资源不存在
403表示客户没有权限获取资源
500表示服务器端出现错误
(2)HTTP响应的响应头
程序示例:
//用location和302实现请求重定向 public void test1(HttpServletResponse response){ response.setStatus(302); response.setHeader("location", "/day04/1.html"); }
//压缩数据输出 private void test2(HttpServletResponse response)throws IOException{ String data = "aaaaaaaaaa"; System.out.println("原始数据大小: "+data.getBytes().length); ByteArrayOutputStream bout = new ByteArrayOutputStream();//底层流 GZIPOutputStream gout = new GZIPOutputStream(bout);//包装流 gout.write(data.getBytes());//若数据太小,则不能写入底层流 gout.close();//关闭流,则必须写入底层流 byte gzip[] = bout.toByteArray();//得到压缩后的数据 System.out.println("压缩后数据大小: "+gzip.length); //通知浏览器数据采用压缩格式 response.setHeader("Content-Encoding", "gzip"); response.setHeader("Content-Length", gzip.length+""); response.getOutputStream().write(gzip); }
//通过content-type头字段,控制浏览器以哪种方式处理数据 private void test3(HttpServletResponse response) throws IOException { response.setHeader("content-type","image/bmp"); 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); } }
//定时刷新 private void test4(HttpServletResponse response) throws IOException { response.setHeader("refresh", "3;url='http://www.sina.com.cn'"); String data = "aaaaaaaa"; response.getOutputStream().write(data.getBytes()); }
//下载方式获得资源 private void test5(HttpServletResponse response) throws IOException { response.setHeader("content-disposition", "attachment;filename=1.bmp"); 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); } }
Http实用头字段Range头
/** * 断点下载 */ 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-");//设置请求头range,传输范围是第5个字节以后得内容 InputStream in = conn.getInputStream(); int len = 0; byte buffer[] = new byte[1024]; FileOutputStream out = new FileOutputStream("c:\\a.txt",true);//第二个参数默认为false, 设置为true支持续传 while((len = in.read(buffer))>0){ out.write(buffer, 0, len); } in.close(); out.close(); }