计算机网络——09Web-and-HTTP

Web and HTTP

一些术语

  • Web页:由一些对象组成
  • 对象可以是HTML文件、JPEG图像,JAVA小程序,声音剪辑文件等
  • Web页含有一个基本的HTML文件,该基本HTML文件又包含若干对象的引用(链接)
  • 通过URL对每个对象进行引用
    • 访问协议:用户名、口令字、端口等
  • URL格式:
Port://user:psw@www.someSchool.edu/someDept/pic.gif:port
路径元素含义
Port协议名
user用户
psw口令
www.somSchool.edu主机名
someDept/pic.gif路径名
port端口

用户口令可以不提供,即匿名访问
端口不填可以是默认的:http-80,ftp-21

HTTP概况

HTTP:超文本传输协议

  • Web的应用层协议
  • 用户/服务器模式
    • 客户:请求、接收和显示Web对象的浏览器
    • 服务器:对请求进行响应,发送对象的Web服务器
  • HTTP 1.0: RFC 1945
  • HTTP 1.1: RFC 2068

在这里插入图片描述

使用TCP

  • 客户发起一个与服务器的TCP连接(建立套接字),端口号为80
  • 服务器接受客户的TCP连接
  • 在浏览器(HTTP客户端)与Web服务器(HTTP服务器server)交换HTTP报文(应用层协议报文)
  • TCP连接关闭

HTTP是无状态的

  • 服务器并不维护关于客户的任何信息

维护状态的协议很复杂

  • 必须维护历史信息(状态)
  • 如果服务器/客户端死机,他们的状态可能不一致,二者的信息必须一致
  • 无状态的服务器能够支持更多的客户端

HTTP连接

非持久HTTP

  • 最多只有一个对象在TCP连接上发送
  • 下载多个对象需要多个TCP连接
  • HTTP/1.0使用非持久连接

持久HTTP

  • 多个对象可以在一个(在客户端和服务器之间的)TCP连接上传输
  • HTTP/1.1默认使用持久连接

非持久HTTP连接

在这里插入图片描述

在这里插入图片描述

响应时间模型

往返时间RTT:一个小的分组从客户端到服务器,在回到客户端的时间(传输时间忽略)
响应时间

  • 一个RTT用来发起TCP连接
  • 一个RTT用来HTTP请求并等待HTTP响应
  • 文件传输时间

共:2RTT + 传输时间
在这里插入图片描述

持久HTTP

非持久HTTP的缺点

  • 每个对象要 2 个RTT
  • 操作系统必须为每个TCP连接分配资源
  • 但浏览器通常打开并行TCP连接,以获取引用对象

持久HTTP

  • 服务器在发送响应后,仍保持TCP连接
  • 在相同客户端和服务器之后的后续请求和响应报文通过相连的连接进行传送
  • 客户端在遇到一个引用对象的时候,就可以尽快发送该对象的请求

非流水方式的持久HTTP

  • 客户端只能在收到前一个响应后才能发出新的请求
  • 每个引用对象花费一个RTT

流水方式的持久HTTP

  • HTTP/1.1的默认模式
  • 客户端遇到一个引用对象就立即产生一个请求
  • 所有引用(小)对象只花费一个RTT是可能的

HTTP请求报文

  • 两种类型的HTTP报文:请求、响应

HTTP请求报文

GET /somedir/page.html HTTP/1.1
Host: www.someschool.edu
User-agent: Mozilla/4.0
Connection: close
Accept-language:fr

解析报文如下:

部分举例说明
请求行GET /somedir/page.html HTTP/1.1命令: GET:获取数据;POST:上载数据;HEAD:仅仅获取相应头部,搜索引擎使用改命令得到头部之后建立索引资源路径:/somedir/page.html协议/协议版本:HTTP/1.1
首部行Host: www.someschool.edu User-agent: Mozilla/4.0 Connection: close Accept-language:fr
实体

