《计算机网络》HTTP协议

《计算机网络》HTTP协议

万维网工作过程

具体过程描述:

(1)鼠标点击链接后,客户端分析链接指向页面的URL

(2)客户端向DNS请求解析www.tsinghua.edu.cn的IP地址

(3)域名系统DNS解析出清华大学服务器的IP地址为166.111.4.100

(4)客户端与服务器建立TCP连接(在服务器端的端口号为80)

(5)客户端发出取文件命令:GET /chn/..

(6) 服务器www.tsinghua.edu.cn给出响应,把文件index.htm发送给客户端

(7)释放TCP连接

(8)浏览器上显示清华大学院系设置文件index.htm中的所有文本

HTTP工作流程

扫描二维码关注公众号,回复: 1634877 查看本文章

一次完整的HTTP请求事务包含以下四个环节:

  • 建立起客户机和服务器连接。

  • 建立连接后,客户机发送一个请求给服务器。

  • 服务器收到请求给予响应信息。

  • 客户端浏览器将返回的内容解析并呈现,断开连接。

HTTP协议结构

请求报文

对于请求报文,主要包含三部分,报文首部,空行(CR+LF),报文主体。如下图所示:

  //GET例子
  GET /56.jpg HTTP/1.1                      //请求行
  Host    www.4399.com                      //主机的域名,完整的请求URI为www.4399.com/56.jpg
  User-Agent    Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)     Chrome/51.0.2704.106 Safari/537.36
  Accept    image/webp,image/*,*/*;q=0.8
  Referer    http://www.imooc.com/
  Accept-Encoding    gzip, deflate, sdch
  Accept-Language    zh-CN,zh;q=0.8        //各种首部字段
                                           //空行(CR+LF)
  • 请求行

    包含用于请求的方法,请求URI和HTTP版本

    结构:method URI version

    • method

      HTTP的请求方法,一共有9种,但GET和POST占了99%以上的使用频次。

      GET方法用来请求访问已被URI识别的资源,指定的资源经服务器端解析后返回相应内容。

      POST通常用于向指定资源提交数据进行处理,提交的数据被包含在请求体中,相对而言比较安全些。

    • URI

      统一资源标识符,用字符串标识某一互联网资源。(附二,介绍URL和URI区别)

    • version

      HTTP协议的版本,该字段有HTTP/1.0和HTTP/1.1两种。

  • 各种首部字段

    在HTTP/1.1中,请求头除了Host都是可选的。包含的头五花八门,这里只介绍部分。

    • Host:指定请求资源的主机(资源主机的域名)和端口号。端口号默认80。

    • Connection:值为keep-alive和close。keep-alive使客户端到服务器的连接持续有效,不需要每次重连,此功能为HTTP/1.1预设功能。close即服务器发送完请求的文档后就可释放连接。

    • Accept:浏览器可接收的MIME类型。假设为text/html表示接收服务器回发的数据类型为text/html,如果服务器无法返回这种类型,返回406错误。

    • Cache-control:缓存控制,Public内容可以被任何缓存所缓存,Private内容只能被缓存到私有缓存,non-cache指所有内容都不会被缓存。

    • Cookie:将存储在本地的Cookie值发送给服务器,实现无状态的HTTP协议的会话跟踪。

    • Content-Length:请求消息正文长度。

    另有User-Agent、Accept-Encoding、Accept-Language、Accept-Charset、Content-Type等请求头这里不一一罗列。由此可见,请求报文是告知服务器请求的内容,而请求头是为了提供服务器一些关于客户机浏览器的基本信息,包括编码、是否缓存等。

  • 空行(一行)

  • 报文主体(多行)

响应报文

