type
status
date
slug
summary
tags
category
icon
password

术语

  • Web页:由一些对象组成
    • 对象包括:HTML文件、JPEG图像、JAVA小程序
  • URL:通过URL对每一个对象进行引用
    • 访问协议、用户名、口令字、端口等
      格式:协议名/用户名:口令/主机名/路径名/端口
  • 端口号
    • 如果不特殊指出,一般采用默认端口号

HTTP

概况

超文本传输协议
  • web的应用层协议
  • 客户/服务器模式
    • 客户端:是一个请求、接收和显示Web对象的浏览器
    • 服务端:对请求进行响应,发送对象的Web服务器
  • 使用TCP
    • 客户端发起一个与服务器的TCP连接,建立socket指向该会话关系,端口号为80
    • 服务器接受用户的TCP连接
    • 在浏览器与Web服务器之间交换HTTP报文(应用层协议报文)
    • TCP连接关闭
  • 服务器无状态
    • 服务器不需要维护客户端状态,不需要知道与客户端的历史信息
      无状态服务器能够支持更多的客户端

HTTP连接

  • 非持久HTTP
    • 最多只有一个对象在TCP连接上发送
    • 下载多个对象需要多个TCP连接
    • 客户端
      • –>连接建立请求(客户端在端口号80发起一个到服务器www.???的连接)
        –>连接建立确认(位于主机www.???的http服务器在80号端口等待连接,接受并通知客户端)
        –>http请求(客户端向tcp连接的socket发送请求报文,报文表示客户端需要对象)
        –>http响应(服务器收到报文,将对象封装在一个响应报文里,并通过socket向客户端发送)
        –>对象传输
        –>HTTP关闭TCP连接(非持久)
        http请求总时间:一次往返round-trip-time(连接请求和确认)+一次往返(请求+等待响应)+对象传输的时间
        eg.传输10个jpeg:每一个jpeg进行一次请求和响应,对这10个对象都重复一次上述步骤
  • 持久HTTP
    • 多个对象可以在一个在客户端和服务器之间的TCP连接上传输
    • 非流水线
      • 每一次请求和返回的对象只有一个
        连接请求–>连接确认–>http请求–>http响应–>在前一个对象返回之后请求下一个对象–>…
    • 流水线
      • 已经获取10个对象的url,第一个请求发出但对象还没返回时,就发出第二个请求,再依次接受,节省时间
        连接请求–>连接确认–>http请求–>…

HTTP请求报文

  • ascii
    • 人能阅读
      头部行
      GET /…/…
  • 基本格式
    • 首部行 Host: www.??? 主机名 User-agent: Mozilla/4.0 用户代理程序,浏览器版本 Connection: close 连接关闭 Accept-language: fr 一个额外的换行回车符

HTTP响应报文

  • 基本格式
    • 状态行
      HTTP/1.1 200 OK\r\n
      首部行
      connection close Date: … Server …
      数据:如请求的HTML文件
      data data data…
  • 响应状态码
    • 200 404…

用户-服务器状态:cookies

服务器有状态的例子:网页智能推荐,购物车等,服务器端需要维护用户状态
解决方法:cookies
中心:服务器维护客户端状态
服务器有状态的例子:网页智能推荐,购物车等,服务器端需要维护用户状态 解决方法:cookies 中心:服务器维护客户端状态
四个组成部分:
  • 在HTTP响应报文中有一个cookie的首部行
  • 在HTTP请求报文中含一个cookie的首部行
  • 在用户端系统中保留有一个cookie文件,由用户的浏览器管理
  • 在Web站点后有一个后端数据库
当最初的HTTP请求到达服务器时,该Web站点产生一个唯一的ID,并以此作为索引在它的后端数据库中产生一个项

Web缓存(代理服务器)

目标:不访问原始服务器,就满足用户需求
  • 用户设置浏览器:通过缓存访问web
  • 浏览器将所有的HTTP请求发给缓存
    • 在缓存中的对象:缓存直接返回对象
    • 不在缓存中的对象:缓存请求原始服务器,然后再将对象返回给客户端
  • 优点
    • 用户端获取信息速度加快
    • 服务端负载减轻
  • 示例
    • 假设
      • 平均对象大小=100kb
      • 浏览器对原始服务器的平均请求率=15个请求/s
      • Internet路由器延时=2s
      • 接入链路带宽=1.54Mbps
    • 结果
      • 接入链路上的流量强度:
        • 单位时间内的流量:
      • 排队延时:
        • 因此:流量强度越高,排队延时越大
    • 假设
      • 缓存命中率为40%
    • 结果
      • 本地访问延时为,远程访问延时为
        • 平均延时=
          分为两部分三部分:局域网传输时间+一个分组的传输时间+大的网的传输时间
      • 流量强度显著变小,排队延时变小
  • 风险:缓存没变,服务器的数据变了
    • 方法:条件GET
      • 如果缓存器中的对象拷贝是最新的,就不要发送对象
    • 缓存器proxy:在HTTP请求中指定缓存拷贝的日期
      • 在请求报文中加入头部:
        If-modified-since: <date>
        If-modified-since: <date>
    • 服务器:
      • 如果没修改过,传一个头部回去就行了
       
数组Computer Networking Notes
  • Giscus