HTTP请求报文:通用格式

在这里插入图片描述

sp是space空格
cr是回车
if是有可能有,有可能没有

提交表单输入

Post方式

  • 网页通常包括表单输入
  • 包含在实体主体中的输入被提交到服务器

URL方式

  • 方法:GET
  • 输入通过字段请求行的URL字段上载

方法类型

HTTP 1.0

  • GET
  • POST
  • HEAD
    • 要求服务器咋响应报文中不包含请求对象 -> 故障跟踪

HTTP 1.1

  • GET、POST、HEAD
  • PUT
    • 将实体主体中的文件上载到URL字段限定的路径
  • DELETE
    • 删除URL字段限定的文件

HTTP响应报文

HTTP/1.1 200 OK
Connection close
Date: Thu, 06 Aug 1998 12:00:15 GMT
Server: Apache/1.3.0 (Unix)
Last-Modified: Mon, 22 Jun 1998 …... 
Content-Length: 6821
Content-Type: text/html


data data data data data ...

解析:

部分举例说明
状态行HTTP/1.1 200 OKHTTP/1.1是协议及版本,200是状态码,OK是状态码相应状态信息
首部行Connection close Date: Thu, 06 Aug 1998 12:00:15 GMT Server: Apache/1.3.0 (Unix) Last-Modified: Mon, 22 Jun 1998 …… Content-Length: 6821 Content-Type: text/html
数据data data data data data …

HTTP响应状态码

位于服务器 -> 客户端的响应报文中的首行
一些状态码的例子

状态码状态信息说明
200OK请求成功,请求对象包含在响应报文的后续部分
301Moved Permanently请求的对象己经被永久转移了;新的URL在响应报文的Location:首部行中指定;客户端软件自动用新的URL去获取对象
400Bad Request一个通用的差错代码,表示该请求不能被服务器解读
404Not Found请求的文档在该服务上没有找到
505HTTP version Not supported版本不支持

用户-服务器状态:cookies

大多数主要的门户网站使用cookies

4个组成部分

  • HTTP响应报文中有一个cookie的首部行
  • HTTP请求报文含有一个cookie的首部行
  • 在用户端系统中保留有一个cookie文件,由用户的浏览器管理
  • Web站点有一个后端数据库

Cookies:维护状态

在这里插入图片描述

Cookies能带来什么

  • 用户验证
  • 购物车
  • 推荐
  • 用户状态

如何维持状态

  • 协议端节点:在多个事务上,发送端和接收端维持状态
  • cookies:http报文携带状态信息

Cookies与隐私

  • Cookies允许站点知道许多关于用户的信息
  • 可能将他知道的东西卖给第三方
  • 使用重定向和cookie的搜索引擎还可能知道用户的更多信息
  • 广告公司从站点获得信息

Web缓存(代理服务器)

目标:不访问原始服务器,就满足客户的请求

  • 用户设置浏览器:通过缓存访问Web
  • 浏览器将所有的HTTP请求发送给缓存:
    • 在缓存中的对象:缓存直接返回对象
    • 如对象不在缓存:缓存请求原始服务器,然后再将对象返回给客户端

在这里插入图片描述

Web缓存

  • 缓存既是客户端又是服务器
  • 通常缓存是由ISP安装

为什么要使用Web缓存

  • 降低客户端的请求响应时间
  • 可以大大减少一个机构内部网络与Internet接入链路上的流量
  • 互连网大量采用了缓存:可以使较弱的ICP也能够有效提供内容

缓存示例

在这里插入图片描述

条件

  • 平均对象大小 = 100kb(也就是请求的文件的平均大小是100kb)
  • 机构内浏览器对原始服务器的 平均请求率为 = 15请求/s
  • 平均到浏览器的速率:1.5Mbps(100kb * 15请求/s)
  • 接入链路带宽:1.54Mbps

