应用层之HTTP 协议(计算机网络笔记-可用于复习,备考)

Web 应用和 HTTP 协议

    

一、HTTP 概况

    HTTP 协议由两部分程序实现:一个客户机程序和一个服务器程序,它们运行在不同的端系统中,通过交换 HTTP 消息进行会话。HTTP 定义了浏览器和 Web 服务器之间的消息格式以及客户机和服务器是如何进行消息交换的。

    HTML 是超文本标记语言,定义了网页的表现形式,例如字体、排版等。
 
    Web 页面是由对象组成的。对象(object )简单来说就是文件,如 HTML 文件、JPEG 图形文件、Java 小程序或视频片段文件,这些文件可通过一个 URL 地址寻址。多数 Web 页面含有一个基本 HTML 文件以及几个引用对象(你看到的 web 页是浏览器根据 HTML 语法,将多个对象文件渲染而成的)。

    例如,如果一个 Web 页面包含 HTML 文本和 5 个 JPEG 图形文件,那么这个 Web 页面有 6 个对象:一个基本 HTML 文件加 5 个图片。在基本 HTML 文件中通过对象的 URL 地址对对象进行引用。在服务器磁盘中,这个 HTML 文件和图片是分开存放的。浏览器获得这些对象后,进行渲染,把它们组合在一起呈现给用户。

URL 地址由两部分组成:存放对象的服务器主机名和对象的路径名。

例如,URL 地址

http://www.qq.com:80/news/index.html
协议:// 主机:端口(80)/ 文件名及其路径
http://www.someschool.edu.cn/images/Department.gif
 www.someschool.edu.cn 就是主机名
 images/Department.gif 是路径名。

    当用户请求一个 Web 页面时,浏览器向服务器发出对该页面中所有包含对象的 HTTP请求消息,服务器接受请求并生成包含这些对象的 HTTP 响应消息进行响应。
    HTTP 使用 TCP 而不是 UDP 作为它的传输层协议。浏览器发起一个与服务器的 TCP 连接,一旦连接建立,浏览器和服务器进程就可以通过套接字接口(就是发送/接收函数调用)访问TCP。

    

二、非持久连接、持久连接和无状态

    如果浏览器使用一个 TCP 连接向服务器请求一个 Web 页面对象,也就是说请求一个对象后这个连接就关闭了,就称为 HTTP 的非持久连接
    如果浏览器使用一个 TCP 连接向服务器请求多个 Web 页面对象,那么称为持久连接。 例如上面那个 Web 页面有 6 个对象,使用非持久连接,将打开 6 个 TCP 连接取回所有对象。若使用持久连接,理论上只需要一次 TCP 连接。

    现在的浏览器通常使用持久连接,即使选择了 HTTP1.0。

    浏览器通常使用并行的 TCP 连接来加快 Web 页面的获取。
    例如 Firefox 浏览器,在其配置页面 about:config 中就可以方便地设置访问单个 Web 服务器的最大 TCP 连接数目。如果将最大并行连接数设置为 1,这样在非持久连接中 TCP 连接就会以串行方式建立。

    往返时间(Round-Trip Time,RTT)的定义,即一个分组从客户机到服务器再回到客户机所花费的时间。RTT 包括分组传播时延、分组在中间路由器和交换机上的排队时延以及分组处理时延。

    HTTP 是无状态的。服务器向客户机发送被请求的文件时,并不存储任何关于该客户机的状态信息。假如一个特定的用户在几秒钟内多次请求同一个对象,服务器并不会因为刚刚为该用户提供了该对象就不再做出反应,而是重新发送该对象。但服务器一般会在日志文件中记录用户的访问历史。

三、HTTP 消息格式

    
HTTP 消息有两种:请求消息响应消息
•HTTP 请求消息

下面是一个典型的 HTTP 请求消息:

GET /somedir/Page.html HTTP 1 .1
Host: www.someschool.edu.cn
Connection: Keep Alive
User-agent: Moailla/2.0
Accept-language: fr

Entity body

    HTTP 消息头部是用普通的 ASCII 文本书写的。
    HTTP 请求消息的第一行叫做请求行(request line),其后继的行叫做头部行(header line )
请求行有 3 个字段:方法字段、URL 字段和 HTTP 协议版本字段

字段
方法字段 GET、POST、HEAD、PUT 和 DELETE
Host: www.someschool.edu.cn 定义了目标所在的主机
Connection: Keep Alive 浏览器告诉服务器希望使用持久连接
User-agen 定义用户发送请求的浏览器的类型
Accept-language: fr 表示用户想获的该对象的语言版本

    方法字段可以取值 GET、POST、HEAD、PUT 和 DELETE。
