HTTP协议

HTTP协议:用于定义客户端与WEB服务器通讯的格式,尽量减少HTTP的请求数目。

http请求:请求行,请求头,请求正文
  请求行:GET,POST,HEAD,OPTIONS,DELETE,TRACE,PUT,
  常用的是GET,POST.如果没有设置,则默认向服务器发送的都是get请求。超链接都是get,用户想把请求方式改为post,可通过更改表单的提取方式实现

  GET方式:可以在请求的URL地址后以?的形式带上交给服务器的数据(超链接也可以这样),多个数据之间以&进行分割(数据容量通常不能超过1K)---密码提交不用这个。
  POST方式:可以在请求的实体内容中向服务器发送数据,(数据量无限大)


  eg:GET /aa/1,html HTTP/1.1 请求头 请求数据 请求协议
  请求头:
  Accept:image/gif.image/jpeg.*/*              --告诉服务器,客户机支持的数据类型*/*什么类型都支持
  Accept-Charset:IOS-8859-1                -- 客户机采用的编码
  Accept-Encoding:gzip,deflate.compress      --客户机支持的数据压缩格式
  Accept-Language:zh-cn,en-us         --客户机的语言环境
  Host:www.it315.org:80,localhost            --客户机告诉服务器想访问的主机名
  if-Modified-Since:True,11 Jul 2000 18:23:51 GMT --客户机告诉服务器,资源的缓存路径
  Rsferer: http://www.it315.org/index.jsp      --客户机告诉服务器,它是从那个资源访问服务器的(用在防盗链上)
  User-Agent:Mozila/4.0(compatiable;MSIE 5.5;Windows NT5.0)      --客户机的操作系统
  Cookie                   --客户机向服务器传送数据
  Connection:Keep-Alive/close        --是否保持链接
  Date:Tue, 11 Jul 2000 18:23:51 GMT    --时间值

 

http响应:一个http响应代表服务器向客户端回送的数据,包括一个状态行,若干个消息头,以及实体内容。
  状态行:格式:HTTP版本号 状态码 原因级数
  状态码:用于表示服务器请求的处理结果,是一个三位的十进制数。
    1xx: 表示服务器成功接收接收,客户端继续提交下一次请求才能完成整个处理过程。
    2xx: 表示服务器请成功接收请求并完成整个处理过称。 200-一切ok。显示的是OK
    3xx: 要完成请求客户必须进行更进一步的操作。 302-去找别个处理你的请求,304,307-都是让去找缓存
    4xx: 客户端请求有语法错误或请求无法实现。 404-Not Found请求地址出错,就是服务器端没有这个资源,403-Forbidden有资源,没有权限
    5xx: 服务器端错误—服务器未能实现合法的请求。 500- Internal Server Error服务器处理出错
  响应头
    Location:http://www.it315.org/index.jsp        --这个头和302实现请求重定向(登录里面用)
    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:00:00 GMT     --服务器通过这个头,告诉浏览器资源缓存的最后时间
    Rsferer:1;url=http://www.it315.org           --服务器通过这个头,告诉浏览器各多少时间刷新一次
    Content-Disposition:attachment;filename=aa.zip     --服务器通过这个头,告诉浏览器以下载方式打开数据
    Transfer-Encoding:chunked                --服务器通过这个头,告诉浏览器数据的传送格式,(这里是块块传送的)
    Set-Cookie:SS=QQ=5Lb_nQ;path=/search
    ETag:W/‘7777-1242234904000‘          --和缓存相关的头
    Expires:-1                     --服务器通过这个头,告诉浏览器吧回送的资源缓存多少时间,-1或0表示不缓存
    Cache-Control:no-cache Pragma:no-cache       --浏览器不要缓存
    Connection:close/Keep-Alive
    Date:Tue, 11 Jul 2000 18:00:00 GMT

http请求字段:
Range头指示服务器只能传输一部分web资源,自然个人资源可以实现断点下载
格式:
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资源的字节范围,这个字节范围值的格式:eg:Content-Range:1000-3000/5000

package cn.lcp.web.servlet;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ServletDemo extends HttpServlet {


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

【range】
    private void test6() throws MalformedURLException, IOException,
            FileNotFoundException {
        //代表下载资源
        URL url = new URL("http://localhost:8088/day4_http2/a.txt");
        //打开资源链接
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        //发送一个带range的头
        conn.setRequestProperty("Range", "bytes=5-");
        //读取资源数据
        InputStream in = conn.getInputStream();
        int len = 0;
        byte buffer [] = new byte[1024];
        //写入到的文件,
        FileOutputStream out = new FileOutputStream("c:\\a.txt", true);
        //读到buffer里面去
        while((len = in.read(buffer)) > 0){
            out.write(buffer, 0, len);
        }
        in.close();
        out.close();
    }

【"Content-Disposition", "attachment;filename=1.jpg"private void test5(HttpServletResponse response) throws IOException {
        //告诉浏览器以何种方式打开回送数据
        response.setHeader("Content-Disposition", "attachment;filename=1.jpg");     
        InputStream in = this.getServletContext().getResourceAsStream("/1.jpg");
        int len = 0;
        byte buffer[] = new byte[1024];
        //浏览器相关联的流,把数据写给浏览器
        OutputStream out = response.getOutputStream();
        while((len = in.read(buffer)) > 0){
            out.write(buffer, 0, len);
        }
    }
     
地址更新【"refresh", "5;url=‘http://www.sina.com‘"private void test4(HttpServletResponse response) throws IOException {
        response.setHeader("refresh", "5;url=‘http://www.sina.com‘");
        //response.setHeader("refresh", "5");
        String data = "qqq";
        response.getOutputStream().write(data.getBytes());
    }
何种方式打开数据【"Content-Type", "image/jpeg"private void test3(HttpServletResponse response) throws IOException {
        //告诉浏览器以何种方式打开回送数据
        response.setHeader("Content-Type", "image/jpeg");     
        InputStream in = this.getServletContext().getResourceAsStream("/1.jpg");
        int len = 0;
        byte buffer[] = new byte[1024];
        //浏览器相关联的流,把数据写给浏览器
        OutputStream out = response.getOutputStream();
        while((len = in.read(buffer)) > 0){
            out.write(buffer, 0, len);
        }
    }

压缩【"Content-Encoding", "gzip"public void test2(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
            String data = "dededededededededededededededed";
            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);
      } 
     
    
重定向【"location", "/day4_http2/1.html"public void test1(HttpServletResponse response){
            response.setStatus(302);
            response.setHeader("location", "/day4_http2/1.html");
    }

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

    }

}

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。