网络开发必备的HTTP协议知识

   一、什么是HTTP协议 

       HTTP协议是一种应用层协议,HTTP是HyperText Transfer Protocol(超文本传输协议)的英文缩写。HTTP可以通过传输层的TCP协议在客户端和服务器之间传输数据。HTTP协议主要用于Web浏览器和Web服务器之间的数据交换。我们在使用IE或Firefox浏览网页或下载Web资源时,通过在地址栏中输入,开头的4个字母http就相当于通知浏览器使用HTTP协议来和host所确定的服务器进行通讯。

       HTTP协议诞生于上世纪90年代初;第一个被广泛使用的版本是HTTP0.9。这个最初的版本非常简陋,它只向服务器发送一个非常简单的请求,而服务器也会返回一个很简单的响应以及相应的HTML文本。在随后的HTTP1.0中,增加了很多在HTTP0.9中没有的特性,如增加了资源重定位,大量的状态响应码等。在最新的HTTP1.1中,对HTTP1.0做了更进一步的改进,除了增加了一些请求方法外,最大的改进就是可以使HTTP保持连接状态。这对于一些频繁传输数据的应用是非常有益的。由于HTTP协议已经达到了它的目标,因此,负责制定规范的W3C已经停止了对HTTP的改进,所以,HTTP1.1将是HTTP协议的最后一个版本。

       无论你是从事网络程序开发,还是Web开发,或是网站的维护人员;都必须对HTTP协议有一个比较深入的了解。因此,HTTP协议不仅是Internet上应用最为广泛的协议,也是应用协议家族中比较简单的一种入门级协议;而且所有的Web服务器无一例外地都支持HTTP协议。这也充分地说明,对于那些开发网络程序,尤其是开发各种类型的Web服务器的开发人员,透彻地掌握HTTP协议将对你所开发的基于HTTP协议的系统产生直接的影响。

        二、HTTP的工作方式 

        HTTP协议采用了请求/响应的工作方式。基于HTTP1.0协议的客户端在每次向服务器发出请求后,服务器就会向客户端返回响应消息(包括请求是否正确以及所请求的数据),在确认客户端已经收到响应消息后,服务端就会关闭网络连接(其实是关闭TCP连接)。在这个数据传输过程中,并不保存任何历史信息和状态信息,因此,HTTP协议也被认为是无状态的协议,图1描绘了HTTP1.0协议的通讯过程。

<ignore_js_op>1.png

 


        在HTTP1.0协议中,当Web浏览器发出请求时,就意味着一个请求/响应会话已经开始。在请求、响应结束后,服务器就会立刻关闭这个连接。这种会话方式虽然简便,但它会带来另外一个问题。如果客户端浏览器访问的某个HTML或其他类型的Web页中包含有其他的Web资源,如JavaScript文件、图像文件、CSS文件等;当浏览器每遇到这样一个Web资源,就会建立一个HTTP会话。如果这样的资源很多的话,就会加重服务器的负担,同时也会影响客户端浏览器加载HTML等Web资源的效率。

 

在对上述的缺陷进行改进和完善后,HTTP1.1协议进入了我们的视线。HTTP1.1和HTTP1.0相比较而言,最大的区别就是增加了持久连接支持。当客户端使用HTTP1.1协议连接到服务器后,服务器就将关闭客户端连接的主动权交还给客户端;也就是说,在客户端向服务器发送一个请求并接收以一个响应后,只要不调用Socket类的close方法关闭网络连接,就可以继续向服务器发送HTTP请求。当HTML中含有其他的Web资源时,浏览器就可以使用同一个网络连接向下载这些资源,这样就可以大大减轻服务器的压力。图演示了这一过程。

 

<ignore_js_op>2.png

 

HTTP1.1除了支持持久连接外,还将HTTP1.0的请求方法从原来的三个(GET、POST和HEAD)扩展到了八个(OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE和CONNECT)。而且还增加了很多请求和响应字段,如上述的持久连接的字段Connection。这个字段有两个值,Close和Keep-Alive。如果使用Connection:Close,则关闭HTTP1.1的持久连接的功能,要打开HTTP1.1的持久连接的功能,必须使用Connection:Keep-Alive,或者不加Connection字段(因为HTTP1.1在默认情况下就是持久连接的)。除了这些,还提供了身份认证、状态管理和缓存(Cache)等相关的请求头和响应头。
转自:http://www.eoeandroid.com/thread-83496-1-1.html

转载于:https://www.cnblogs.com/hnrainll/archive/2012/07/06/2580019.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/569075.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

----uni-app之解决HBuilderX安装less成功运行时提示未安装----

转载于:https://www.cnblogs.com/zjy850984598/p/11238777.html

win7系统cocos2dx 3.4 绑定自定义类到Lua

Cocos2d-x 3.0开始使用bindings-generator来生成c类的lua绑定。bindings-generator基于tolua&#xff0c;通过配置tools/tolua中的ini文件以及运行genbindings.py就可以自动生成c类的绑定&#xff0c;具体的步骤在cocos2d-x-3.4\tools\tolua\README.mdown文件中&#xff0c;文档…

jQuery无任何标示获取td在表格中的行数和列数

当td没有任何标示时&#xff0c;在jQuery中实现获取其在表格中的行和列&#xff1a;<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns"http://www.w…

Dojo实现Tabs页报错(二)

转载于:https://www.cnblogs.com/riasky/p/3481643.html

mongo DB for C#

(1)Download the MongoDB C#驱动. http://www.nuget.org/packages/mongocsharpdriver/. (2) Add Reference to C# 驱动 DLLs 1MongoDB.Bson.dll 2MongoDB.Driver.dll 3MongoDB.Driver.Core.dll 或者 Nuget 下载 VS 2012/13 TOOLS -> Library Package Manager –> Manage …

