HTTP协议

Http协议的特点
  • 无连接:HTTP协议本身是无连接的。无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。
  • 无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。同一个客户第二次访问同一个服务器上的页面时,服务器的响应与第一次被访问时的相同。
  • 面向文本:由于HTTP协议是面向文本的,故在报文中的每一个字段都是一些ASCII码,因而各个字段的长度都是不确定的。     

Http的报文结构
        Http有两类报文:
  • 请求报文:从客户向服务器发送请求报文。如下图左。
  • 响应报文:从服务器到客户的回答。如下图右。
        
        HTTP请求报文和响应报文都是由3部分组成:
  • 开始行:用于区分是请求报文还是响应报文。在请求报文中的开始行叫做请求行,而在响应报文中的开始行叫做状态行。在开始行的三个字段之间都以空格分隔开。
  • 首部行:用来说明浏览器、服务器或报文主体的一些信息。首部可以有好几行,但也可以不使用。在每一个首部行中都有首部字段名和它的值,每一行在结束的地方都要有"回车"和"换行"。整个首部行结束时,还有一空行将首部行和后面的实体主体分开。
  • 实体主体:在请求报文中一般都不用这个字段,而在响应报文中也可能没有这个字段。
        通过比较 可以看出,这两种报文格式的区别就是开始行不同。

HTTP请求报文
        请求报文的请求行有3个内容:
  • 方法:这里的方法指的是对所请求的对象进行的操作,因此,请求报文的类型是由它所采用的方法决定的。下图给出了请求报文中常用的几种方法:
方法(操作)
意义
OPTION
请求一些选项的信息
GET
请求读取由URL所标志的信息
HEAD
请求读取由URL所标志的信息的首部
POST
给服务器添加信息
PUT
在指明的URL下存储一个文档
DELETE
删除指明的URL所标志的资源
TRACE
用来进行环回测试的请求报文
CONNECT
用于代理服务器
  • 请求资源的URL
  • HTTP的版本
        
HTTP响应报文
        每一个请求报文发出后,都能收到一个响应报文。响应报文的第一行就是状态行。状态行包括3个内容:
  • HTTP的版本
  • 状态码:状态码都是3位数字的,分为5大类共33种,例如:
1XX
表示通知信息 如请求到了或正在进行处理
2XX
表示成功
如接受或知道了
3XX
表示重定向
如要完成请求还必须采取进一步行动
4XX
表示客户的差错
如请求中有错误的语法或不能完成
5XX
表示服务器出错
如服务器失效无法完成请求
  • 解释状态码的简单短语

HTTP请求过程
        用户在点击鼠标链接某个万维网文档时,HTTP协议首先要和服务器建立TCP连接,这需要使用三次握手。当三次握手的前两部分完成后(即经过一个RTT时间后)。万维网客户就把HTTP请求报文作为三次握手的第三个报文的数据发送给万维网服务器。服务器收到HTTP请求报文后,就把所请求的文档作为响应报文返回给客户。过程如下图所示:
        
        上图可看出,请求一个万维网文档所需的时间是该文档的传输时间加上两倍往返时间RTT(一个RTT用于连接TCP连接,另一个RTT用于请求和接收万维网文档)。

HTTP1.0&HTTP1.1
        HTTP1.0的主要缺点,就是每请求一个文档就要有两倍RTT的开销。若一个主页上有很多链接的对象需要依次进行链接,那么每一次链接下载都导致2 X RTT的开销。另一种开销是万维网客户和服务器为每一次建立的TCP连接都要分配缓存和变量。特别是万维网服务器往往要同时服务于大量客户的请求,所以这种非持续链接会使万维网服务器负担很重。
        HTTP1.1协议较好地解决了这个问题,它使用了持续连接。所谓持续连接就是万维网服务器在发送响应后仍然在一段时间内保持这条连接,使同一个客户和该服务器可以继续在这条连接上传送后续的HTTP请求报文和响应报文。
        HTTP1.1协议的持续连接有两种工作方式:
  • 非流水线方式:
    • 特点:客户在收到前一个响应后才能发出下一个请求。因此,在TCP连接已建立后,客户每访问一次对象都要用去一个往返时间RTT。
    • 缺点:服务器在发送完一个对象后,其TCP连接就处于空闲状态,浪费了服务器资源。
  • 流水线方式:
    • 特点:客户在收到HTTP的响应报文之前就能够接着发送新的请求报文。于是一个接一个的请求报文到达服务器后,服务器就可连续发送响应报文。因此,使用流水线方式时,客户访问所有对象只需花费一个RTT时间。这种方式使TCP连接中的空闲时间减少,提高了下载文档的效率。

代理服务器
        代理服务器是一种网络实体,它又称为万维网高速缓存。代理服务器把最近的一些请求和响应暂存在本地磁盘中。当新请求到达时,若代理服务器发现这个请求与暂时存放的请求相同,就返回暂存的响应,而不需要按URL的地址再去因特网访问该资源。
        代理服务器可在客户端或服务端工作,也可在中间系统上工作。        

Cookie
        HTTP是无状态的,这样做虽然简化了服务器的设计,但在实际工作中,一些万维网站点通常希望能够识别用户。要做到这点,可以在HTTP中使用Cookie。RFC 2109中队Cookie进行了定义,规定万维网站点可以使用Cookie来跟踪用户。
        Cookie是这样工作的,当用户访问某个使用Cookie的网站时,该网站的服务器就为张三产生一个唯一的识别码,并以此作为索引在服务器的后端数据库中产生一个项目。接着在给用户的HTTP响应报文中添加一个叫做Set-cookie的首部行。格式如"Set-cookie:123456",后面的"值"就是赋予该用户的"识别码"。当用户收到这个响应时,浏览器就在它管理的特定Cookie文件中添加一行,其中包括这个服务器的主机名和Set-cookie后面给出的识别码。当用户继续浏览这个网站时,每发送一个HTTP请求,其浏览器就会从其Cookie文件中取出这个网站的识别码,并放到HTTP请求报文 的Cookie首部行中。于是,这个网站就能够跟踪用户在该网站的活动。







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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值