响应报文是服务器对请求资源的响应,主要也包含三部分,报文首部,空行(CR+LF),报文主体。如下图所示:


  //响应例子
  HTTP/1.1 200 OK                          //请求行
  Date: Fri, 22 May 2009 06:07:21 GMT 
  Content-Type: text/html; charset=UTF-8   //各种首部字段
                                           //空行(CR+LF)
  <html>                                   //报文主体
        <head></head>
        <body>
              <!--body goes here-->
        </body>
  </html>
  • 请求行(一行)

    结构:version status_code status_message

    • version

      描述所遵循的HTTP版本。

    • status_code

      状态代码有三位数字组成,第一个数字定义了响应的类别,共分五种类别:

      1xx:指示信息--表示接收的请求正在处理

      2xx:成功--表示请求正常处理完毕

      3xx:重定向--要完成请求必须进行更进一步的操作

      4xx:客户端错误--请求有语法错误或请求无法实现

      5xx:服务器端错误--服务器处理请求出错

      状态码,指明对请求处理的状态,常见的如下。

      • 200:成功。

      • 204:请求处理成功,但没有资源可返回(即浏览器显示的页面无变化)

      • 206:表示客户端进行 了范围请求,而服务器成功执行了这部分的GET请求。

      • 301:永久重定向,请求的资源已被分配新的URI。

      • 302:临时重定向,请求的资源已被分配了新的URI,希望用户(本次)能使用新的URI访问。

      • 303:请求对应的资源存在着另一个URI,应使用GET方法定向获取请求的资源。

      • 304:客户端发送附带条件的请求时,资源已找到,但未符合条件请求。304和重定向没有关系。

      • 400:请求不能被服务器理解。

      • 401:发送的请求需要有通过HTTP认证的认证信息。

      • 403:无权访问该资源。

      • 404:不能找到请求的资源。

      • 500:服务器内部错误。

      • 501:服务器不支持请求的方法。

      • 503:服务器暂时处于超负载或正在进行停机维护。

      • 505:服务器不支持请求的版本。

    • status_message

      显示和状态码等价英文描述。

  • 各种首部字段

    这里只罗列部分。

    • Date:表示信息发送的时间。

    • Server:Web服务器用来处理请求的软件信息。

    • Content-Encoding:Web服务器表明了自己用什么压缩方法压缩对象。

    • Content-Length:服务器告知浏览器自己响应的对象长度。

    • Content-Type:告知浏览器响应对象类型。

  • 空行(一行)

  • 报文主体(多行)

    实际有效数据,通常是HTML格式的文件,该文件被浏览器获取到之后解析呈现在浏览器中。

附一:

各种协议与HTTP协议的关系

附二:

URL和URI区别

URI为统一资源标识符,用字符串标识某一互联网资源,而URL为统一资源定位符,表示资源的地点(互联网上所处的位置),URL是URI的子集。

附三:

HTTP1.0 HTTP 1.1主要区别

  1. 长连接

HTTP 1.0需要使用keep-alive参数来告知服务器端要建立一个长连接,而HTTP1.1默认支持长连接。

HTTP是基于TCP/IP协议的,创建一个TCP连接是需要经过三次握手的,有一定的开销,如果每次通讯都要重新建立连接的话,对性能有影响。因此最好能维持一个长连接,可以用个长连接来发多个请求。

  1. 节约带宽

HTTP 1.1支持只发送header信息(不带任何body信息),如果服务器认为客户端有权限请求服务器,则返回100,否则返回401。客户端如果接受到100,才开始把请求body发送到服务器。

这样当服务器返回401的时候,客户端就可以不用发送请求body了,节约了带宽。

另外HTTP还支持传送内容的一部分。这样当客户端已经有一部分的资源后,只需要跟服务器请求另外的部分资源即可。这是支持文件断点续传的基础。

3.HOST域

现在可以web server例如tomat,设置虚拟站点是非常常见的,也即是说,web server上的多个虚拟站点可以共享同一个ip和端口。

HTTP1.0是没有host域的,HTTP1.1才支持这个参数。

附四:

HTTP1.1 HTTP 2.0主要区别

1.多路复用

HTTP2.0使用了多路复用的技术,做到同一个连接并发处理多个请求,而且并发请求的数量比HTTP1.1大了好几个数量级。

当然HTTP1.1也可以多建立几个TCP连接,来支持处理更多并发的请求,但是创建TCP连接本身也是有开销的。

TCP连接有一个预热和保护的过程,先检查数据是否传送成功,一旦成功过,则慢慢加大传输速度。因此对应瞬时并发的连接,服务器的响应就会变慢。所以最好能使用一个建立好的连接,并且这个连接可以支持瞬时并发的请求。

  1. 数据压缩

HTTP1.1不支持header数据的压缩,HTTP2.0使用HPACK算法对header的数据进行压缩,这样数据体积小了,在网络上传输就会更快。

  1. 服务器推送

意思是说,当我们对支持HTTP2.0的web server请求数据的时候,服务器会顺便把一些客户端需要的资源一起推送到客户端,免得客户端再次创建连接发送请求到服务器端获取。这种方式非常合适加载静态资源。

服务器端推送的这些资源其实存在客户端的某处地方,客户端直接从本地加载这些资源就可以了,不用走网络,速度自然是快很多的。

附五:

GET和POST区别

  1. GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连,如EditPosts.aspx?name=test1&id=123456. POST方法是把提交的数据放在HTTP包的Body中.

  2. GET提交的数据大小有限制(因为浏览器对URL的长度有限制),而POST方法提交的数据没有限制.

  3. GET方式需要使用Request.QueryString来取得变量的值,而POST方式通过Request.Form来获取变量的值。

  4. GET方式提交数据,会带来安全问题,比如一个登录页面,通过GET方式提交数据时,用户名和密码将出现在URL上,如果页面可以被缓存或者其他人可以访问这台机器,就可以从历史记录获得该用户的账号和密码.

猜你喜欢

转载自blog.csdn.net/zhangxiafll/article/details/80680744