相关数据计算

  • 各种延时计算(Internet延时、接入延时、LAN延时)

  • 延时如下:

    • Internet延时:公共网(public Internet)路由器到原始服务器 再返回到路由器的的延时 ( Internet 延时)= 2s;这个也是网络核心的延时吧
    • 接入延时:不确定,不过有公式:接入延时(主要还是排队延时) d q u e u e d_{queue} dqueue = I(1-I) * L / R = 2min
    • LAN延时:客户端到LAN路由器再返回客户端的时间,为10ms
  • 流量强度和排队延时计算:

    • 流量强度 I = 平均到达浏览器的速率 / 接入链路宽带
    • 排队延时 = t q u e u e t_{queue} tqueue = I(1-I) * L / R
    • L/R:一个分组的传输时间
  • 结果:

    • LAN的流量强度 = 15%
    • 接入链路上的流量强度 = 99% (排队延迟会非常大,排队延迟会随着分组的流量强度越接近于1趋近于无穷,此时排队延迟会非常大)
    • 总延时= LAN延时+ 接入延时+ Internet 延时 = ms + 分+ 2s

流量强度 = 平均到达浏览器的速率 / 接入链路宽带 = 1.5 / 1.54 = 0.99

优化方式

  • 提高接入链路带宽

    • 假设:
      • 平均对象大小 = 100kb
      • 机构内浏览器对原始服务器的 平均请求率为 = 15请求/s
      • 平均到浏览器的速率:1.5Mbps
      • 接入链路带宽:1.54Mbps——> 154Mbps(带宽提升)
    • 延时:
      • Internet延时机构内部路由器到原始服务器 再返回到路由器的的延时 = 2s
      • LAN延时:客户端到LAN路由器再返回客户端的时间,为10ms
    • 结果:
      • LAN的流量强度 = 15%
      • 接入链路上的流量强度 = 9.9%(可以看到强度降低了很多,排队延时也会下降)
      • 总延时 = LAN延时 + 接入延时 + Internet 延时 = ms + 分 + 2s
    • 代价: 增加了接入链路带宽(非常昂贵!)
  • 安装本地缓存

    • 假设:
      • 平均对象大小 = 100kb
      • 机构内浏览器对原始服务器的平均 请求率为 = 15请求/s
      • 平均到浏览器的速率:1.5Mbps
      • 机构内部路由器到原始服务器再返回到路由器的的延时 (Internet 延 时)= 2s
      • 接入链路带宽:1.54Mbps
    • 结果:
      • LAN 利用率: 15%
      • 接入网络利用率: ?
      • 总体延迟= ? 代价: web缓存(廉价!)

计算链路利用率,有缓存的延迟:

  • 假设:
    • 缓存命中率0.4:40%请求在缓存中被满足,其他60%的请求 需要被原始服务器满足
    • 接入链路利用率: 60%的请求采用接入链路
    • 进过接入链路到达浏览器的数据速 率 = 0.6*1.50 Mbps = 0.9 Mbps
    • 利用率= 0.9/1.54 = 0.58
    • 总体延迟 = 0.6 * (从原始服务器获取对象的 延迟,也就是接入延时 + Internet延时) +0.4 * (从缓存获取对象的延迟,也就是LAN延时) = 0.6 * (2s) + 0.4 * (msecs,这个很小,所以几乎不看了) = 1.2 secs
    • 比安装154Mbps链路还来得小 (而且 比较便宜!)

条件GET方法

  • 目标:如果缓存器中的对 象拷贝是最新的,就不要发送对象
  • 缓存器: 在HTTP请求中指 定缓存拷贝的日期 If-modified-since:<date>
  • 服务器: 如果缓存拷贝陈 旧,则响应报文没包含对象: HTTP/1.0 304 Not Modified

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/385248.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

程序员与电脑:不眠之夜的背后故事