WinLogon事件通知包编程

2007年5月18日&#xff0c;21:18:55| yexiaozhou2003[AT]hotmail.com(cooldog)今天看到CSDN中有网友问道如何获取用户按CtrlAltDel锁定桌面的事件。回帖后大致整理了一下&#xff0c;希望对大家有帮助。 首先我们要了解一下WinLogon&#xff0c;他是负责提供给用户交互式界面的…

bat函数调用 带返回值

bat 脚本之 使用函数 摘自&#xff1a;https://blog.csdn.net/peng_cao/article/details/73999076 综述bat函数写法bat函数调用bat函数返回值综述 Windows bat脚本是一种解释性的脚本语言&#xff0c;可以拿到做很多事情。对于稍简单的问题&#xff1a;比如通过注册表判断下档期…

配置 jvisualvm 监控Java虚拟机

配置JMX远程连接 1. 配置启动参数 启动jar时&#xff0c;添加如下配置-Dcom.sun.management.jmxremote.port5050 -Dcom.sun.management.jmxremote.sslfalse -Dcom.sun.management.jmxremote.authenticatefalse -Djava.rmi.server.hostname192.168.94.23 启动参数说明 -Dcom.sun…

所有排序算法

---恢复内容开始--- 先看看复杂度大小吧 冒泡排序 直接上代码&#xff0c;? # 冒泡排序def bubble_sort(alist): for j in range(len(alist) - 1, 0, -1): for i in range(j): if alist[i] > alist[i 1]: alist[i], alist[i 1] ali…

亲身经历之微信支付沙箱环境扫码支付遇到的那些坑

很多用户在调用微信支付扫码支付沙箱环境都一脸迷茫&#xff0c;废话不多说&#xff0c;遇到很多坑&#xff0c;为了让大家少走弯路下面直接说说我开发微信支付遇到坑&#xff0c;微信沙箱不是一般的坑&#xff0c;是很大的坑。 1.首先下载的官方demo,不能直接用&#xff0c;里…

Microsoft .NET Pet Shop 4.0 学习之旅(二) - 项目的引用关系1

Microsoft .NET Pet Shop 4.0 学习之旅&#xff08;二&#xff09; 项目的引用关系1 <?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />初看到Pet Shop 4.0的源代码觉得结构很复杂&#xff0c;今天我只讨论业务逻辑层&#xff08;…

vs.net各版本解决方案相互转换工具

感谢Arthur Liberman, 感谢zu14.cn三角猫 工具下载转载于:https://www.cnblogs.com/JoinZhang/archive/2010/07/09/1774617.html

杂谈杂想!

a) 在Live Write 实施插入地图 b) 金山词霸为什么总是把“音乐(YUE)”念成“音乐&#xff08;LE&#xff09;”&#xff1f;这个bug好多年&#xff01; c) 养的基瘦了&#xff0c;人却变胖了&#xff01; 转载于:https://www.cnblogs.com/jeffersyuan/archive/2007/11/10/95528…

链接Mysql的api mysqli和pdo

HP 5 及以上版本建议使用以下方式连接 MySQL : MySQLi extension ("i" 意为 improved)PDO (PHP Data Objects)PDO 应用在 12 种不同数据库中&#xff0c; MySQLi 只针对 MySQL 数据库。 如果你的项目需要在多种数据库中切换&#xff0c;建议使用 PDO 两者都是面向对…

Vue项目中自动将px转换为rem

一、配置与安装步骤&#xff1a; 1、在 Vue 项目的 src 文件夹下创建一个 config 文件夹&#xff1a; 2、在 config 文件夹中创建 rem.js&#xff1a; 3、将以下代码复制到 rem.js 中&#xff1a; // 基准大小 const baseSize 32 // 设置 rem 函数 function setRem () {// 当前…

MySQL8.0.19下载安装及配置详细步骤

下载&#xff1a; 软件下载地址&#xff1a;https://www.mysql.com/downloads/ 进入主页后下滑见 然后点击下图的MySQL Community Server 进入之后&#xff0c;点击Download进行下载 进入Download之后&#xff0c;点击No thanks, just start my download&#xff08;无需注…

解决[ERROR] [MY-013276] [Server] Failed to set datadir to ‘F:\Mysql\mysql-8.0.19-winx64\data\‘ (OS er

解决[ERROR] [MY-013276] [Server] Failed to set datadir to ‘F:\Mysql\mysql-8.0.19-winx64\data’ (OS errno: 2 - No such file or directory)报错问题 输入&#xff1a;mysqld --initialize --usermysql --console 如下图&#xff1a; 然后输入mysqld -install&#xff…

DataTable操作相关实例

代码 publicDataSet GetChildDepartmentsByUserId(Guid userId) { DataSet ds newDataSet(); try{ OrgChartDB.OrgChart_PermissionDataTable pdt permissionTableAdapter.GetDataByUserId(userId); for(inti 0; …

修改mysql密码时遇见ERROR 1064 (42000) You have an error in your SQL syntax; check the manual that correspo

修改mysql密码时遇见ERROR 1064 (42000) You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘password(‘123456’)’ at line 1报错 如下图&#xff1a; 这个句子翻译过来的意思是…

JavaScript基础内容

1.1 JavaScript基础概念&#xff1a; JavaScript (ECMAScript) &#xff1a;JavaScript 是脚本语言。JavaScript和ECMAScript通常被人用来表达相同的含义&#xff0c;但是JavaScript并不是这么一点含义&#xff0c;它是由ECMAScript 核心. DOM 文档对象模型. BOM 浏览器对象模型…