http协议

一、什么是http协议

  Hyper Text Transfer Protocol(超文本传输协议)简称HTTP协议,它是TCP/IP协议在应用层的一个协议,其主要有两个版本HTTP/1.0、HTTP/1.1。

  

二、http协议的特点

  在HTTP1.0协议中,客户端与web服务器建立连接后,只能获得一个web资源。HTTP1.1协议,允许客户端与web服务器建立连接后,在一个连接上获取多个web资源

  无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。

  无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

三、http请求和响应

  http请求:

  客户端连上服务器后,向服务器请求某个web资源,称之为客户端向服务器发送了一个HTTP请求。一个完整的HTTP请求包括如下内容:

       一个请求行、若干消息头、以及实体内容,其中的一些消息头和实体内容都是可选的,消息头和实体内容之间要用空行隔开。如下所示:

   

  1、请求行

    请求方式有:POST、GET、HEAD、OPTIONS、DELETE、TRACE、PUT

          常用的有:POST、GET

    不管POST或GET,都用于向服务器请求某个WEB资源,这两种方式的区别主要表现在数据传递上,客户端通过这两种方式都可以带一些数据给服务器:

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

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

                   GET方式的特点:在URL地址后附带的参数是有限制的,其数据容量不能超过1K。另一方面,一些用户密码等保密数据不适合以GET方式提交。

    2)如请求方式为POST方式,则可以在请求的实体内容中向服务器发送数据,例如:

           POST /servlet/ParamsServlet HTTP/1.1

           Host:

           Content-Type: application/x-www-form-urlencoded

           Content-Length: 28

     name=abc&password=xyz

           Post方式的特点:传送的数据量无限制。

  2、请求头

    

    

    常用请求头详解:

    Accept:用于告诉服务器,客户支持的数据类型。

    Accept-Charset:用于告诉服务器,客户采用的编码。

    Accept-Encoding:用于告诉服务器,客户支持的数据压缩格式。

    Host:客户机通过这个头告诉服务器,想访问的主机名。

    If-Modified-Since:用于告诉服务器,资源缓存的时间。

    Referer:用于告诉服务器,它是从哪个资源来访问服务器的(防盗链)。

    Content-Type:告知服务器,请求正文的MIME类型

                   默认类型:application/x-www-form-urlencoded(表单enctype属性的默认取值)

                            具体体现:username=abc&password=123

                   其他类型:multipart/form-data(文件上传时用的)

    User-Agent:用于告诉服务器,客户机使用的软件环境。

    Cookie:客户带过来的cookie信息。

    Connection:表示是否持续连接。如果想本次请求后关闭连接,使用close;如果想持续连接,使用keep-Alive。

    Date:发送请求时间。

  

  http响应:

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

            一个状态行、若干消息头、以及实体内容 ,其中的一些消息头和实体内容都是可选的,消息头和实体内容之间要用空行隔开。

    

  1、状态行

    状态行

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

              举例:HTTP/1.1 200 OK

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

     

    

    HTTP请求中的常用响应头:

      Location: http://www.it315.org/index.jsp

      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 

      Set-Cookie:SS=Q0=5Lb_nQ; path=/search

      Expires: -1

      Cache-Control: no-cache 

      Pragma: no-cache  

      Connection: close/Keep-Alive  

      Date: Tue, 11 Jul 2000 18:23:51 GMT

      常用响应头详解:

      Location:这个头配合302状态码使用,用于告诉客户找谁。

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

      Content-Encoding:服务器数据压缩格式。

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

      Content-Type:告诉浏览器客户端,响应文正的MIME类型。默认text/html

      Last-Modified:告诉浏览器当前资源缓存的时间。

      Refresh:告诉浏览器多长时间刷新一次。

      Content-Disposition:告诉浏览器以下载方式打开数据。

      Expires: 告诉浏览器把回送的资源缓存多长时间。-1或0则表示不缓存。

      Cache-Control: 通过这个头也是告诉浏览器不要缓存数据。http1.1有效

      Pragma: 通过这个头也是告诉浏览器不要缓存数据。http1.0有效

  

    通用信息头指既能用于请求,又能用于响应的一些消息头。

      Cache-Control: no-cache 

      Pragma: no-cache   

      Connection: close/Keep-Alive   

      Date: Tue, 11 Jul 2000 18:23:51 GMT

原文地址:https://www.cnblogs.com/kyleinjava/p/9008442.html