在这个数字化飞速发展的时代&#xff0c;程序员和他们的电脑成了不可分割的伙伴。 如果你有机会深夜走过城市的某个角落&#xff0c;透过窗户瞥见那些亮着的电脑屏幕&#xff0c;你可能会好奇&#xff1a;这些电脑为什么总是开着的&#xff1f; 难道程序员们都有失眠症吗&…

猫头虎分享已解决Bug ‍ || 修改mongodb3.0副本集用户密码遇到 BeanDefinitionParsingException

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

Solidworks:从草图到工程图纸,掌握正确的工作流程

1. 草图不及太在意构造线和尺寸标注的美观性&#xff0c;只要确保模型尺寸正确即可 因为草图不是最终输出的&#xff0c;这个阶段的工作重点是建立尺寸正确的实体模型&#xff0c;所以不要在意构造线和尺寸标注是否美观。 2. 工程图纸中标注尽量按照操作提示放置位置 工程图…

《Linux 简易速速上手小册》第10章: 性能监控与优化(2024 最新版)

文章目录 10.1 理解系统负载10.1.1 重点基础知识10.1.2 重点案例&#xff1a;服务器响应变慢10.1.3 拓展案例 1&#xff1a;多核 CPU 系统的负载解读10.1.4 拓展案例 2&#xff1a;分析具体时间段的系统负载 10.2 优化性能10.2.1 重点基础知识10.2.2 重点案例&#xff1a;优化 …

‘vue-cli-service‘ 不是内部或外部命令,也不是可运行的程序

遇到 vue-cli-service 不是内部或外部命令&#xff0c;也不是可运行的程序或批处理文件。 的错误时&#xff0c;通常意味着Vue CLI没有被正确安装或配置在项目中。这可能是因为node_modules目录缺失了必要的包&#xff0c;或者局部安装的Vue CLI没有被正确设置到系统的PATH环境…

springsecurity6使用

spring security 中的类 &#xff1a; AuthenticationManager : 实现类&#xff1a;ProviderManager 管理很多的 provider &#xff0c;&#xff0c;&#xff0c; 经常使用的&#xff0c;DaoAuthenticationProvider , 这个要设置一个 UserDetailService , 查找数据库&#xff…

操作系统基础:IO管理概述【上】

&#x1f308;个人主页&#xff1a;godspeed_lucip &#x1f525; 系列专栏&#xff1a;OS从基础到进阶 &#x1f3c6;&#x1f3c6;本文完整PDF源文件请翻阅至文章底部下载。&#x1f3c6;&#x1f3c6; &#x1f3ae;1 I/O设备的基本概念与分类&#x1f52b;1.1 总览&#x…

538. 把二叉搜索树转换为累加树

给出二叉 搜索 树的根节点&#xff0c;该树的节点值各不相同&#xff0c;请你将其转换为累加树&#xff08;Greater Sum Tree&#xff09;&#xff0c;使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和。 提醒一下&#xff0c;二叉搜索树满足下列约束条件&#…

屏幕字体种类介绍

