HTTP RFC

HTTP RFC

http rfc 是什么及工作流程添加链接描述
HTTP协议描述的是发送方与接收方的通信协议,通过两方的自觉遵守而存在,HTTP是运行于应用层的协议,基于TCP协议而运作。基本上是客户/服务器对答模式,其中也包括在传输过程中的代理,网关,通道,缓存等都需要遵守这份协议。HTTP所表达的控制以及描述性相关的信息都包含在了HTTP的起始行和首部之中,HTTP被设计成为一种非常容易扩展的协议,因此协议时松散的。头域可以加入需要的头部名和指定的值,尽管有的头部没有加入RFC标准,但是可能成为约定成俗的标准。rfc基本是字段与头部格式的定义,较难理解的部分可能数连接机制与缓存机制。HTTP/1.1支持两种连接机制,一种是非持久连接,第二种是持久连接。基本上默认是使用持久连接,因为这样能够减少建立连接时候的网络延时与CPU消耗。其中服务器与客户端都会假定连接没有关闭,除非对方传来的头文件包含" Connection:close",不然连接将继续保持。客户端,服务器与代理都可以随时结束连接,而他们也应该有一套机制去重新搭建起连接,并保持正确性。每个客户端也只能与一个服务器保持两条连接。代理也只能保持2N条连接,N 为代理的活跃用户数。对于连接的时候,由用户向服务器端发送一个带有"Expect"的信息到服务器端,服务器端如果连接正常则返回一个100 ( continue )的信息到客户端,提示客户端可以继续发送,HTTP对于传输道路上的元素也有一定的要求。也规定了不透明代理可以改变哪些字段,而不能改变哪些字段;HTTP中使用缓存主要有两个作用,一个是在很多情况下可以减少发送包,减少网络IO,使用“过期”机制来处理;第二个是可以减少发送整包的操作,减少带宽需求,使用“验证”机制来处理。“过期”机制(Expiration Model):用于服务器端制定一个“过期时间”,主要有两种计算方式,按优先级顺序,第一种是年龄(Age),第二种是过期时间(Expiration)。对于第一种,服务器会提供一个年龄字段(Age)与一个有效年龄(max-age),而年龄的计算,则是采用服务器生成时的初始年龄再加上从服务器生成至缓存的时间。如果有Age 这个字段的存在,则说明这个消息不是第一手的,中间有缓存的存在。验证机制(Validation Model ) :采用这种机制的时候,缓存先向服务器验证当前的缓存条目是否最新的,则收到304的提示表示 Not Modified,条目是最新的。否则则会收到服务器返回的新缓存条目。而进行验证的时候,可以使用两个标准,一个是使用服务器在原条目上的"Last-Modified",使用条件GET(If-Modified-Since OR If-Not-Modified-Since)去查询。第二个是使用服务器为每个条目生成的"Entity Tag",这个Tag如何生成完成由服务器去决定,因此也衍生出两种验证策略,一种是强验证,即如果一个条目发生了改变之后"Entity Tag"也马上变化的,第二种是使用弱验证,即条目变化了"Entity Tag"仍然保持不变,相对验证条件更弱。而对于是使用强验证还是弱验证则是取决于服务器端了。
工作流程:
如用客户端浏览器请求这个页面:http://localhost.com:8080/index.htm 从中分解出协议名、主机名、端口、对象路径等部分,对于我们的这个地址,解析得到的结果如下: 协议名:http 主机名:localhost.com 端口:8080 对象路径:/index.htm 在这一步,需要域名系统DNS解析域名localhost.com,得主机的IP地址。
把以上部分结合本机自己的信息,封装成一个HTTP请求数据包
在HTTP工作开始之前,客户机(Web浏览器)首先要通过网络与服务器建立连接,该连接是通过TCP来完成的,该协议与IP协议共同构建Internet,即著名的TCP/IP协议族,因此Internet又被称作是TCP/IP网络。HTTP是比TCP更高层次的应用层协议,根据规则,只有低层协议建立之后才能,才能进行更层协议的连接,因此,首先要建立TCP连接,一般TCP连接的端口号是80。这里是8080端口
建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可内容。
服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。
实体消息是服务器向浏览器发送头信息后,它会发送一个空白行来表示头信息的发送到此为结束,接着,它就以Content-Type应答头信息所描述的格式发送用户所请求的实际数据
一般情况下,一旦Web服务器向浏览器发送了请求数据,它就要关闭TCP连接,然后如果浏览器或者服务器在其头信息加入了这行代码Connection:keep-alive。TCP连接在发送后将仍然保持打开状态,于是,浏览器可以继续通过相同的连接发送请求。保持连接节省了为每个请求建立新连接所需的时间,还节约了网络带宽。
HTTP1.0 使用的是非持久连接,主要缺点是客户端必须为每一个待请求的对象建立并维护一个新的连接,即每请求一个文档就要有两倍RTT 的开销。因为同一个页面可能存在多个对象,所以非持久连接可能使一个页面的下载变得十分缓慢,而且这种短连接增加了网络传输的负担。HTTP1.1 使用持久连接keepalive,所谓持久连接,就是服务器在发送响应后仍然在一段时间内保持这条连接,允许在同一个连接中存在多次数据请求和响应,即在持久连接情况下,服务器在发送完响应后并不关闭TCP 连接,而客户端可以通过这个连接继续请求其他对象。
HTTP/1.0 每次请求都需要建立新的TCP连接,连接不能复用。HTTP/1.1 新的请求可以在上次请求建立的TCP连接之上发送,连接可以复用。优点是减少重复进行TCP三次握手的开销,提高效率。
第一次握手:Client将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。
第二次握手:Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,ack=J+1,随机产生一个值seq=K,并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。
第三次握手:Client收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给Server,Server检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了。
TCP三次握手.png
TCP三次握手.png
四次挥手(Four-Way Wavehand)即终止TCP连接,就是指断开一个TCP连接时,需要客户端和服务端总共发送4个包以确认连接的断开。在socket编程中,这一过程由客户端或服务端任一方执行close来触发,整个流程如下图所示:
TCP的四次挥手.png
TCP的四次挥手.png
由于TCP连接时全双工的,因此,每个方向都必须要单独进行关闭,这一原则是当一方完成数据发送任务后,发送一个FIN来终止这一方向的连接,收到一个FIN只是意味着这一方向上没有数据流动了,即不会再收到数据了,但是在这个TCP连接上仍然能够发送数据,直到这一方向也发送了FIN。首先进行关闭的一方将执行主动关闭,而另一方则执行被动关闭,上图描述的即是如此。 第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。
第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态。
第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。
第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手。
这是因为服务端在LISTEN状态下,收到建立连接请求的SYN报文后,把ACK和SYN放在一个报文里发送给客户端。而关闭连接时,当收到对方的FIN报文时,仅仅表示对方不再发送数据了但是还能接收数据,己方也未必全部数据都发送给对方了,所以己方可以立即close,也可以发送一些数据给对方后,再发送FIN报文给对方来表示同意现在关闭连接,因此,己方ACK和FIN一般都会分开发送