当浏览器请求一个对象时,使用 GET 方法,在 URL 字段填写该对象的 URL。
方法(Method)是对所请求对象所进行的操作,也就是一些命令。请求报文中的操作有:

方法(操作) 含义
GET 请求读取一个Web页面
HEAD 请求读取一个Web页面的首部
POST 附加一个命名资源(如Web页面)
PUT 请求存储一个Web页面
DELETE 删除Web页面
TRACE 用于测试,要求服务器送回收到的请求
CONNECT 用于代理服务器
OPTION 查询特定选项

    例如,用户在使用 POST 方法向搜索引擎提供搜索关键词,关键词就出现在 Entity body 部分。也可以使用 GET 方法向服务器提交表单,这时输入数据(表单字段值)会在请求行的 URL字段进行发送。
    例如,一个表单使用 GET 方法,它有一个字段,分别填写的是 test,那么得到的 URL 可能就是www.somesite.com/search?test。

    
•HTTP 响应消息

HTTP 1.1 200 OK

Connection: Keep Alive
Date: Tue,09 Aug 2017 23:23:02 GMT
Server: Apache/3 .0(unix)
Last-Modified: Sun,6May 2017 12:13:24 GMT
Content-Length: 6821
Con}tent-Tyge: text/html
 (data …)

响应消息分成三个部分:初始状态行、首部行,然后是实体。

状态行有 3 个字段:协议版本、状态码和相应状态信息
Date
:首部行指示服务器产生并发送该响应消息的日期和时间。
Last-Modified:首部行指示了对象创建或者最后修改的日期和时间。它对可能在客户机也可能在网络缓存服务器上的对象缓存来说非常重要。
实体部分包含了所请求的对象。
常见的状态码

状态码 说明
200 响应成功
302 跳转,跳转地址通过响应头中的 Location 属性指定
400 客户端请求有语法错误,不能被服务器识别
403 服务器接收到请求,但是拒绝提供服务(例如认证失败)
404 请求资源不存在
500 服务器内部错误

    
    首部行的使用是由浏览器和 Web 服务器根据 HTTP 协议和用户设置决定的。部分浏览器甚至有插件可以修改 HTTP 消息头部,例如 Chrome 浏览器。
 

四、用户与服务器的交互:cookie

HTTP 使用 cookie 技术使 Web 站点能够跟踪用户。
cookie 技术有 4 个组成部分:
①在 HTTP 响应消息中有一个 set-cookie 首部行;
②在 HTTP 请求消息中有一个 cookie 首部行;
③在用户端系统中保留有一个 cookie 文件,由用户的浏览器管理;
④在 Web 站点有一个后端数据库。

    

五、Web 缓存

    Web 缓存(web cache)也叫代理服务器(proxy server),可以配置用户的浏览器,使得用户的所有 HTTP 请求首先指向 Web 缓存。
     如果设置浏览器每次访问一个 Web 网站时都通过缓存服务器。
    浏览器会首先建立一个到 Web 缓存服务器的 TCP 连接,并向 Web 缓存服务器发送一个HTTP 请求。
    Web 缓存服务器检查本地是否存储了该对象拷贝。
    如果有,Web 缓存服务器就用 HTTP 响应消息向客户机浏览器返回该对象。
     如果 web 缓存服务器没有该对象,它就与该对象的原始服务器建立 TCP 连接,请求该对象。
    当 web 缓存服务器接收该对象时,它在本地存储一份拷贝,并用 HTTP 响应消息向客户机的浏览器发送该拷贝。
    
    在因特网上部署 Web 缓存服务器有两个原因。首先,可以加快对客户机请求的响应时间。其次,Web 缓存可以大大减少一个单位内部网与因特网接入链路上的通信量

    

六、访问qq实例

在用户点击URL为http://www.qq.com/index.html的链接后,浏览器和Web服务器执行以下动作:

  1. 浏览器分析超链接中的URL
  2. 浏览器向DNS请求解析 www.qq.com 的IP地址
  3. DNS将解析出的IP地址 222.246.129.80 返回浏览器 HTTP over TCP
  4. 浏览器与服务器建立TCP连接(80端口)
  5. 浏览器请求文档:GET /index.html
  6. 服务器给出响应,将文档 index.html发送给浏览器
  7. 释放TCP连接
  8. 浏览器显示index.html中的内容

猜你喜欢

转载自blog.csdn.net/weixin_43522969/article/details/106126500