[ Script and font support in Windows ] [Windows 中的脚本和字体支持&#xff3d; 在Windows 2000 以前&#xff0c;Windows 的每个主要版本都会添加对新脚本的文本显示支持。本文介绍了每个主要版本中的更改。 Since before Windows 2000, text-display support for new scr…

云原生之基石-Docker Compose

1. 前言 在上一篇文章中介绍了基本的Docker工具&#xff0c;我们对单个应用程序进行单机单进程部署&#xff0c;制作Dockerfile文件&#xff0c;执行docker build来生成docker镜像&#xff0c; 执行docker run来运行一个容器&#xff0c;自己指定需要的参数如-v&#xff0c;但是…

【教3妹学编程-算法题】输入单词需要的最少按键次数 I

3妹&#xff1a;2哥&#xff0c;新年好鸭~ 2哥 : 新年好&#xff0c;3妹这么早啊 3妹&#xff1a;是啊&#xff0c;新年第一天要起早&#xff0c;这样就可以起早一整年 2哥 :得&#xff0c;我还不了解你&#xff0c;每天晒到日上三竿 3妹&#xff1a;嘿嘿嘿嘿&#xff0c;一年是…

作业2.12

1、选择题 1.1、以下程序的输出结果是____A____。 main() { int k11,k22,k33,x15; if(!k1) x--; else if(k2) if(k3) x4; else x3; printf(“x%d\n”,x); } A x4 B x15 C x14 D x3 1.2、有以下程序&#xff0c;while循环执行____A____次。 int main&#x…

STM32自学☞定时器定时中断案例

timer_interrupt.c文件 /* 初始化函数编写步骤&#xff1a; 1.打开时钟 2.选择时基单元的时钟源&#xff08;内部时钟源&#xff09; 3.配置时基单元 4.NVIC配置 5.启动定时器 */ #include "stm32f10x.h" #include "stm32f10x_tim.h" #include …

【Linux】进程信号概念 | 核心转储 | 信号的产生

文章目录 一、信号入门1.1 生活中的信号1.2 进程角度的信号1.3 信号的概念1.4 信号的三种常见处理方式 二、信号的产生2.1 通过终端按键产生信号问题1&#xff1a;OS怎么知道键盘输入了ControlC &#xff1f;问题2&#xff1a;按CtrlC终止进程和按Ctrl\终止进程&#xff0c;有什…

Visual Studio 2010+C#实现信源编码

1. 要求 本文设计了一套界面系统&#xff0c;该系统能够实现以下功能&#xff1a; 克劳夫特不等式的计算&#xff0c;并且能够根据计算结果给出相应的信息。可通过用户输入的初始条件然后给出哈夫曼编码以及LZ编码&#xff0c;结果均通过对话框来显示哈夫曼编码结果包含相应的…

算法沉淀——分治算法(leetcode真题剖析)

算法沉淀——分治算法 快排思想01.颜色分类02.排序数组03.数组中的第K个最大元素04.库存管理 III 归并思想01.排序数组02.交易逆序对的总数03.计算右侧小于当前元素的个数04.翻转对 分治算法是一种解决问题的算法范式&#xff0c;其核心思想是将一个大问题分解成若干个小问题&a…

代码控制邮件服务器发送电子邮件

1、引言 在用户注册的时候我们如果需要让用户接收动态验证码通常有两种方式。一种是给用户发送短信验证码&#xff0c;另一种是发送邮箱验证码。而发送短信验证码的话就必须购买短信流量&#xff0c;这无疑增加了投入的成本&#xff0c;那么此时我们可以使用发送邮箱验证码的形…

算法刷题:盛水最多的容器

盛水最多的容器 .习题链接题目题目解析算法原理我的答案 . 习题链接 盛水最多的容器 题目 题目解析 VH*W h为左右两边低的一边,w为左右两边之间的距离 算法原理 定义两个指针 left0,rightn-1; left从左往右对数组进行遍历,right从右往左进行遍历 遍历的过程中,每一次都需要…

微信小程序scroll-view组件[使用竖向横向滚动,flex布局,点击滚动到该元素及其滚动动画]

1、使用竖向横向滚动 scroll-y 属性&#xff1a;使用竖向滚动&#xff0c;必须给 scroll-view 一个固定高度 例如&#xff1a;height&#xff1a;60rpx; scroll-x 属性&#xff1a;使用横向滚动&#xff0c;必须加以下样式 1、给 scroll-view 加 width: 100%; white-space: n…

使用matplotlib库来绘制直方图

# coding: utf-8 from matplotlib import font_manager from matplotlib import pyplot as plt# 设置字体&#xff0c;这里使用微软雅黑字体 my_font font_manager.FontProperties(fnameC:\Windows\Fonts\msyh.ttc, size10)# 数据列表 a[131,98,125,131,124,139,131,117,128,1…