初识HTTP

初识HTTP

以下为我当前阶段所学的HTTP知识的小结,以下对HTTP相关内容的叙述可能并不全面和准确

参考谢希仁的《计算机网络》第七版的6.4.3

HTTP的基本特征

HTTP是一个无状态的本身无连接的面向文本的协议

“无状态的”是指一个用户访问HTTP服务器时,服务器的响应和用户第一次访问时得到的响应是一样的。这样的无状态特性简化了服务器的设计,使得服务器可以支持大量并发的HTTP请求

“本身无连接”是指HTTP在正式交换HTTP报文前是不需要先建立连接的。HTTP协议使用的运输层协议是面向连接的TCP协议,当客户浏览器要向HTTP服务器发送请求时,需要先和服务器建立起TCP连接,当“三次握手”的前两次完成后,HTTP请求报文就作为“第三次握手”报文的数据发送到HTTP服务器中,接着HTTP服务器就把请求的万维网文档作为响应报文返回给客户

“面向文本的”是指HTTP的报文中的每一个字段都是一些ASCII码串(每个字段的长度都是不确定的)

HTTP报文的结构

HTTP报文分为请求报文响应报文,它们都由三部分组成:开始行、首部行、实体主体,它们唯一的结构差异在于开始行

开始行:用于区分是请求报文还是响应报文。开始行分三个字段,以空格分隔,以回车结尾

  • 请求报文的开始行叫做请求行,它的三个字段分别是方法、URL、HTTP版本
    方法就是指对所请求对象的操作,这些方法实际是一些命令,常见的如GET、POST、OPTION、PUT、HEAD等
    URL就是要请求的页面的地址
    HTTP版本字段就是用于指明使用的HTTP版本

  • 响应报文的开始行叫做状态行,它的三个字段分别是HTTP版本、状态码、短语
    HTTP版本字段就是用于指明使用的HTTP版本
    状态码是用于表示本次响应的状态,状态码有五类

    • 1xx,表示通知信息
    • 2xx,表示成功
    • 3xx,表示重定向
    • 4xx,表示客户的差错
    • 5xx,表示服务器的差错

    短语是用于解释状态码的简单短语,如 404 的 Not Found,202 的 Accepted等

首部行:用来说明服务器、浏览器或报文主体的一些信息。首部可以有好几行,也可以不使用。每个首部行由首部字段名和值组成,以回车结尾(后续还有一个回车来把首部行和实体主体分开)

实体主体:在请求报文中一般都不使用这个字段,在响应报文中也可能没有这个字段(所以有什么迪奥用吗???

HTTP请求报文

HTTP响应报文结构

HTTP数据传输的连接问题

上文说到HTTP本身是无连接的,使用的运输层协议是面向连接的TCP协议,在浏览器请求一个万维网文档时会首先通过TCP和HTTP服务器建立连接,并在“第三次握手”时将HTTP请求报文作为报文数据部分发送到服务器
这样的一次请求要花费的时间为“两倍的RTT时间 + 页面文档传输完成所需时间”

当有多个HTTP请求向HTTP服务器请求页面时,都要和服务器反复的建立和断开连接,这就需要服务器反复地分配和释放缓存和变量,这会增大服务器的负担。将这种每请求一次页面就需要建立一次连接的情况称为非持续连接,这是早期比较多使用的HTTP1.0的做法
这种非持续连接的做法也导致了每次访问页面对象的时间花销都为2倍的RTT

后续出现的HTTP1.1采用了持续连接,也就是当浏览器和服务器建立了一个TCP连接后,在一段时间内不会断开连接,当浏览器需要访问多个存在于同一个服务器的页面,就可以通过同一条连接访问

而持续连接在工作时又分为非流水线方式流水线方式
非流水线方式是指当浏览器发送了一个HTTP请求后,必须要等到浏览器收到响应之后才能发送下一个请求,这就导致了在等待响应的过程中TCP连接处于空闲状态,这样就浪费了服务器资源。但相比非持续连接,这样的工作方式在访问页面对象时节省了一个RTT时间
流式线方式是指浏览器收到响应之前就可以接着发送新的请求,这就使得请求可以一个接着一个的发送到服务器,而服务器可以连续地返回响应报文,这就减少了TCP连接空闲的时间,提高了下载文档的效率。如果浏览器要访问完服务器的所有对象,只需要一个RTT时间

请求一个万维网文档所需时间

文中图片来源:https://my.oschina.net/u/4394125/blog/3310477

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值