HTTP简介

作者: 77fbb8bc241c | 来源:发表于2019-08-19 17:00 被阅读0次

    主要内容:

    • Web客户端与服务端是如何通信的
    • HTTP报文格式
    • 底层TCP网络传输

    1.1 Web客户端和服务端

    Web资源都是存储在Web服务器上的,因为Web服务器使用HTTP通信,以此也成为HTTP服务器。HTTP客户端发出HTTP请求,服务端会根据客户端传输的数据,作出HTTP响应发送请求的数据。如图 1-1 所示,HTTP客户端和HTTP服务端工作原理:


    image.png
    • Web服务器是Web资源的仓库,资源包含任意内容:文本文件、HTML文档、Word文件、图片、视频等。但是资源不一定非得是像前面提高的静态文件,也可以是根据Web应用程序生成的动态内容,比如数据库中里的数据。
    • Web客户端,浏览器是一种我们经常使用到的Web客户端,其中还可以是手机原生应用、小程序等。也可以说能实现发送HTTP请求的程序都可以是Web客户端。

    1.2 URI

    每一个Web服务器资源都有一个名字,这样客户端才可以说明它想要的是什么资源。服务器资源名称被称为统一资源标识符(Uniform Resource Identifier, URI)。

    • URI的一般格式:
    <方案名称>:<分层部分>[? <查询参数>] [# <片段>]
    

    统一资源定位符(URL)是资源标识符最常见的形式。如图 1-2 为URL实例:

    image.png

    1.3 HTTP报文

    HTTP是一种请求-响应协议,HTTP报文是由一行一行的简单字符串组成的,都是纯文本,易读。HTTP报文格式:

    • 起始行
      报文的第一行,在请求报文中用来说明要做什么,在响应报文中说明出现了什么。
    • 首部字段
      起始行后面有零个或者多个首部字段。每个字段都包括一个名字和值。两者之间用冒号(:)分隔。首部以空行结束。
    • 主体
      空行之后就是可选的报文主体,其中包含了所有类型的数据。

    HTTP报文实例:

    • 请求报文
    GET /index.html HTTP/1.0                       起始行
    Accept: text/*                                 首部
    Accept-Language: en, fr
    
    • 响应报文
    HTTP/1.0 200 OK                                  起始行
    Content-type: text/plain                         首部
    Content-length: 19
    
    Hi, I am index                                   主体
    

    1.4 事务

    1.4.1 HTTP请求方法

    请求方法是起始行中的第一个单词,指明了客户端要对资源进行的操作。
    常见的HTTP方法:

    • GET:命令服务器返回指定资源
    • POST:命令服务器将报文主体中的数据传递给URI指定的资源。
    • PUT:命令服务器将报文主体中的数据设置为URI指定的资源。
    • DELETE:命令服务器删除URI指定资源

    1.4.2 HTTP响应

    HTTP响应报文是对HTTP请求报文的回复。跟HTTP请求报文一样,也是一些列的文本组成。
    状态码:

    • 1xx:情报状态码。
    • 2xx: 成功状态码。
    • 3xx:重定向状态码。
    • 4xx:客户端错误状态码。
    • 5xx:服务端错误状态码。

    一个Telnet实例

    GET /index.html HTTP/1.1 
    
    HTTP/1.1 200 OK
    Accept-Ranges: bytes
    Cache-Control: no-cache
    Connection: Keep-Alive
    Content-Length: 14615
    Content-Type: text/html
    Date: Mon, 19 Aug 2019 08:57:08 GMT
    Etag: "5d54da0d-3917"
    Last-Modified: Thu, 15 Aug 2019 04:05:33 GMT
    P3p: CP=" OTI DSP COR IVA OUR IND COM "
    Pragma: no-cache
    Server: BWS/1.1
    Set-Cookie: BAIDUID=668FD107459E334256837E510A760274:FG=1; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com
    Set-Cookie: BIDUPSID=668FD107459E334256837E510A760274; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com
    Set-Cookie: PSTM=1566205028; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com
    Vary: Accept-Encoding
    X-Ua-Compatible: IE=Edge,chrome=1
    
    <!DOCTYPE html><!--STATUS OK-->
    <html>
    <head>
        <meta http-equiv="content-type" content="text/html;charset=utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=Edge">
        <link rel="dns-prefetch" href="//s1.bdstatic.com"/>
        <link rel="dns-prefetch" href="//t1.baidu.com"/>
        <link rel="dns-prefetch" href="//t2.baidu.com"/>
        <link rel="dns-prefetch" href="//t3.baidu.com"/>
        <link rel="dns-prefetch" href="//t10.baidu.com"/>
        <link rel="dns-prefetch" href="//t11.baidu.com"/>
        <link rel="dns-prefetch" href="//t12.baidu.com"/>
        <link rel="dns-prefetch" href="//b1.bdstatic.com"/>
        <title>百度一下,你就知道</title>
        <link href="http://s1.bdstatic.com/r/www/cache/static/home/css/index.css" rel="stylesheet" type="text/css" />
        <!--[if lte IE 8]><style index="index" >#content{height:480px\9}#m{top:260px\9}</style><![endif]-->
        <!--[if IE 8]><style index="index" >#u1 a.mnav,#u1 a.mnav:visited{font-family:simsun}</style><![endif]-->
        <script>var hashMatch = document.location.href.match(/#+(.*wd=[^&].+)/);if (hashMatch && hashMatch[0] && hashMatch[1]) {document.location.replace("http://"+location.host+"/s?"+hashMatch[1]);}var ns_c = function(){};</script>
        <script>function h(obj){obj.style.behavior='url(#default#homepage)';var a = obj.setHomePage('//www.baidu.com/');}</script>
        <noscript><meta http-equiv="refresh" content="0; url=/baidu.html?from=noscript"/></noscript>
        <script>window._ASYNC_START=new Date().getTime();</script>
    </head>
    

    参考文献:

    • 《HTTP权威指南》

    相关文章

      网友评论

        本文标题:HTTP简介

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