美文网首页
应用层Application layer: HTTP, sinc

应用层Application layer: HTTP, sinc

作者: Mc杰夫 | 来源:发表于2020-07-23 22:26 被阅读0次

2020.07.23

HyperText Transfer Protocol (HTTP)是Web的应用层协议。它由两个程序实现:一个客户程序和一个服务器程序。在不同的端系统中的程序通过交换HTTP报文进行会话。HTTP定义了这些报文的结构以及客户和服务器进行报文交换的方式,定义了Web客户向Web服务器请求Web页面的方式,服务器向用户传递Web页面的方式。


  • 概念
    • 对象(object):一个文件,可能是HTML文件,JPEG文件,一个Java小程序或video clip
    • Web页面:也叫文档,由对象(object)组成。一个Web页面可以是多个对象的组合,比如由一个HTML(基本)文件,5个JPEG文件组成一个含有6个对象的Web页面
    • URL地址:HTML文件通过页面的URL地址引用页面中的其他对象。每个URL地址含两部分:存放对象的服务器主机名、对象的路径名。例如,URL地址http://www.someweb.com/somepage/picture.gif,其中的www.someweb.com是主机名,/somepage/picture.gif是路径名。
    • Web browser浏览器和Web服务器:浏览器实现了HTTP的客户端,we use Web browser and user interchangeably.服务器实现了HTTP的客户端,用于存储Web对象,每个对象由URL寻址。

  • HTTP对应的运输层协议
    TCP,提供可靠连接,保证信息发送的完整。默认端口80。

  • HTTP运作流程
    1. 运输层建立TCP连接,在客户端和服务器之间;
    2. client向它的socket套接字接口发送HTTP请求报文并从socket接受相应报文。一旦client向socket发送一个request message,该message就脱离了client控制并进入TCP控制;
    3. server从它的socekt接收请求报文,并向socket发送响应报文,期间server不保存客户的任何状态信息,因此称HTTP为无状态协议 (stateless protocol);Web server总是打开的,具有一个固定的IP address。

  • 非持续连接和持续连接(persistent connection)
    • HTTP默认:persistent connection持续连接

    • 非持续连接:每个request/response是单独的TCP连接发送

    • 持续连接:所有request/response经相同的TCP连接发送

    • 非持续连接的流程
      客户向服务器申请一个页面,服务器传送一个Web页面。该页面假设含有1个HTML文件和10个JPEG文件。

      1. HTTP客户端在port 80发起一个向服务器的TCP连接(针对某个对象),该端口号是默认。在客户端和服务器端分别有一个socket与该连接关联。
      2. HTTP客户经socket向服务器发送一个请求报文,其中包含了URL地址。
      3. HTTP服务器通过socket接收报文,从其存储器中检索出URL地址指向的HTML对象,并通过socket向客户发送响应报文。
      4. HTTP服务器进程通知TCP断开该连接,但直到TCP确认客户已经完整收到响应报文才会中断连接。
      5. HTTP客户端接收相应报文,TCP关闭。该报文指出封装对象是HTML文件,从响应中读取该文件,检察该HTML文件,得到对JPEG图像对象的引用。
      6. 对每个引用的JPEG对象重复前面步骤。
        每个TCP在服务器发送一个对象后关闭,在本例中一共11个对象,即1个HTML和10个JPEG对象,故需要11次TCP连接。可通过配置browser实现并行,多数浏览器在默认时可打开5~10个并行的TCP连接。
    • 非持续连接的往返时间 Round-Trip Time (RTT)
      定义为一个短分组(package)从客户到服务器然后再返回客户所花费的时间。
      非持续连接的往返时间分为,一个RTT用于建立TCP连接,一个RTT用于发送请求文件,和传输HTML文件的时间。

    • 非持续连接的缺点

      1. 为每个请求的对象建立和维护一个全新的连接,在C-S两端都要分配TCP的缓冲区和保持TCP变量,给服务器带来严重负担。
      2. 往返时间长,RTT*2+HTML传输时间。
    • 持续连接
      一个TCP,传输多个对象。可设置超时间隔,如果一个TCP连接超过该间隔而仍未被使用,则关闭该TCP连接。HTTP默认采用persistent connection。


