美文网首页java学习之路
图解HTTP(二)简单的 HTTP 协议

图解HTTP(二)简单的 HTTP 协议

作者: 唯有努力不欺人丶 | 来源:发表于2019-11-04 16:36 被阅读0次

    继续学习图解HTTP。

    http协议是用于客户端和服务端之间的通信

    • 请求访问文本或图片等资源的一端统称为客户端。
    • 提供资源响应的一端称之为服务端。
      在两台计算机之间使用http通讯时,必然有一端是客户端,有一端是服务端。
      有时候两台计算机作为客户端和服务端的角色可能会互换,但是在一次访问中,客户端和服务端是固定的。

    通过请求和响应的交换达成通信

    请求必定从客户端发出,而服务端回复反应。
    书中介绍了一些http的组成,比如请求报文头,协议版本之类的,但是其实多数时候我个人使用http都是直接拿来用的,所以这块接触的很少。

    请求报文的构成
    响应报文的构成

    HTTP是不保存状态的协议

    这个其实很多地方都有讲到,http的三大特性就包括无状态。
    简而言之协议自身不对请求和响应的通信状态进行保存。也就是不持久化。
    比如每当有新的请求就会对应有新的响应,协议本身不保存之前的请求和响应。这样做是为了简化http协议,可以更快的处理大量事务。
    但是有的时候我们又必须需要保存一些东西,比如登录淘宝以后,不管点到任何页面都要保存登录状态,任何请求都要服务端知道具体是哪个用户发送的请求。为了实现这个功能,http1.1引入了cookie功能。

    请求URI定位资源

    这里要提一下上一篇中的小知识点:URL是一种特殊的URI。
    然后继续说,URI是统一资源标识符,所以通过完整的URI是可以定位互联网上的资源的。
    当客户端请求资源时,要写明URI,指明URI的方式很多:


    请求URI

    以上两种是一样的效果。

    告知服务器意图的 HTTP 方法

    get:获取资源。
    这是一种常用的请求方式,但是这个因为能传递的数据很小,所以一般用来获取资源。
    post:传输实体主体
    与fet相比,post可传输的数据更多,而且更加安全。是一个平时较为常用的方法。(可传输文件等)
    put:传输文件
    在请求报文的主题中包含文件内容,直接上传到指定url。
    这个方法自身不带验证机制,所以有一些安全问题,所以一般的web网站不适用这个方法。
    如果用web验证机制,或者rest标准,才会开放使用这种方法。
    head:获取报文首部
    这个与get类似,但是不返回报文主体部分,只能确认url是否有效及资源更新的时间等。
    delete:删除文件。
    这个同put正好相反,但是机制差不多,都是要有web验证机制或者rest风格开发才会使用。
    options:询问支持的方法
    用来查询针对请求 URI 指定的资源支持的方法。大多数时候我们会规定某接口支持什么方法,比如:

    image.png
    如图,第一个接口只支持get,第二个只支持post,第三个则都可以。options就是可以询问一个接口支持什么方法。
    剩下还有几样我都没见过的,只能说很不常见,所以这里就不一一列举了。

    使用方法下达命令

    向请求URL发送请求报文时,采用不同方法被称为方法的命令。
    HTTP1.0和HTTP1.1是不同的,有一些细微的差别:


    HTTP/1.0 和 HTTP/1.1 支持的方法

    持久连接节省通信量

    在以前,一次HTTP协议就要断开一个TCP链接。当年2G传输,一次资源很少,这样也就可以了。但是现在随着HTTP的普及,一个HTML中可能包含大量图片。在发送请求访问 HTML 页面资源的同时,也会请求该 HTML 页面里包含的其他资源。因此,每次的请求都会造成无谓的 TCP 连接建立和断开,增加通信量的开销。

    持久连接

    持久连接也叫长连接。持久连接的特点是,只要任意一端没有明确提出断开连接,则保持 TCP 连接状态。
    在 HTTP/1.1 中,所有的连接默认都是持久连接,但在 HTTP/1.0 内并未标准化。
    注意一点:持久连接只是保持TCP的连接。

    管线化

    持久连接似的多数请求管线化成为可能。从前发送请求要能收到反应后才能再次发送请求,而现在不用等待响应就可以直接再次发送请求。
    比如,当请求一个包含 10 张图片的 HTML Web 页面,与挨个连接相比,用持久连接可以让请求更快结束。而管线化技术则比持久连接还要快。请求数越多,时间差就越明显。

    使用cookie的状态管理

    上面就提到了,HTTP是无状态协议,他不对任何请求和响应做保存,所以想要实现登录认证,只能人为的来处理。
    其实HTTP的无状态,由于不必保存状态,自然可减少服务器的 CPU 及内存资源的消耗。也正是因为这点才会被广泛使用。
    保留无状态协议这个特征的同时又要解决类似的矛盾问题,于是引入了 Cookie 技术。Cookie 技术通过在请求和响应报文中写入 Cookie 信息来控制客户端的状态。
    Cookie 会根据从服务器端发送的响应报文内的一个叫做 Set-Cookie 的首部字段信息,通知客户端保存 Cookie。当下次客户端再往该服务器发送请求时,客户端会自动在请求报文中加入 Cookie 值后发送出去。
    服务器端发现客户端发送过来的 Cookie 后,会去检查究竟是从哪一个客户端发来的连接请求,然后对比服务器上的记录,最后得到之前的状态信息。
    其实简而言之,就是在第一次返回响应时人为的在某地方放置一个辨别码,由http自动获取这个辨别码然后放到请求报文中。下次服务器就知道是谁访问的了。
    原书中这一块的图很可爱,分享给大家:


    没有cookie则保存cookie
    有cookie则取cookie
    上图请求报文和响应报文内容

    相关文章

      网友评论

        本文标题:图解HTTP(二)简单的 HTTP 协议

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