当前位置: 首页 > article >正文

应用层(Web与HTTP)

目录

常见术语

1.HTTP概况

2.HTTP连接

非持久HTTP流程

响应时间模型

持久HTTP

3.HTTP报文

3.1HTTP请求报文

3.2HTTP响应报文

HTTP响应状态码

4.Cookies(用户-服务器状态)

cookies:维护状态

Cookies的作用

5.Web缓冲(代理服务器)

缓存示例

缓存示例:使用带宽更大的链路

缓存示例:安装本地缓存

条件GET方法


常见术语

  • Web页面:由一些对象组成
  • 对象可以是HTML文件、JPEG图像、Java小程序、声音剪辑文件等
  • Web页面包括一个基本的HTML文件,该基本HTML文件又包括若干对象的引用(链接)
  • 通过URL对每个对象进行引用
    • 访问协议、用户名、口令字、端口等等
  • URL格式

1.HTTP概况

HTTP:超文本传输协议(Hypertext Transfer Protocol)

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

使用TCP协议

  • 客户端发起一个与服务器的TCP连接(建立socket),端口号为80
  • 服务器接收客户端的TCP连接
  • 客户端与服务器交换HTTP报文(应用层协议报文)
  • TCP连接关闭

HTTP是无状态的

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

2.HTTP连接

非持久HTTP

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

持久HTTP

  • 多个对象可以在一个TCP连接是传输
  • HTTP/1.1默认使用T持久连接

非持久HTTP流程

响应时间模型

持久HTTP

非持久HTTP的缺点

  • 每个对象要2个RTT
  • 操作系统必须为每个TCP连接分配资源
  • 浏览器通常并行打开TCP连接(同一时间建立多个TCP连接),以获取引用对象

持久HTTP

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

非流水方式的持久HTTP

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

流水方式的持久RTT

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

3.HTTP报文

3.1HTTP请求报文

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

HTTP请求报文

  • ASCII(人能阅读)

HTTP请求报文:通用格式


提交表单输入

方法类型

3.2HTTP响应报文

HTTP响应状态码

4.Cookies(用户-服务器状态)

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

cookies的4个组成部分:

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

cookies:维护状态

Cookies的作用

cookies能带来什么

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

cookies如何维护状态

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

5.Web缓冲(代理服务器)

目标:不使用原始服务器,就满足客户的需求

  • 用户设置浏览器:通过缓存访问Web
  • 浏览器将所有的请求发给缓存
    • 存在缓存中的对象,直接返回该对象
    • 如果缓存中不存在该对象,缓存请求原始服务器,然后再将对象返回给客户端
  • 缓存既是客户端又是服务器
  • 通常缓存是由ISP按照(大学、公司、居民区ISP)

为什么要使用Web缓存?

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

缓存示例

缓存示例:使用带宽更大的链路

缓存示例:安装本地缓存

条件GET方法


http://www.kler.cn/news/290321.html

相关文章:

  • 什么是CAPTCHA?工作原理详解与应对方案
  • git 常用基础命令
  • 【MeterSphere】vnc连接不上selenium-chrome容器
  • 编译原理项目——C++实现C语言编译器输出为8086级汇编(代码/报告材料)
  • vue的侦听器、表单输入绑定、模版引用
  • Redis过期键监听
  • 使用Java实现LRU缓存和LFU缓存
  • Oracle 19C 数据操纵语言DML
  • ES6中try-catch
  • 智能工厂监控升级:Sovit2D大屏展示和ARM计算机的完美搭档
  • 注意力机制
  • LangChain学习
  • 收徒弟了。
  • Oracle 常用函数大全
  • 深入理解区间调度问题:从贪心算法到动态规划的加权优化
  • SprinBoot+Vue实验室考勤管理微信小程序的设计与实现
  • UEFI开发——编写一个简单的PPI
  • FFmpeg源码:avcodec_descriptor_get函数分析
  • Flutter 仿iOS桌面悬浮球效果
  • 【数学建模备赛】Ep07:灰色预测模型
  • 随手笔记【五】
  • 【扇贝编程】使用Selenium模拟浏览器获取动态内容笔记
  • AI证件照生成神器颠覆传统,轻松驾驭考研、考公与签证申请
  • PHP + Redis 实现抽奖算法(ThinkPHP5)
  • Spring6梳理6——依赖注入之Setter注入
  • 【drools】Rulesengine构建及intelj配置
  • 通过组合Self-XSS + CSRF得到存储型XSS
  • 跨境电商代购系统中前台基本功能介绍:帮助更快的了解跨境代购业务
  • 注册登陆(最新版)
  • IOS 18 发现界面(UITableView)Banner轮播图实现