(2020.07.24)

  • HTTP 报文格式
    其报文分为request和response报文。
    • request message请求报文
      一个典型的请求报文
GET /some_dir/page.html HTTP/1.1
Host: www.someweb.com
Connection: close
User-agent: Mozilla/5.0
Accetp-language: fr

上面的请求报文中的第一行称为请求行(request line),其他部分称为首部行(header line)。request line有三个字段:方法字段、URL字段和HTTP版本字段。header line中的Host是请求的host name。Connection: close代表了非持续连接,服务器在发送完被请求对象后关闭TCP连接。User-agent代表用户的浏览器,服务器可以根据用户浏览器发送相同对象的不同版本,注意这些版本对应的URL地址相同。

  • 一个请求报文的通用格式
    即在上面的GET报文后,加入实体体(entity body, eb)。使用GET时,eb一般为空;有时会有信息,传递给URL。使用POST方式,则eb包含的是用户在表单字段中的输入值。
  • 请求报文的方法
    GET/POST/HEAD/PUT/DELETE
    • HEAD类似于PUT,服务器收到HEAD请求将会用一个HTTP报文响应,但不返回请求对象。可用于调试跟踪。
    • PUT方法和Web发行工具联合使用,允许用户上传对象到指定的Web服务器上的指令路径。
    • POST方法常用于提交表单。
    • DELETE方法允许用户或程序删除Web服务器上的对象。
  • HTTP响应报文
HTTP/1.1 200 OK
Connection: close
Date: Tue, 18 July 2020 10:00:00 GMT
Server: Apache/2.2.3 (CentOS)
Last-Modified: Wed, 10 Jun 2020 10:00:00 GMT
Content-Length: 9999
Content-Type: text/html
(entity body data)

第一行初始状态行(status line),其他是首部行(header line)。entity body包含了所请求的对象本身。Date和Last-Modified的区别:Date表服务器从文件系统中检索到该对象,将对象插入报文并发送该报文的时间;LM是对象创建或最后修改的日期,该日期对web cache server非常重要。Content-Type: text/HTML表示HTML文本。

  • 响应报文的常用状态码
    • 200 OK: 请求成功,信息在返回报文中。
    • 300 Moved permanently: 请求对象被转移,新的URL在响应报文的Location: 首部行中。客户软件将自动获取新URL。
    • 400 Bad Request: 通用差错代码,指示该请求不能被服务器理解。
    • 404 Not Fond: 请求文档不在服务器上。
    • 505 HTTP Version Not Supported: 服务器不支持请求报文使用的HTTP协议版本。
  • 查看响应报文内容
    使用telnet这个功能
telnet some_web.com 80
GET /some_url/xxx.php HTTP/1.1
Host: some_web.com

在terminal输入上面指令回车就可看到报文。

  • 用户与服务器的交互Cookie
    前面提到HTTP是stateless protocol,服务器不保存用户的动作与信息。通过在报文中添加Cookie,可以实现HTTP与用户的交互,服务器可保留用户一些信息。
    • Cookie位置
      在请求和响应信息的首部行header line
    • Cookie存储
      用户端,保留一个cookie文件,由用户的浏览器管理。服务器端,Web站点的后端数据库。
    • Cookie生成过程
      用户第一次访问某web,网站的响应报文在首部行添加Set-cookie: a_number,用户接收到响应,读到cookie信息,便在本地的cookie文件中添加一行,该行包含服务器的主机名和在Set-cookie的识别码。当用户再次浏览该网站,请求页面都会在首部行加入Cookie: a_number的内容。网站根据cookie信息将用户的行为/信息存入后端数据库。

Reference

  1. 计算机网络(自顶向下方法)原书第7版,James F. Kruose and etc., 陈鸣 译, 机械工业出版社,2019年

相关文章

网友评论

      本文标题:应用层Application layer: HTTP, sinc

      本文链接:https://www.haomeiwen.com/subject/sskklktx.html