zoukankan      html  css  js  c++  java
  • 【面试】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协议的通讯过程。


            在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资源时,浏览器 就可以使用同一个网络连接向下载这些资源,这样就可以大大减轻服务器的压力。图演示了这一过程。


           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)等相关的请求头和响应头。
  • 相关阅读:
    struts2中<s:select>标签的使用
    正则表达式(括号)、[中括号]、{大括号}的区别小结
    解读邮箱正则表达式:^w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*$
    Struts2国际化-getText()方法
    Eclipse的Tomcat热部署,免重启的方法
    hdu 5056Boring count
    纸板上的虚拟现实和代码中的Cardboard
    OC-Protocol实现业务代理
    UVA 11237
    mysql相关日志汇总
  • 原文地址:https://www.cnblogs.com/QoQian/p/5548738.html
Copyright © 2011-2022 走看看