参考链接

### 回答1: HTTP(超文本传输协议)是一种用于在计算机网络之间传输超文本(如HTML)的协议。RFC2616是HTTP协议的规范之一。以下是对RFC2616的回答: RFC2616是HTTP协议的早期版本,于1999年公布。这个规范定义了HTTP的工作原理、请求和响应消息的格式、协议交互机制、状态码以及其他相关内容。 RFC2616规范中详细介绍了HTTP的各个方面,包括请求行、请求部、请求方法、状态行、响应部、状态码等。 在请求方面,RFC2616规范定义了HTTP的几种请求方法,如GET、POST、HEAD、PUT、DELETE等。它也规定了每个请求方法的语义和用法。 在响应方面,RFC2616规范定义了HTTP的状态码,用于表示服务器对请求的响应状态。状态码包括了一系列的数字和文本,如200 OK表示请求成功、404 Not Found表示未找到资源。 除此之外,RFC2616还包括了HTTP的持久连接、身份认证、缓存机制等额外特性和注意事项,以提供更高效和安全的网络传输。 尽管RFC2616已经被更新的HTTP协议版本,如RFC7230,取代,但它仍然是了解HTTP协议的重要参考资料之一,特别是对于需要兼容旧版本协议的系统。 总之,通过RFC2616规范,我们可以了解HTTP协议的基本概念、工作原理和通信机制,这为构建和理解互联网上的Web应用程序提供了基础。 ### 回答2: RFC 2616是HTTP协议的标准文件,全称为《超文本传输协议 - HTTP/1.1》。该文档由互联网工程任务组(IETF)制定,于1999年发布,已经过多次修订。 RFC 2616详细描述了HTTP协议的各个方面,包括消息的格式、状态码、请求方法、部字段等等。这个标准文件的发布对互联网的发展起到了至关重要的作用。 首先,RFC 2616规定了HTTP消息格式。每个HTTP请求和响应都由三个部分组成,分别是起始行、部字段和消息主体。起始行包含请求或响应的方法或状态码,部字段则可以包含一些元数据信息,消息主体是实际的数据内容。 其次,该标准定义了一系列HTTP的状态码,如200表示请求成功,404表示资源未找到等等,这些状态码使得服务器可以告知客户端请求的结果。 此外,RFC 2616还规定了一些常用的请求方法,例如GET用于获取资源,POST用于提交数据,HEAD用于获取资源的元数据等等。这些方法使得客户端和服务器之间可以进行各种不同类型的交互操作。 最后,部字段是RFC 2616中的另一个重要概念。HTTP部字段可以包含各种元数据信息,如请求或响应的内容类型、长度、时间等等。这些信息对于请求的处理和响应的解析至关重要。 总的来说,RFC 2616作为HTTP协议的标准文件,详细定义了HTTP的各个方面,为互联网上的信息传输提供了基础规范。它的发布为HTTP的统一标准化奠定了基础,使得不同的服务器和客户端可以进行互通,推动了互联网的发展。 ### 回答3: HTTP(Hypertext Transfer Protocol)是一种用于在互联网上进行数据传输的协议。RFC 2616是HTTP协议的早期版本的定义,它详细描述了HTTP协议的规范和行为。 RFC 2616主要包含了HTTP的请求和响应的格式、方法、部字段、状态码等方面的规范。其中,HTTP请求包括请求行、请求部、实体主体三个部分。请求行包含了请求方法(GET、POST等)、请求URL和HTTP协议版本。请求部包含了对请求的补充信息,如Cookie、User-Agent等。实体主体是可选的,用于传输请求的数据。 另外,RFC 2616还定义了HTTP响应的格式。响应包括状态行、响应部、实体主体三个部分。状态行包含了状态码、原因短语和HTTP协议版本。响应部包含了对响应的补充信息,如Content-Type、Content-Length等。实体主体用于传输响应的数据。 RFC 2616还规定了HTTP常用的方法,如GET、POST、PUT、DELETE等。GET用于请求获取指定资源,POST用于向服务器提交数据。PUT用于上传资源,DELETE用于删除资源等。这些方法为HTTP的应用提供了丰富的操作集。 此外,RFC 2616中还定义了许多HTTP部字段,如Cache-Control、Content-Type、Content-Length等,这些字段用于控制缓存、表示数据类型和长度等方面,对于客户端和服务器之间的通信非常重要。 总之,RFC 2616对HTTP协议进行了详细的规范,从请求和响应格式到方法和部字段等各个方面都有详尽的说明。它为互联网上的数据传输提供了可靠的基础,对于Web开发和网络通信非常重要。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值