走进HTTP协议之二 基本HTTP机制
本系列第一节,我们回顾了与HTTP协议有关的基本术语和概念,本文将分析HTTP协议的基本原理与机制
HTTP协议的用途

HTTP协议用于客户端与服务器之间的通信,在通信线路两端,必定一端是客户端,另一端是服务器。
注意:客户端与服务器的角色不是固定的,一端充当客户端,也可能在某次请求中充当服务器。这取决与请求的发起端。HTTP协议属于应用层,建立在传输层协议TCP之上。客户端通过与服务器建立TCP连接,之后发送HTTP请求与接收HTTP响应都是通过访问Socket接口来调用TCP协议实现。请求与响应
HTTP协议规定,由客户端发起请求,服务器响应请求并返回信息。
如图,反映了一次HTTP请求并接收一个HTML文件的过程与时间消耗(RTT)。客户端通过TCP连接发送请求报文,服务器收到请求后向其传输文件并返回响应报文。请求报文
GET /index.html HTTP/1.1 Host: www.cnblogs.com/ACFLOOD Content-Length: 16
请求报文是由请求方法,请求URI,协议版本,可选的首部字段以及内容实体构成。
本例中,GET表示请求方法,/index.jsp是请求URI,HTTP/1.1是协议版本,其余的是首部字段。
响应报文
HTTP/1.1 200 OK Date: Mon, 10 May 2016 07:50:15 GMT Content-Length: 300 Content-Type: text/html
响应报文基本上由协议版本,状态码(返回请求成功或失败情况),对状态码的解释短语,可选的首部字段以及内容实体构成。
本例中,HTTP/1.1表示协议版本,200表示状态码,OK是对状态码的描述,Date是响应日期,与Content-Length和Content-Type一样,都属于首部字段。
HTTP是无状态协议
HTTP是一种无状态(stateless) 协议,HTTP协议本身不会对发送过的请求和相应的通信状态进行持久化处理。这样做的目的是为了保持HTTP协议的简单性,从而能够快速处理大量的事务,提高效率。
然而,在许多应用场景中,我们需要保持用户登录的状态或记录用户购物车中的商品。由于HTTP是无状态协议,所以必须引入一些技术来记录管理状态,例如Cookie。
HTTP方法
在第一节,我们曾辨析过GET与POST方法。实际上常用的HTTP方法远不止这些,下图展示了基本的HTTP方法。

