首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

应用层-HTTP协议

如果我们拿西游记的故事来比喻网络请求的过程的话,唐玄奘从东土大唐前往西天拜佛求经,再把经书从西天带回东土大唐,这整个过程倒是挺相似的。

HTTP协议作为计算机网络分层中应用层中最为常用的网络协议,当我们打开浏览器在地址栏输入一个URL时,相当于观音菩萨告诉唐玄奘在西天大雷音寺有三千大乘佛法,你快去取回来。

服务器接收到我们的请求并把相应网页代码传回来显示在浏览器上,在浏览器和服务器之间的传输协议就是HTTP协议。而HTTP协议作为应用层主要协议,也就是唐僧停留在长安城还没出城时候做的准备工作。

HTTP使用TCP作为它的支撑运输协议。TCP为HTTP提供可靠数据传输服务,所以HTTP协议不担心数据丢失。

HTTP是无状态协议。即HTTP协议自身不对请求和响应之间的通信状态进行保存,这是为了更快的处理大量事务。但如今很多例如需要保存登录状态的网站需求,于是引入了Cookie技术,用来保存状态信息。

HTTP报文有两种,由客户端发出的请求报文和从服务器端发回来的响应报文。

HTTP请求报文

一个典型的HTTP请求报文分三个部分组成,由请求行(请求方法、请求URI和HTTP版本),可选的首部和实体构成。例如:

对于访问网页来讲,最常用的类型就是GET。顾名思义,GET就是向服务器获取一些资源,除此之外请求方法还包含:

GET:获取资源

POST:传输实体主体

PUT:传输文件

HEAD:获得报文首部

DELETE:删除文件

.......

URI(Uniform Resource Identifier 统一资源标识符)表示请求资源的定位标识(PS:URL表示资源的位置,是URI的子集)。如果不是访问特定资源而是对服务器本身发起请求,可以用一个*来替代请求URI。

目前我们常用的HTTP协议版本是HTTP/1.1

请求行下面就是由若干行首部字段组成,首部字段通过键值对的方式保存。

Host表示请求的主机地址;

Accept-Charset表示浏览器可以接收的字符集;

Content-Type是指正文的格式;

.......

关于Connection: keep-alive是HTTP/1.1中针对持久性连接做出的支持,初始HTTP/1.0中每进行一次HTTP通信都要断开一次TCP连接,但随着互联网的发展与进步,我们在打开一个网页的时候,往往都会包含多个资源,每次请求都会造成无谓的TCP连接断开,增加通信量的开销。

但在HTTP/1.1中,所有的连接都默认是持久连接,其特点就是:只要任意一端没有明确提出断开连接,则持续保持TCP连接状态。可以在Keep-Alive后面跟随保持连接的时间,单位为秒。

插图来源《图解HTTP》

HTTP响应报文

跟请求报文类似,响应报文也分状态行、首部和实体,如:

状态码会反应HTTP请求的结果。“200”则表示正常请求成功,后面跟着状态码的原因短语。下一行开始则是响应报文的首部,其中包含创建响应的日期时间等字段。接着以一空行分隔,下一行为资源实体的主体内容。如果主体格式是HTML,说明返回的一个网页,浏览器就会将主体内容取出渲染成一个绚丽的网页。

应用层中的HTTP协议是基于TCP协议的,通过stream二进制流的方式将应用层中的报文传递给传输层中,传输层通过TCP协议将二进制流变成一个个的报文段,套上一个TCP头部,里头包含标记序号和端口号。在TCP连接中,需要进行三次握手来建立一条面向连接的可靠传输,详情我们在后续的TCP协议中再做笔记。

类比到我们开头说的取经路线的话,HTTP协议相当于是唐僧在明确自己要去取经的想法后,在自个家里收拾行李列个取经清单和注意事项,下一层的TCP协议相当于是到出城驿站打个电话给如来佛祖确认你在家,我想来拜访一下你,然后顺手把行李分类打包一下方便上路。

作者的话:

自顶向下的计算机网络学习方法是我在大学时候学习计算机网络这门课程时接触到的,书籍名称是《计算机网络:自顶向下方法(第6版)》,出版以来已被几百所大学和学院选用,是业界最经典的计算机网络教材之一。所以我也按照这个方法重新的梳理计算机网络方面的相关知识。《图解HTTP》也是我最近入手的一本入门书籍,作者用通俗易懂的文字说法和有趣的插图让你能快速的了解HTTP协议在贯穿整个网络请求中的作用,然后再回过头来看教材书,就会觉得很多以前难以理解的抽象概念变得清晰形象了。再结合网上平台如【极客时间】里网络协议专栏中,大牛对网络协议的最新讲解,可以不断深入的理解计算机网络的理论知识。希望对大家有所帮助。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190220G0IFXB00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券