趣谈网络协议(十四):HTTP协议

Http协议简介

    上一节讲解的Socket套接字,它是基于网络层的TCP、UDP协议的Socket编程接口,它是做用于网络层,基于端到端的包发送。(它是对TCP/IP的封装,供程序员作网络开发所用的接口)javascript

    Http协议则是创建于网络层之上的应用层,它采用Socket编程接口并使用面向链接的TCP协议。css

    Http是轿车,提供了封装或者显示数据的具体形式;Socket则是发动机,提供网络通讯的能力html

HTTP包格式

    http包格式,主要分为三个部分。请求行,首部,实体,以下图java

    请求行

    主要有方法、url、版本。程序员

        url:就是浏览器的请求地址,例如百度的urlhttp://www.baidu.com编程

        方法:有GET、POST、PUT、DELETE四种json

            GET:顾名思义,get翻译为获取.就是向服务端获取资源浏览器

            POST:向服务端提交数据缓存

            PUT:向服务端传送文本信息等服务器

            DELETE:删除资源

        版本:如今的Http协议基本都是1.1 它是串行式的,在响应效率方面相对较低。

            新的版本2.0,它是采用并行式。例如一个html页面,它能够并行的加载html、js、css。效率显著提高

    首部

    首部的信息主要以键值对key-value的方式存在,例如:

        content-type:text/html; 或application/javascript; 或application/json;他们分别表示返回的文本类型

        Connetcion:keep-alive  保持链接

        Accept-CharSet:utf-8 客户端接收的文本编码为utf-8

        Cache-Controller:控制缓存。当值为max-age=0时,表示不使用缓存直接请求服务端资源。而当max-age不为0时则资源的缓存时间数值与该值比较,小于就直接使用缓存。 另外If-Modifed-Since也是一个关于缓存的,若是说服务端的资源更新了那客户端就得从新获取资源,而没有变动的话则会返回状态码304 Not Modified,客户端直接加载缓存这样节省了必定的带宽

        .....

        这样加上实体信息,应用层该干的事情基本完成,接下来就要把包发给传输层.怎么发给传输层呢?无非就是调用Socket,只不过浏览器这个程序已经帮你封装好了

    Http请求的发送

    HTTP 是基于 TCP 协议的,因此它使用面向链接的方式发送请求,经过 stream 二进制流的方式传给对方。固然,到了 TCP 层,它会把二进制流变成一个的报文段发送给服务器。

    在发送给每一个报文段的时候,都须要对方有一个回应 ACK,来保证报文可靠地到达了对方。若是没有回应,那么 TCP 这一层会进行从新传输,直到能够到达。同一个包有可能被传了好屡次,可是 HTTP 这一层不须要知道这一点,由于是 TCP 这一层在埋头苦干。

    HTTP 返回的构建

    HTTP 的返回报文也是有必定格式的。这也是基于 HTTP 1.1 的。

    状态行

        状态码为200则为成功、404为找不到资源、500服务器异常

    首部

        content-type:指定返回的类型.究竟是一个HTML仍是JSON

HTTP2.0

    HTTP目前最新的版本是2.0、它与1.1版本最大的不一样是解决1.1串行化的问题

    在1.1版本中,全部的http请求都是串行加载的,在应用层以纯文本的形式进行通讯.每次通讯都要带完整的 HTTP 的头。例如请求一个页面会出发多个HTTP请求:加载html文本、css样式文本、js脚本。它都是一个个进行的,加载完这个再进行下一个的加载,

    而在2.0版本中,它对Request header(请求头)进行压缩,他不会每次请求都在请求头携带大量的key-value,而是在两端创建对应内容的索引,这样在相同请求头的请求中只需加上内容索引就OK。

而且2.0是采用并行的方式同时加载html文本、js等文件。HTTP 2.0 协议将一个 TCP 的链接中,切分红多个流,每一个流都有本身独立的 ID,而且把请求分红Header帧和Data帧.每一个帧都有请求的惟一标识(ID).这样只要哪一个请求加载完毕便传给应用程序。这样大大提升了页面的加载响应效率

HTTP 2.0 还将全部的传输信息分割为更小的消息和帧,并对它们采用二进制格式编码。常见的帧有Header 帧,用于传输 Header 内容,而且会开启一个新的流。再就是Data 帧,用来传输正文实体。多个 Data 帧属于同一个流。

相关文章
相关标签/搜索