Http协议

作者: 小白和小黑 | 来源:发表于2015-05-29 01:50 被阅读398次

    前言

    首先了解一下什么是Http协议,首先看一下百度百科上面对于Http协议的定义:

    [超文本传输协议](HTTP,HyperText Transfer Protocol)是[互联网]上应用最为广泛的一种[网络协议].所有的[WWW]文件都必须遵守这个标准。

    平时访问网站我都会在地址栏上面填写一些网址www.google.com.hk,就可以访问相关的网页了,但是究竟如何因为我输入的那一长串的东西就能看到网页呢?我们来一起探究一下。

    网页的显示原理:浏览器根据提供的URL给Web服务器发送一个request,Web服务器接收request进行处理生成一个response,发送给浏览器,浏览器解析response中的html,这样网页就显示了。

    接触互联网时间长,但是没有深入,我之前的认识就是觉得Http协议就是访问网页,但是不然,因为是一个协议,只要双方都遵守这个协议我们就可以进行操作,比如我们常用的QQ和迅雷,也遵循这个协议。

    URL

    URL(Uniform Resource Locator) 地址用于描述一个网络上的资源, 基本格式如下

    schema://host[:port#]/path/.../[;url-params][?query-string][#anchor]

    1.schema:底层使用的协议(https,http,ftp)
    2.host: HTTP服务器的IP地址或者域名
    3.port#:HTTP服务器的默认端口是80,这种情况下端口号可以省略。如果使用了别的端口,必须指明,例如 http://www.jianshu.com:8080/
    4.path:访问资源的地址
    5.url-params: 参数列表(有一些需要传递的数据可以通过参数列表的方式)
    6.query-string:发送给http服务器的数据
    7.anchor- 锚

    说了这么多,我们找个网址来解析一下就会更加清晰明了。

    E.G:http://www.mywebsite.com/sj/test/test.aspx?name=sviergn&x=true#stuff
    schema:http
    host:www.mywebsite.com
    path:sj/test
    query-string:name=sviergn&x=true
    Anchor: stuff

    疑问:什么是Anchor?他的作用是什么?为什么要使用?

    Request

    请求分为三部分:请求行、消息报头、请求正文

    1.请求行:以一个方法符号开头,以空格分开,后面跟着请求的URI和协议的版本

    格式:Method Request-URI HTTP-Version CRLF
          Method:请求方法
          Request-URI:一个统一资源标识符
          HTTP-Version:请求的HTTP协议版本
          CRLF:表示回车和换行。注:不允许出现单独的CR或LF字符

    1.1 请求的方法

      GET:请求获取Request-URI所标识的资源
      POST:在Request-URI所标识的资源后附加新的数据
      HEAD:请求获取由Request-URI所标识的资源的响应消息报头
      PUT:请求服务器存储一个资源,并用Request-URI作为其标识
      DELETE:请求服务器删除Request-URI所标识的资源
      TRACE:请求服务器回送收到的请求信息,主要用于测试或诊断
      CONNECT:保留将来使用
      OPTIONS:请求查询服务器的性能,或者查询与资源相关的选项和需求  
    

    举个栗子:
    1.浏览器上的地址栏输入网址,浏览器采用GET方法向服务器获取资源
    eg:GET/form.html HTTP/1.1(CRLF)

    2.POST方法要求被请求服务器接受附在请求后面的数据,常用于提交表单
    eg:POST /reg.jsp HTTP/ (CRLF)
    Accept:image/gif,image/x-xbit,... (CRLF)
    ...
    HOST:www.guet.edu.cn (CRLF)
    Content-Length:22 (CRLF)
    Connection:Keep-Alive (CRLF)
    Cache-Control:no-cache (CRLF)
    (CRLF) //该CRLF表示消息报头已经结束,在此之前为消息报头
    user=jeffrey&pwd=1234 //此行以下为提交的数据

    2 消息报头

    2.1消息报头包括普通报头、请求报头、响应报头、实体报头
    2.2每个报头域都是由名字+":"+空格+值 组成 大小写无关
    2.3普通报头
          普通的报头中,有少数报头域用于所有的请求和响应消息,但并不用于被传输的实体,只用于传输的消息
          举个栗子:
          Cache-Control 用于指定缓存指令,缓存指令时单向的(响应中出现的缓存指令在请求中未必会出现),独立的(一个消息的缓存指令不会影响另一个消息处理的缓存机制),HTTP1.0使用的类似的报头域为Pragma.
          请求时的缓存指令包括:no-cache(用于指示请求或响应消息不能缓存)、no-store、max-age、max-stale、min-fresh、only-if-cached
          响应时的缓存指令包括:public、private、no-cache、no-store、no-transform、must-revalidate、proxy-revalidate、max-age、s-maxage
          Date普通报头域表示消息产生的日期和时间
          Connection普通报头域允许发送指定连接的选项。
    2.4请求报头
       请求报头允许客户端向服务器端传递请求的附加信息以及客户端自身的信息。
       常用的请求报头:
          Accept:接受哪些类型的信息.Accept:image/gif 希望接受GIF图像格式的资源
          Accept-Charset:接受的字符集.Accept-Charset:iso-8859-1,gb2312 若没设置,任何字符集都能接受.
          Accept-Encoding:类似于Accept,用于接受内容编码.
          Accept-Language:类似于Accept,指定一种自然语言.
          Authorization:用于证明客户端有权查看某个资源.
          Host:发送请求时,该报头域是必需的
          User-Agent:服务器应用程序就是从User-Agent获取操作系统、浏览器和其他属性

      GET /form.html HTTP/1.1 (CRLF)
      Accept:image/gif,image/x-xbitmap,image/jpeg,application/x-shockwave-flash,application/vnd.ms-excel,application/vnd.ms-powerpoint,application/msword,*/* (CRLF)
      Accept-Language:zh-cn (CRLF)
      Accept-Encoding:gzip,deflate (CRLF)
      If-Modified-Since:Wed,05 Jan 2007 11:21:25 GMT (CRLF)
      If-None-Match:W/"80b1a4c018f3c41:8317" (CRLF)
      User-Agent:Mozilla/4.0(compatible;MSIE6.0;Windows NT 5.0) (CRLF)
      Host:www.guet.edu.cn (CRLF)
      Connection:Keep-Alive (CRLF)
      (CRLF)
    

    2.5响应报头
          响应报头允许服务器传递不能放在状态行中的附加响应信息,以及关于服务器的信息和对Request-URI所标识的资源进行下一步访问的信息
    Location:重定向接受者到一个新的位置(常用于更换域名的时候)
    Server:服务器用来处理请求的软件信息(与User-Agent请求相对应)
    WWW-Authenticate:必须包含在401(未授权的)响应消息中.
    2.6实体报头
          请求和响应消息都可以传送一个实体.一个实体由实体报头域和实体正文组成,发送的话可以只发送实体报头域
          Content-Encoding:媒体类型的修饰符
          Content-Language:资源所用的自然语言
          Content-Length:实体征文的长度,以字节方式存储的十进制数字表示
          Content-Type:发送给接收者的实体正文的媒体类型
          Last-Modified:指示资源的最后修改日期和时间
          Expires:响应过期的日期和时间

    response

    HTTP响应分为三部分:状态行、消息报头、响应正文
    1.状态行格式如下:HTTP-Version Status-Code Reason-Phrase CRLF
          HTTP-Version:服务器HTTP协议的版本
          Status-Code:服务器发回的响应状态代码
          Reason-Phrase:状态代码的文本描述
    2.状态代码由三位数字组成,第一个数字定义了响应的类别,
          1XX:指示信息 表示请求已接收,继续处理
          2XX:成功 表示请求已被成功接收,继续处理
          3XX:重定向 要完成请求必须进行更进一步的操作
          4XX:客户端错误 请求由语法的错误或请求无法实现
          5XX:服务器错误 服务器未能实现合法的请求
    3.常见状态代码、状态描述、说明:
          200 OK //客户端请求成功
          400 Bad Request //客户端请求有语法错误,不能被服务器所理解
          401 Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用
          403 Forbidden //服务器收到请求,但是拒绝提供服务
          404 Not Found //请求资源不存在,eg:输入了错误的URL
          500 Internal Server Error //服务器发生不可预期的错误
          503 Server Unavailable //服务器当前不能处理客户端的请求,一段时间后可能恢复正常

    说了一大圈的理论,把我自己都快搞睡着了,那我们来玩点好玩的,在电脑上面显示这些信息

    利用talnet观察http协议的通讯过程

    因为Mac没有搞清楚telnet,只能借用人家的文字了。
    1.打开telnet
          在Mac终端上直接敲击 telnet指令
    1.2 打开telnet回显功能set localecho
    2、连接服务器并发送请求
    2.1 openwww.guet.edu.cn 80 //注意端口号不能省略
          HEAD /index.asp HTTP/1.0 Host:www.guet.edu.cn
    2.2 open www.sina.com.cn 80 //在命令提示符号下直接输入telnet www.sina.com.cn 80
          HEAD /index.asp HTTP/1.0 Host:www.sina.com.cn
    3 实验结果:
    3.1 请求信息2.1得到的响应是:
          HTTP/1.1 200 OK //请求成功
          Server: Microsoft-IIS/5.0 //web服务器
          Date: Thu,08 Mar 200707:17:51          
          GMTConnection: Keep-Alive
          Content-Length: 23330
          Content-Type: text/html
          Expries: Thu,08 Mar 2007 07:16:51 GMT
          Set-Cookie: ASPSESSIONIDQAQBQQQB=BEJCDGKADEDJKLKKAJEOIMMH; path=/
          Cache-control: private
    //资源内容省略
    3.2 请求信息2.2得到的响应是:
          HTTP/1.0 404 Not Found //请求失败
          Date: Thu, 08 Mar 2007 07:50:50 GMT
          Server: Apache/2.0.54 <Unix>
          Last-Modified: Thu, 30 Nov 2006 11:35:41 GMT
          ETag: "6277a-415-e7c76980"
          Accept-Ranges: bytes
     X-Powered-By:mod_xlayout_jh/0.0.1vhs.markII.remix
          Vary: Accept-Encoding
        Content-Type: text/html
          X-Cache: MISS from zjm152-78.sina.com.cn
          Via: 1.0 zjm152-78.sina.com.cn:80<squid/2.6.STABLES-20061207>
          X-Cache: MISS from th-143.sina.com.cn
          Connection: close
    失去了跟主机的连接
    按任意键继续...
    4 .注意事项:1、出现输入错误,则请求不会成功。
    2、报头域不分大小写。
    3、更深一步了解HTTP协议,可以查看RFC2616,在http://www.letf.org/rfc上找到该文件。
    4、开发后台程序必须掌握http协议

    相关文章

      网友评论

        本文标题:Http协议

        本文链接:https://www.haomeiwen.com/subject/bzbrqttx.html