• 简单了解http协议-1


    一、概述

      1、了解web及网络基础

      1.1、使用http协议访问web,web页面是如何呈现的?  

        

    1.2、什么是HTTP,概念及特性

      1)、HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写也可以称为超文本转移协议,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。

      2)、WWW常简称为web,分为web客户端,web服务器如上图。www提出的3个构建技术,分别为HTML,URL,HTTP

        HTML(HyperText Markup Language,超文本标记语言)是SGML标准通用标记语言下的一个应用,作为页面的文本标记语言

        HTTP作为文档传递协议

        URL(Uniform Resource Locator,统一资源定位符)指定文档所在地址

          协议部分,http://,必须的

          域名部分,www.baidu.com,必须的

          端口部分,80,必须的

          虚拟目录部分,域名后“/”开始“/”结束,不是必须的

          文件名部分,域名最后一个“/”开始到?结束,如没有“?”,则是“/”到“#”,不是必须的

          锚部分,从“#”开始到最后,不是必须的

          参数部分,从“?”开始到“#”之间的参数部分又称为搜索部分,查询部分,参数之间用“&”作为分隔符

          

          备注:通常我们更熟悉URL,还有URI,Scheme,URN

            URI(Uniform Resource Identifier,统一资源标识符)

              RFC2396分别定对这三个词定义

                Uniform 规定统一格式

                Resource 资源定义

                Identifier标识对象

              URI用字符串标识某一个互联网资源,而URL表示资源的地点

            Scheme://server:port/path/to/resource 模拟资源定位

            URN:Uniform Resource Naming统一资源命名协议

      2)、HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等);HTTP与TCP,IP,,DNS之间是什么关系?

        TCP/IP是什么?是互联网相关的各类协议族的总称,那么这里不得不提到tcp/ip四层模型与osi七层模型

        

        

          下图为网上找到一张比较全面的tcp/ip协议族,请参考

          

        

        TCP/IP通信传输流

      

      发送端从应用层向下走,接收端则往应用层上走

        发送端客户端在应用层http协议发出一个查看web页面的http请求

      接着为传输方便,在传输层tcp协议,把从应用层收到的数据(http请求报文)进行分割,并在各个报文上打上标记序号及端口号后转发给网络层

      在网络层ip协议,增加作为通信目的地的mac地址转发给链路层,这样,发往网络的通信请求就准备齐全了

      接收端的服务器在链路层接受到数据,按序往上层发送,一直到应用层,当传输到应用层,才能算真正接受到由客户端发送过来的http请求

      

      发送端在每一层传输数据时,就一定会加一个所属层首部信息,反之就是去除首部,这个过程就是封装(encapsulate)。

      与http协议关系密切的TCP,IP,DNS

      负责传输的ip协议

      ip间的通信时依赖mac地址的,在一个lan里会采用arp用以解析地址,反查出相应的mac地址进行通信,在到达一个目标地址可能需要经过n多个路由器等设备,那么就产生路由选择机制进行选择,请见下面图解

      

      

      

      确保可靠性的tcp协议,我们都知道ip是不可靠的,tcp是可靠的,为了准确无误的将数据送达目标出,tcp协议采用三次握手策略(tcp标签(flag)---SYN(synchronize)---ACK(acknowledgement)下图为三次握手的过程,除了三次握手tcp还有其他的手段来保证通信可靠性

      

      

      负责域名解析的DNS服务,也是应用层协议,通过了域名到ip地址的解析服务

      

      总结一下上面说的TCP,IP,DHS,HTTP的关系,请见下图

      

        

      

      3)、HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。向服务器请求时,只需要传送请求的方法和路径,请求方法常用的由GET、HEAD、POST,每种方法规定了客户与服务器联系的类型不同。

      4)、HTTP协议工作于客户端-服务端架构为上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。Web服务器根据接收到的请求后,向客户端发送响应信息,支持B/S及C/S模式

       5)、协议版本

        http/0.9,原型版本,简陋

        http/1.0,第一个广泛使用的版本,支持MIME,目前还在使用,缓存机制简陋

        http/1.1,增强了缓存功能,但是没有被广泛使用,google研发的spdy协议,加速资源获取

        http/2.0,加入了仿spdy,逐渐开始使用

    二、HTTP协议结构

    1、服务器与客户端之间的通信,通过请求和响应的交换达成通信

    请求报文是由请求方法、请求 URI、协议版本、可选的请求首部字段和内容实体构成的

     

     响应报文基本上有协议版本、状态码、用以解释状态码的原因短语、可选的响应首部字段以及实体主体构成。

     2、stateless无状态,HTTP协议是无状态协议,协议对于事务处理没有记忆能力,服务器无法持续追踪访问者来源,缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大,另外一方面,在服务器不需要先前信息时它的应答就较快。之前发送了什么,没有记忆功能,那么有些购物网站即使跳转到其它页面,也需要能继续保持登陆状态,网站为了能够掌握是谁送出的请求,需要保存用户状态,在http/1.1,虽然是无状态协议,为了解决这个问题,引入了Cookie技术,有了Cookie再用HTTP协议通信,就可以管理状态了。

     3、请求URI定位资源,轻松访问互联网上任意位置的资源

    完整的请求URI

     在首部字段host中写明了域名或IP地址

    4、告知服务器意图的HTTP请求方法-表明客户端希望服务器对资源执行的动作

        GET:从服务器获取一个资源;获取资源

        HEAD:只从服务器获取文档的响应头部;获得报文首部

        POST:向服务器发送要处理的数据;传输实体主体

        PUT:将请求的主题部分存储在服务器上;传输文件

        DELETE:请求删除服务器上指定的文档;删除文件

        TRACE:追踪请求到达服务器中间经过的代理服务器;追踪路径

        OPTIONS:请求服务器返回对指定资源支持使用的请求方法;询问支持的方法

        CONNECT:要求用隧道协议连接代理

        LINK:建立和资源之间的联系

        UNLINE:端口连接关系

    下面用几张图分别表示

    GET-获取资源

       GET方法用来请求访问已被URI识别的资源,指定的资源经服务器端解析后返回响应内容。如果橡CGI(Common Gateway Interface,通用网关接口)那样的程序,则返回经过执行后的输出结果,如果时文本就返回原样。

     

     POST-传输实体主体

      虽然用GET也可以传输实体的主体,但是一般用POST方法,POST的主要目的并不是获取响应的主体内容。

     PUT-传输文件

      像FTP协议的文件上传一样,要求在请求报文的主体中包含文件内容,然后保存到请求URI指定的位置,但是HTTP/1.1的PUT方法自身不待验证机制,存在安全性问题,因此一般网站不使用该方法,若配合web应用程序的验证机制,或架构设计采用REST(REpresentational State Transfer,表征状态转移)标准的同类Web网站,可能采用PUT方法

      

    HEAD-获得报文首部

      

    DELETE:删除文件

      和PUT时相反的方法,按要求URI删除指定资源,同样也是不待验证机制,需要配合Web应用程序的验证机制,或REST时才有可能会开发使用

      

    OPTIONS-询问支持的方法

      用来查询针对请求URI指定的资源支持的方法

      

    TRACE-追踪路径

      

    CONNECT-要求用隧道协议连接代理

      

    5、持久连接节省通信量

    初始版本的HTTP,每进行一次HTTP通信就要断开一次TCP连接,以目前的web网站资源丰富,多张图片就能进行多次通信,就造成通信量的开销,所以出现了持久连接(HTTP Persistent Connections,也称为HTTP keep-alive或HTTP connection reuse)的方法,持久连接的特点是,只要任意一端没有明确提出断开连接,则保持TCP连接状态。

    6、管道化

    持久请求后需要等待并收到响应,才能发送下一个请求,管道化技术出现后,不用等待响应亦可直接发送下一个请求,这样就可以做到同时并发多个请求,比持久连接还能更快结束

    7、使用cookie的状态管理

    由于http是无状态协议,优点显而易见,不保存状态,速度很快能够节省服务器cpu和内存的消耗,被众多场景应用。

    它不对之前的请求和响应状态进行管理,所以无法根据之前的状态进行本次的请求处理,比如每次登陆网页跳转新页面就不是在登陆状态,该有多麻烦,还要在每次请求报文中附加参数来管理登陆状态,但是这个会增加服务器的负担。解决这个矛盾问题,于是引入cookie技术,通过在请求和响应报文中写入COOKIE信息来控制客户端的状态。

    cookie会根据从服务器端发送的响应报文内的set-cookie的首部字段信息,通知客户端保存cookie,下次客户端再发送请求时,客户端会自动再请求报文中加入cookie值发送出去,服务器发现客户端发来的cookie会检查究竟是从哪个客户端发来的请求,然后对比服务器的记录,这就就得到了之前的状态信息。

    交互的情景如下

    1)、请求报文(没有cookie)

    2)、响应报文(服务器生成cookie信息)

    3)、请求报文(自动发送保存着的cookie信息)

    三、HTTP首部

    http协议用于客户端与服务器端之间的通信,通过请求和响应的交换达成通信

      1、http事务:

          请求报文:request

          响应报文:response

      2、报文语法格式  

        

        1)、request报文(请求方法、首部、空行、请求主题)

          <method请求方法><request-URL><version-http协议版本>

          <headers众多首部>

          空行

          <entity-body>请求主题部分

        下面是浏览器开发者模式查看

     1 GET / HTTP/1.1      
     2 Host: www.baidu.com   
     3 Connection: keep-alive  
     4 Cache-Control: max-age=0  
     5 Upgrade-Insecure-Requests: 1
     6 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36 
     7 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
     8 Referer: https://www.baidu.com/s?wd=http%E8%AF%B7%E6%B1%82&rsv_spt=1&rsv_iqid=0xc9b2cb5e00001169&issp=1&f=8&rsv_bp=0&rsv_idx=2&ie=utf-8&tn=baiduhome_pg&rsv_enter=1&rsv_sug3=26&rsv_sug1=27&rsv_sug7=100&rsv_sug2=0&inputT=11621&rsv_sug4=12845
     9 Accept-Encoding: gzip, deflate, br
    10 Accept-Language: zh-CN,zh;q=0.9
    11 Cookie: BAIDUID=DF763D2FC4C81041308532558F73B75C:FG=1; BIDUPSID=DF763D2FC4C81041308532558F73B75C; PSTM=1502936703; BD_UPN=12314753; sug=3; ORIGIN=2; bdime=0; BDUSS=1BORWNoa25oeVVnakV3WXVYQjFNTTdpMnVmeE82WDJIU3YtfkdjN354Z1JMZTViQVFBQUFBJCQAAAAAAAAAAAEAAAAcZ0sCUk9PTXRveWVhcm4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABGgxlsRoMZbc; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; BDSFRCVID=DlAsJeCCxG3t7B59LyzPHFLYzVv5d5M60RiY3J; H_BDCLCKID_SF=tJIfoK_-JI-3fP36qRJohtLHbfQH-PkXKKOLsJO8fKjMMh7_bf--D6-9yUjKbjFeaerlK666JxIK8lPmhPTxy5K_hNbt06F8teo9ano9--baEJbHQT3mM45bbN3i-4jqB2jzWb3cWKJV8UbS5CcPBTD02-nBat-OQ6npaJ5nJq5nhMtRy6C5jTo0ja0OqbQX2COXsROs2ROOKRcgq4bohjPq34beBtQm05bxoMFyaM-BhPt4Dt7x0l-he-b7tfoIynrQBl8bWDFKhC8Cj6KKDjP_-pO0-tcJM4o3LRj55RTjDb7GbKTjhPrMeJ_OWMT-0bFHKMcKaq7DbqRwjxjpqqb0WfQkWpjULGn7_JjO0bQkSPJCXPrCDMCnWMbB3fQxtNRB-CnjtpvhH4Td0-JobUPUDMc9LUvqHmcdot5yBbc8eIna5hjkbfJBQttjQTJZfJFfVIL-JC83HnRY-P4_-tAt2qoXetJyaR3xLJvbWJ5TEPnjDp6Y0nj-XhuDt-v2XKcmWnQMMt5ahf5x0UL5y6TLjNuetTLHf57KWnK8bJ6HDb4k-PnVeU0jLqbZKxJmMgkeLI3PJCTdJtcMyMjdWJIZ5GobtxuqtNr0hCOFfJOKHICCjjK5Df5; MCITY=-%3A; BDRCVFR[feWj1Vr5u3D]=I67x6TjHwwYf0; delPer=0; BD_CK_SAM=1; PSINO=1; BD_HOME=1; H_PS_PSSID=1420_27215_21081_26350_27750_22072; sugstore=1

        2)、response报文(响应的协议版本号、响应首部、空行、主题)

           <version响应的协议版本号><status状态码><reason-phrase原因短语>

           <headers响应首部>

           空行

           <entity-body>

        

     1 HTTP/1.1 200 OK
     2 Bdpagetype: 3
     3 Bdqid: 0xa19f626e00012bd8
     4 Cache-Control: private
     5 Ckpacknum: 2
     6 Ckrndstr: e00012bd8
     7 Connection: Keep-Alive
     8 Content-Encoding: gzip
     9 Content-Type: text/html;charset=utf-8
    10 Date: Tue, 18 Dec 2018 06:21:28 GMT
    11 P3p: CP=" OTI DSP COR IVA OUR IND COM "
    12 Server: BWS/1.1
    13 Set-Cookie: BDRCVFR[feWj1Vr5u3D]=mk3SLVN4HKm; path=/; domain=.baidu.com
    14 Set-Cookie: delPer=0; path=/; domain=.baidu.com
    15 Set-Cookie: BD_CK_SAM=1;path=/
    16 Set-Cookie: PSINO=1; domain=.baidu.com; path=/
    17 Set-Cookie: BDSVRTM=36; path=/
    18 Set-Cookie: H_PS_PSSID=1420_27215_21081_28132_26350_27750_22072; path=/; domain=.baidu.com
    19 Strict-Transport-Security: max-age=172800
    20 Vary: Accept-Encoding
    21 X-Ua-Compatible: IE=Edge,chrome=1
    22 Transfer-Encoding: chunked

        3)、method,请求方法,表明客户端希望服务器对资源执行的动作

          GET、HEAD、POST

        4)、version

           HTTP/<major主版本号>.<minor次版本号>

        5)、status

           三位数字,如200,301,302,404,502,标记请求处理过程中发生的情况

        6)、reason-phrase,说明状态码真正发生的事情

          状态码所标记的状态的简要描述;

        7)header

           每个请求或响应报文可包含任意个首部,每个首部都有首部名称,后面跟一个冒号,而后跟上一个可选空格,接着是一个值。

        8)、entity-body(实体部分,有用的数据库,可能为空),请求时附加的数据或响应时附加的数据

      3、请求方法GET、POST、PUT等上一章节已经说明

      4、status(状态码)

        1xx:100-101,信息提示;

        2xx:200-206,成功

        3xx:300-305,重定向

        4xx:400-415,错误类信息,客户端错误

        5xx:500-505,错误类信息,服务器端错误

       常用的状态码

        200,成功,请求的所有数据通过响应报文的entity-body部分发送ok

        301,请求的URL指向的资源已经被删除,但在响应报文中通过首部location指明了资源现在所处的新位置,moved Permanently(重定向)

        302,与301相似,但在响应报文中通过location 指明资源现在所处临时新位置,found(临时重定向)

        304,客户端发出了条件式请求,但服务器上的资源未曾发生改变,则通过响应此响应状态码通知客户端,not modified

        401,需要输入账号和密码认证方能访问资源,unauthorized

        403,   请求被拒绝,forbidden

        404,服务器无法找到客户端请求的资源,not found

        500,服务器内部错误,internal server error

        502,代理服务器从后端服务器收到了一条伪响应,bad gateway

      5、header 

        格式:name:value

        首部的分类:

            通用首部(对请求和响应都有何用)

            请求首部

            响应首部

            实体首部(entity-)

            扩展首部

          通用首部:

            date:报文的创建时间

            connection:连接状态,如keep-alive,close

            via:显示报文经过的中间节点

            Cache-Control:控制缓存

            Pragma:这个了解就行,和缓存相关的

     

          请求首部:

            请求首部里面还是有:

            条件式请求首部

            安全请求首部

            代理请求首部

            响应首部:

              信息性

              协商首部

              安全响应首部

          

            实体首部

                

      6、一次完整的请求过程

    1)、建立或处理连接:接受请求或拒绝请求

    2)、接受请求:接受来自网络的请求报文中对某资源的一次请求的过程

    3)、处理请求:对请求报文进行解析,并获取请求的资源及请求方法等相关信息

    4)、访问资源:获取请求报文中的请求的资源

    5)、构建响应报文

    6)、发送响应报文

    7)、记录日志

    转载请注明出处:https://www.cnblogs.com/zhangxingeng/p/10072458.html 

  • 相关阅读:
    寻找金秋
    两个周末,两个湖
    桂花林上,再读“六项精进”
    锄奸杜幸,穷寇勿追
    招聘所见思考
    Xufun’s Node.js Primer
    我的软件过程,一年再读
    企业的生命期限,和组织的危机感
    头痛,偷闲,拾黄叶
    喝酒这件事,和等绿灯的习惯
  • 原文地址:https://www.cnblogs.com/zhangxingeng/p/10072458.html
Copyright © 2020-2023  润新知