浅析HTTP协议
HTTP协议是什么?
简单来说,就是一个基于应用层的通信规范:双方要进行通信,大家都要遵守一个规范,这个规范就是HTTP协议。
HTTP协议能做什么?
很多人首先一定会想到:浏览网页。没错,浏览网页是HTTP的主要应用,但是这并不代表HTTP就只能应用于网页的浏览。HTTP是一种协议,只要通信的双方都遵守这个协议,HTTP就能有用武之地。比如咱们常用的QQ,迅雷这些软件,都会使用HTTP协议(还包括其他的协议)。
HTTP协议如何工作?
大家都知道一般的通信流程:首先客户端发送一个请求(request)给服务器,服务器在接收到这个请求后将生成一个响应(response)返回给客户端。
在这个通信的过程中HTTP协议在以下4个方面做了规定:
1. Request和Response的格式
Request格式:
HTTP请求行
(请求)头
空行
可选的消息体
注:请求行和标题必须以<CR><LF> 作为结尾(也就是,回车然后换行)。空行内必须只有<CR><LF>而无其他空格。在HTTP/1.1 协议中,所有的请求头,除Host外,都是可选的。
实例:
GET / HTTP/1.1
Host: gpcuster.cnblogs.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
If-Modified-Since: Mon, 25 May 2009 03:19:18 GMT
Response格式:
HTTP状态行
(应答)头
空行
可选的消息体
实例:
HTTP/1.1 200 OK
Cache-Control: private, max-age=30
Content-Type: text/html; charset=utf-8
Content-Encoding: gzip
Expires: Mon, 25 May 2009 03:20:33 GMT
Last-Modified: Mon, 25 May 2009 03:20:03 GMT
Vary: Accept-Encoding
Server: Microsoft-IIS/7.0
X-AspNet-Version: 2.0.50727
X-Powered-By: ASP.NET
Date: Mon, 25 May 2009 03:20:02 GMT
Content-Length: 12173
消息体的内容(略)
详细的信息请参考:RFC 2616。
关于HTTP headers的简要介绍,请查看:Quick reference to HTTP headers
2. 建立连接的方式
HTTP支持2中建立连接的方式:非持久连接和持久连接(HTTP1.1默认的连接方式为持久连接)。
1) 非持久连接
让我们查看一下非持久连接情况下从服务器到客户传送一个Web页面的步骤。假设该贝面由1个基本HTML文件和10个JPEG图像构成,而且所有这些对象都存放在同一台服务器主机中。再假设该基本HTML文件的URL为:gpcuster.cnblogs.com/index.html。
下面是具体步骡:
1.HTTP客户初始化一个与服务器主机gpcuster.cnblogs.com中的HTTP服务器的TCP连接。HTTP服务器使用默认端口号80监听来自HTTP客户的连接建立请求。
2.HTTP客户经由与TCP连接相关联的本地套接字发出—个HTTP请求消息。这个消息中包含路径名/somepath/index.html。
3.HTTP服务器经由与TCP连接相关联的本地套接字接收这个请求消息,再从服务器主机的内存或硬盘中取出对象/somepath/index.html,经由同一个套接字发出包含该对象的响应消息。
4.HTTP服务器告知TCP关闭这个TCP连接(不过TCP要到客户收到刚才这个响应消息之后才会真正终止这个连接)。
5.HTTP客户经由同一个套接字接收这个响应消息。TCP连接随后终止。该消息标明所封装的对象是一个HTML文件。客户从中取出这个文件,加以分析后发现其中有10个JPEG对象的引用。
6.给每一个引用到的JPEG对象重复步骡1-4。
上述步骤之所以称为使用非持久连接,原因是每次服务器发出一个对象后,相应的TCP连接就被关闭,也就是说每个连接都没有持续到可用于传送其他对象。每个TCP连接只用于传输一个请求消息和一个响应消息。就上述例子而言,用户每请求一次那个web页面,就产生11个TCP连接。
2) 持久连接
非持久连接有些缺点。首先,客户得为每个待请求的对象建立并维护一个新的连接。对于每个这样的连接,TCP得在客户端和服务器端分配TCP缓冲区,并维持TCP变量。对于有可能同时为来自数百个不同客户的请求提供服务的web服务器来说,这会严重增加其负担。其次,如前所述,每个对象都有2个RTT的响应延长——一个RTT用于建立TCP连接,另—个RTT用于请求和接收对象。最后,每个对象都遭受TCP缓启动,因为每个TCP连接都起始于缓启动阶段。不过并行TCP连接的使用能够部分减轻RTT延迟和缓启动延迟的影响。
在持久连接情况下,服务器在发出响应后让TCP连接继续打开着。同一对客户/服务器之间的后续请求和响应可以通过这个连接发送。整个Web页面(上例中为包含一个基本HTMLL文件和10个图像的页面)自不用说可以通过单个持久TCP连接发送:甚至存放在同一个服务器中的多个web页面也可以通过单个持久TCP连接发送。通常,HTTP服务器在某个连接闲置一段特定时间后关闭它,而这段时间通常是可以配置的。持久连接分为不带流水线(without pipelining)和带流水线(with pipelining)两个版本。如果是不带流水线的版本,那么客户只在收到前一个请求的响应后才发出新的请求。这种情况下,web页面所引用的每个对象(上例中的10个图像)都经历1个RTT的延迟,用于请求和接收该对象。与非持久连接2个RTT的延迟相比,不带流水线的持久连接已有所改善,不过带流水线的持久连接还能进一步降低响应延迟。不带流水线版本的另一个缺点是,服务器送出一个对象后开始等待下一个请求,而这个新请求却不能马上到达。这段时间服务器资源便闲置了。
HTTP/1.1的默认模式使用带流水线的持久连接。这种情况下,HTTP客户每碰到一个引用就立即发出一个请求,因而HTTP客户可以一个接一个紧挨着发出各个引用对象的请求。服务器收到这些请求后,也可以一个接一个紧挨着发出各个对象。如果所有的请求和响应都是紧挨着发送的,那么所有引用到的对象一共只经历1个RTT的延迟(而不是像不带流水线的版本那样,每个引用到的对象都各有1个RTT的延迟)。另外,带流水线的持久连接中服务器空等请求的时间比较少。与非持久连接相比,持久连接(不论是否带流水线)除降低了1个RTT的响应延迟外,缓启动延迟也比较小。其原因在于既然各个对象使用同一个TCP连接,服务器发出第一个对象后就不必再以一开始的缓慢速率发送后续对象。相反,服务器可以按照第一个对象发送完毕时的速率开始发送下一个对象。
3. 缓存的机制
HTTP/1.1中缓存的目的是为了在很多情况下减少发送请求,同时在许多情况下可以不需要发送完整响应。前者减少了网络回路的数量;HTTP利用一个“过期(expiration)”机制来为此目的。后者减少了网络应用的带宽;HTTP用“验证(validation)”机制来为此目的。
HTTP定义了3种缓存机制:
l Freshness allows a response to be used without re-checking it on the origin server, and can be controlled by both the server and the client. For example, the Expires response header gives a date when the document becomes stale, and the Cache-Control: max-age directive tells the cache how many seconds the response is fresh for.
l Validation can be used to check whether a cached response is still good after it becomes stale. For example, if the response has a Last-Modified header, a cache can make a conditional requestusing the If-Modified-Since header to see if it has changed.
l Invalidation is usually a side effect of another request that passes through the cache. For example, if URL associated with a cached response subsequently gets a POST, PUT or DELETE request, the cached response will be invalidated.
关于web缓存方面的内容可以参考:Caching Tutorial for Web Authors and Webmasters(英文版)(中文版)
4. 响应授权激发机制
这些机制能被用于服务器激发客户端请求并且使客户端授权。
详细的信息请参考:RFC 2617: HTTP Authentication: Basic and Digest Access
5. 基于HTTP的应用
1 HTTP代理
3 HTTPS传输协议原理
对称加密:密钥只有一个,加密解密为同一个密码,且加解密速度快,典型的对称加密算法有DES、AES等
非对称加密:密钥成对出现(且根据公钥无法推知私钥,根据私钥也无法推知公钥),加密解密使用不同密钥(公钥加密需要私钥解密,私钥加密需要公钥解密),相对对称加密速度较慢,典型的非对称加密算法有RSA、DSA等
4 开发web程序时常用的Request Methods
(Head方法)要求响应与相应的GET请求的响应一样,但是没有的响应体(response body)。这用来获得响应头(response header)中的元数据信息(meta-infomation)有(很)帮助,(因为)它不需要传输所有的内容。
(Trace方法告诉服务器端)返回收到的请求。客户端可以(通过此方法)察看在请求过程中中间服务器添加或者改变哪些内容。
6 基于Socket编程编写遵循HTTP的程序
相关推荐
开发者可以利用ADB源码中的OVERVIEW.txt和protocol.txt文件,来了解各模块之间的关系和通信协议的细节。 总结来说,ADB通讯协议是Android开发调试中不可或缺的一环,其架构设计和通讯机制为开发者提供了高效和便捷...
- **通信接口和协议软件**:负责在总线上发送和接收通信对象,与CAN控制器进行交互。 - **对象字典**:是CANopen设备的核心部分,包含了所有数据类型、通信对象和应用对象的信息,提供了应用程序与通信程序之间的...
PHP在处理HTTP协议、Cookies和Session时,可以使用内置的函数,如`setcookie()`创建Cookie,`session_start()`启动Session,`header()`发送自定义HTTP头等。在实际开发中,合理利用这些机制可以提高Web应用的性能和...
RIP协议是一种在网关与主机之间交换路由选择信息的标准,本ppt对其进行了简要介绍
oSIP协议栈是一种开源实现的Session Initiation Protocol (SIP) 实现,广泛应用于视频通话和网络电话的开发。...oSIP文档如《oSIP协议桟浅析.doc》和参考资料如《www.pudn.com.txt》将为深入学习提供宝贵的资料。
### 电子邮件协议浅析 #### 一、电子邮件系统概述 电子邮件作为一种重要的通信工具,自1972年由BBN的Ray Tomlinson发明以来,已经成为全球范围内信息传递的重要方式之一。电子邮件不仅具备传递迅速的特点,还能...
MQTT是基于Publish/Subscribe(发布订阅)模式的物联网[通信协议](https://so.csdn.net/so/search?q=通信协议&spm=1001.2101.3001.7020) 特点: 1. 简单易实现 2. 支持Qos(服务质量) 3. 报文小 MQTT协议构建于TCP/IP...
边界网关协议(BGP)是互联网中用于AS(自治系统)之间交换路由信息的协议。在BGP中,同步规则是一项重要的机制,旨在确保路由的稳定性和可靠性。同步问题的核心在于避免将内部不可达的路由信息传播到外部网络,防止...
MSTP协议分析及应用中,MSTP不仅继承了STP的基本机制,还引入了区域(Region)和实例(Instance)的概念,可以将不同的VLAN映射到不同的生成树实例上,使得网络设计更加灵活,同时加快了网络的收敛速度,提高了网络...
IEEE1588 精密网络同步协议(PTP)-v2.0 协议浅析 IEEE1588 精密网络同步协议(PTP)是以太网技术中的一种同步协议,旨在实现微秒级高精度的时钟同步。在电信级网络中,时间同步要求十分严格,对于一个全国范围的 ...
浅析计算机网络通信协议 计算机网络通信协议是计算机与计算机之间的通信离不开的协议,实际上是一组规定和约定的集合。两台计算机在通信时必须约定好本次通信做什么,是进行文件传输,还是发送电子邮件;怎样通信,...
此课件介绍的是有关ZigBee组网方面的有关资料,给大家介绍了有关ZigBee组网的相关知识。
通过 Netty 实现的 HTTP 服务器,我们可以灵活地扩展和定制 HTTP 功能,比如支持 WebSocket、HTTPS 等。同时,由于 Netty 的高性能特性,这样的服务器在高并发场景下也能保持优秀的表现。 在阅读 Netty 源码时,...
oSIP 协议栈浅析 oSIP 协议栈是当前最流行的 SIP 协议实现之一,它提供了完全的 SIP 协议栈解决方案,包括了从底层的网络协议到高层的应用程序接口的所有组件。oSIP 协议栈的设计理念是-modularization,所有的组件...
在众多VoIP协议标准中,H.323协议和SIP协议是最为广泛使用的技术,它们各自拥有不同的特点和应用场景,共同支撑起全球通信网络的运行。 H.323协议作为国际电联(ITU-T)提出的一项VoIP协议标准,广泛应用于VoIP网络...
### OBEX通信协议浅析 #### 一、引言 随着智能设备的普及和技术的发展,设备之间的信息交换变得越来越重要。OBEX(Object Exchange)协议作为一种简洁、灵活的通信协议,广泛应用于各种智能设备间的通信场景。OBEX...