首页 > 代码库 > http协议

http协议

先看一下百度百科的http协议定义:

 HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。目前在WWW中使用的是HTTP/1.0的第六版,HTTP/1.1的规范化工作正在进行之中,而且HTTP-NG(Next Generation of HTTP)的建议已经提出

http协议的版本:HTTP/1.0   , HTTP1.1 。 区别:前者与主机连接上只能获取一个资源,后者可以获取多个资源

http协议是学习javaEE的基石。

http请求:

    客户端连上服务器后,向服务器请求某个web资源,称之为客户端向服务器发送一个HTTP请求,一个完整的http请求包括如下内容:一个请求行,若干消息头,以及实体内容。

    举例:

         GET /books/java.html HTTP/1.1         ==>请求头:描述客户端的请求方式,请求资源名称,http协议版本号

         Accept : */*                                     ==>多个消息头:描述客户端请求哪台主机,客户端的一些环境信息等。

         Accept-Encoding:gzip,deflate 

           ......

                                                               ==>一个空行

          这里是消息体

    说明:

        请求行

            请求行中的GET称之为请求方式,请求方式有:

            POST,GET,HEAD,OPTIONS,DELETE,TRACE,PUT.

        不管是POST或GET,都用于向服务器请求莫个WEB资源,这两种方式的区别主要表现在数据传递上:

        如请求方式为GET方式,则可以在请求的URL地址后以?的形式带上交给服务器的数据,多个数据之间以&分割,例如:

             GET /mail/1.html?name=abc&password=xyz http/1.1

    GET方式的特点:在url地址后附带的参数是有限制的,其数据容量通常不能超过1K。

    如请求方式为post方式,则可以在请求的实体内容中向服务器发送数据,Post方式的特点:传送的数据量无限制。

消息头:

    用于http请求中的常用头

    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.org/index.jsp(客户机从哪个资源来访问服务器的,防盗链)

    User-Agent:Mozilla/4.0 (compatible;MSIE5.5;WIndows NT 5.0) (客户机的软件环境)    

    Cookie:(客户机通过这个头可以向服务器带数据)

    Connection:close/Keep-Alive

    Date:Tue,11 Jul 200- 18:23:51 GMT


         HTTP响应:

    一个HTTP响应代表服务器向客户端会送的数据,它包括:

    一个状态行,若干消息头,以及实体内容。

    状态行

    格式:HTTP版本号 状态码 原因叙述

    举例:HTTP/1.1 200 OK

    状态码用于表示服务器对请求的处理结果,他是一个三位的十进制数,响应状态码分为5类

    100~199   : 成功接受请求,要求客户端继续提交下一次请求才能完成整个处理过程。

    200~299   :表示成功请求已完成整个处理过程,例如200

    300~399   :为完成请求,客户需进一步细化请求。例如,请求的资源已经移动一个新地址,常用302,307,304.

    400~499   : 客户端的请求有错误,常用404

    599~599   : 服务器端出现错误,常用500


响应头:

    Location: http://www.xxx.com/index.jsp  (这个头配合302状态码使用,用于告诉客户找谁。

    Server  : Apache tomcat (服务器通过这个头,告诉浏览器服务器的类型。

    Content-Encoding:gzip (数据的压缩格式)

    Content-Length   : 80(告诉浏览器回送数据的长度)

    Content-Type      : text/html;charset=GB2312( 告诉浏览器回送数据的类型)

    Last-Modified      :  Tue,11 Jul 2000 18:23:51 GMT 告诉浏览器但前资源缓存时间

    Refresh              : 1;url=http://www.it315.org  (告诉浏览器多长时间刷新一次(可以接网址,代表多少秒后跳转))

    Content-Dispositon: attchment;filename=aaa.zip (告诉浏览器以下载方式打开数据)

    Transfer-Encoding: chunked (数据传送格式)

    ETag:W/"7777-1242234904000" (缓存相对的头)

    Expires:回送的资源缓存多长时间,-1或0 代表不缓存

    Cache-Control:no-chche

    Pragma:no-cache

    服务器通过以上两个头,也是控制浏览器不要缓存数据


如何传送压缩数据格式:

   public void doGet(HttpServletRequest request, HttpServletReponse response) Throws Excepton{

    String data = "http://www.mamicode.com/aaaa";

    ByteArrayOutputStream bout = new ByteArrayOutputStream();

    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.getOutputStream.write(gzip);   

  }

显示图片

 public void doGet(HttpServletRequest request, HttpServletReponse response) Throws Excepton{{}

    response.setHeader("content-type","image/bmp");

    InputStream in = this.getServletContext().getResourceAsStream("1.bmp");

    int len = 0;

    OutputStream out = response.getOutputStream();

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

        out.write(buffer,0,len);

    }


以下载方式打开图片

 public void doGet(HttpServletRequest request, HttpServletReponse response) Throws Excepton{

    response.setHeader("content-disposition","attachment;filename=3.jpg");

    InputStream in = this.getServletContext().getResourceAsStream("3.jpg");

    int len = 0;

    OutputStream out = response.getOutputStream();

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

        out.write(buffer,0,len);

    }




http协议