GET:获取资源。通过URI请求访问已被识别的资源,经过服务器解析后返回相应内容。
POST:传输实体。例如登录注册时表单的提交。
PUT:传输文件。类似于FTP协议中的文件上传,PUT方法要求在请求报文的主体包含文件,保存到指定URI的位置。由于PUT方法没有验证机制,存在安全性问题,所以必须配合采用安全标准(如REST)。
HEAD:获得报文首部。不返回报文主体,仅返回首部。
DELETE:删除文件。DELELTE方法请求删除服务器上的资源,同样存在安全性问题。所以必须有验证机制与之配合。
OPTIONS:询问服务器支持哪些方法。示例
请求报文
OPTIONS * HTTP/1.1 Host: www.cnblogs.com
响应报文
HTTP/1.1 200 OK Allow: GET, POST, HEAD, OPTIONS
本例中,客户端通过OPTIONS *询问服务器支持的方法。响应报文最后返回了支持的 方法类型。
TRACE:追踪路径。发送请求时,通过在Max-Forwards首部字段中填入数值,每经过一个服务器数值减一,当减为零之后停止传输,最后收到请求的服务器发出响应。
CONNECT:通过与代理服务器建立隧道,使用隧道协议加密之后,与服务器进行TCP通信。常用的隧道协议有SSL(Secure Socket Layer)以及TLS(Transport Layer Security)。
非持久连接 和 持久连接
在实际的应用中,客户端往往会发出一系列请求,接着服务器端对每个请求进行响应。对于这些请求|响应,如果每次都经过一个单独的TCP连接发送,称为非持久连接。反之,如果每次都经过相同的TCP连接进行发送,称为持久连接。
非持久连接在每次请求|响应之后都要断开连接,下次再建立新的TCP连接,这样就造成了大量的通信开销。例如前面提到的往返时间(RTT) 就是在建立TCP连接的过程中的代价。
非持久连接给服务器带来了沉重的负担,每台服务器可能同时面对数以百计甚至更多的请求。持久连接就是为了解决这些问题,其特点是一直保持TCP连接状态,直到遇到明确的中断要求之后再中断连接。持久连接减少了通信开销,节省了通信量。
图 持久化连接节省通信开销总结
本文分析了基本的HTTP运行机制与原理,通过一些实例分析了HTTP请求与响应的过程,以及常见的HTTP方法。对于HTTP连接的特性与机制也进行了探讨。当然这些只是简单的建立起基础的概念。后续的系列我还会对Cookie与session的原理,请求发起的过程以及Socket(套接字)的理,HTTP解析的过程进行深入思考和剖析。
作者: I'm coding
链接:ACFLOOD
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
如果您觉得本文对您有所帮助,就给俺点个赞吧!
走进HTTP协议之二 基本HTTP机制的更多相关文章
- HTTP协议(二)header标头说明
HTTP协议(二):header标头说明 Header 解释 示例 Accept-Ranges 表明服务器是否支持指定范围请求及哪种类型的分段请求 Accept-Ranges: bytes Age 从 ...
- 小丁带你走进git的世界二-工作区暂存区分支
小丁带你走进git的世界二-工作区暂存区分支 一.Git基本工作流程 1.初始化一个仓库 git init git clone git仓库分为两种情况: 第一种是在现有项目或目录下导入所有文件到 ...
- Chrome插件开发入门(二)——消息传递机制
Chrome插件开发入门(二)——消息传递机制 由于插件的js运行环境有区别,所以消息传递机制是一个重要内容.阅读了很多博文,大家已经说得很清楚了,直接转一篇@姬小光 的博文,总结的挺好.后面附一 ...
- HTTP协议(二)
一.请求的格式: (一).请求行 (1).请求方法 1.GET 2.POST 3.PUT 4.DELETE 5.TRACE 6.OPTIONS (2).请求路径 (3).所用的协议 (二).请求头信息 ...
- 网络通信 --> 互联网协议(二)
互联网协议(二) 一.对上一节的总结 我们已经知道,网络通信就是交换数据包.电脑A向电脑B发送一个数据包,后者收到了,回复一个数据包,从而实现两台电脑之间的通信.数据包的结构,基本上是下面这样: 发送 ...
- mysql优化二之锁机制
mysql优化二之锁机制 mysql提供了锁机制和MVCC机制来保证并发操作的安全性,这里主要讨论锁机制, MVCC见下篇文章 mysql的锁按照锁粒度可分为行锁与表锁,按照操作类型划分可读锁和写锁 ...
- 蓝牙协议分析(11)_BLE安全机制之SM
1. 前言 注1:此SM是Security Manager的缩写,非彼SM,大家不要理解歪了! 书接上文,我们在“蓝牙协议分析(10)_BLE安全机制之LE Encryption”中介绍了BLE安全机 ...
- 蓝牙协议分析(10)_BLE安全机制之LE Encryption
1. 前言 前面文章介绍了两种BLE的安全机制:白名单[4]和LL privacy[3].说实话,在这危机四伏的年代,这两种“捂着脸讲话(其它人不知道是谁在讲话,因而不能插话.不能假传圣旨,但讲话的内 ...
- 蓝牙协议分析(9)_BLE安全机制之LL Privacy
1. 前言 在上一篇文章[1]中,我们介绍了BLE的白名单机制,这是一种通过地址进行简单的访问控制的安全机制.同时我们也提到了,这种安全机制只防君子,不防小人,试想这样一种场景: A设备表示只信任B. ...
随机推荐
- Jenkins新建项目中源码管理Repository URL使用Git报错:Failed to connect to repository : Command "git ls-remote -h......
之前部署了Gitlab+Gerrit+Jenkins持续集成环境,但在Jenkins中新建项目的源码管理"Repository URL"中添加git地址环节出现了问题,信息为&qu ...
- vue 动态修改 css
<div v-for="i in resultDate" v-if="i.ProjectId>='4'" @click=EveyTesttInfo( ...
- 第三周作业(三)---WordCounter
需求是这样的.写出一个程序,模仿wc.exe,可以统计出文件的一些信息(比如字符数.单词数目等等) 对于这个程序,我仍然用我从大一学来的C语言写的. 第一步:打开文件 printf("请输入 ...
- Flask、Celery、RabbitMQ学习计划
Flask (9.16-9.23) 相关组件了解 (9.16-17) WSGI:Werkzeug 数据库:SQLAlchemy *重点查看 urls和视图 (9.18-19) session和co ...
- Week3 关于“微软必应词典客户端”的案例分析
第一部分 调研,评测 一.iphone客户端的bug挖掘: 1.在例句中点击单词或短语,如果这个时候点得稍微快了一点,关联相应的翻译时会出现混乱. 经过调查发现,这个bug应该是必应得一个全平台错误 ...
- s标签s:if和s:set实现一个表格显示为多个表格
1.首先本来这个表格是这样的 2.这时候代码是这样的 <table cellpadding="4"> <tr> <th>指标点</th&g ...
- 生命游戏&一维细胞自动机 笔记
de 生命游戏是一种简单的聚合模型,展示了事物是如何聚合的,是自动机(CA)模型的一种.由剑桥大学约翰康威发明,其规则为: 1. 每个细胞拥有八个邻居,细胞状态只有存活(黑)和死亡(白)两种: 2.处 ...
- the confilict between validation and readonly in jquery
How can I disable jquery validation on readonly fields? http://stackoverflow.com/questions/10803294/ ...
- [读书笔记]Linux命令行与shell编程读书笔记01
1. Linux的组成部分 1)linux内核(kernel) 2)GNU工具链 3)GUI/CLI工作几面(shell) 4)应用程序(app) 2Linux内核的主要工作: 1) 管理内存 2)管 ...
- Node url模块
const url = require("url");var u = "https://www.jd.com:443/ad/index?uname=qd";// ...