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

HTTP 超文本传送协议

1 超文本传送协议 HTTP

·HTTP 是面向事务的 (transaction-oriented) 应用层协议。

·使用 TCP 连接进行可靠的传送。 定义了浏览器与万维网服务器通信的格式和规则。

·是万维网上能够可靠地交换文件(包括文本、声音、图像等各种多媒体文件)的重要基础。

HTTP 不仅传送完成超文本跳转所必需的信息,而且也传送任何可从互联网上得到的信息,如文本、超文本、声音和图像等。

1.1 HTTP 的操作过程

HTTP 规定:在 HTTP 客户与 HTTP 服务器之间的每次交互,都由一个 ASCII 码串构成的请求和一个类似的通用互联网扩充,即“类MIME (MIME-like)”的响应组成。HTTP 报文通常都使用 TCP 连接传送。

请求一个万维网文档所需的时间:

所需的时间 >=    RTT(三报文握手建立 TCP 连接) + RTT(请求和接收文档) + 文档的传输时间 = 2 RTT +文档的传输时间.

用户浏览页面的两种方法:

1.在浏览器的地址窗口中键入所要找的页面的 URL。

2.在某一个页面中用鼠标点击一个可选部分,这时浏览器会自动在互联网上找到所要链接的页面。

1.2 HTTP 的主要特点

·HTTP 使用了面向连接的 TCP 作为运输层协议,保证了数据的可靠传输。

·HTTP 协议本身也是无连接的。

·HTTP 是无状态的 (stateless),简化了服务器的设计,使服务器更容易支持大量并发的 HTTP 请求。

1.3 HTTP/1.1 持续连接

·HTTP/1.1 协议使用持续连接 (persistent connection)。

·持续连接(persistent connection):服务器在发送响应后仍然在一段时间内保持这条连接(不释放),使同一个客户(浏览器)和该服务器可以继续在这条连接上传送后续的 HTTP 请求报文和响应报文。

·只要文档都在同一个服务器上,就可以继续使用该 TCP 连接。

·两种工作方式:

        ·非流水线方式 (without pipelining)

        ·流水线方式 (with pipelining)。

1.3.1 非流水线方式

·客户在收到前一个响应后才能发出下一个请求。这比非持续连接的两倍 RTT 的开销节省了建立 TCP 连接所需的一个 RTT 时间。

·缺点:服务器在发送完一个对象后,其 TCP 连接就处于空闲状态,浪费了服务器资源。

所需的时间 >=    2 RTT + page.html 传输时间 + 10 RTT + 10 个文档的传输时间 + 空闲时间. 

1.3.2 流水线方式

·客户在收到 HTTP 的响应报文之前就能够接着发送新的请求报文。

·连续的多个请求报文到达服务器后,服务器就可连续发回响应报文。

·使用流水线方式时,客户访问所有的对象只需花费一个 RTT时间,使 TCP 连接中的空闲时间减少,提高了下载文档效率。

所需的时间 >=    1 RTT + 11 个文档的传输时间.

1.4 协议 HTTP/2

·是协议 HTTP/1.1 的升级版本。

1.服务器可以并行发回响应(使用同一个 TCP 连接)。

2.允许客户复用 TCP 连接进行多个请求。

3.把所有的报文都划分为许多较小的二进制编码的帧,并采用了新的压缩算法,不发送重复的首部字段,大大减小了首部的开销,提高了传输效率。

4.向后兼容。

2 代理服务器

·代理服务器 (proxy server) 又称为万维网高速缓存 (Web cache),它代表浏览器发出 HTTP 请求。

·万维网高速缓存把最近的一些请求和响应暂存在本地磁盘中。

·当与暂时存放的请求相同的新请求到达时,万维网高速缓存就把暂存的响应发送出去,而不需要按 URL 的地址再去互联网访问该资源。

使用高速缓存可减少 访问互联网服务器的时延:

·不使用高速缓存的情况:

·使用高速缓存的情况:

3 HTTP 的报文结构

·两类报文

        ·请求报文:从客户向服务器的请求。

        ·响应报文:从服务器到客户的回答。

        ·由于 HTTP 是面向正文的 (text-oriented),因此报文中每一个字段的值都是一些 ASCII 码串,每个字段的长度都是不确定的

·三个组成部分

        ·开始行:用于区分是请求报文还是响应报文。

        ·首部行:说明浏览器、服务器或报文主体的一些信息。可以有多行,也可以不使用。

        ·实体主体:请求报文中一般不用,响应报文中也可能没有该字段。

3.1 请求报文

·方法:对所请求的对象进行的操作,实际上就是一些命令。 请求报文的类型是由它所采用的方法决定的。

·URL:所请求的资源的 URL。

·版本:HTTP 的版本。

HTTP 请求报文举例:

3.2 响应报文

 ·版本:HTTP 的版本。

·状态码:服务器操作完成的状态。

     ·状态码:都是三位数字,分为5大类:

        ·1xx 表示通知信息,如请求收到了或正在进行处理。

        ·2xx 表示成功,如接受或知道了。

        ·3xx 表示重定向,表示要完成请求还必须采取进一步的行动。

        ·4xx 表示客户的差错,如请求中有错误的语法或不能完成。

        ·5xx 表示服务器的差错,如服务器失效无法完成请求。

      ·响应报文中常见到的三种状态行:

        ·HTTP/1.1 202 Accepted              接受

        ·HTTP/1.1 400 Bad Request        错误的请求

        ·Http/1.1 404 Not Found               找不到

·短语:解释状态码。

4 在服务器上存放用户的信息

·万维网使用 Cookie 跟踪在 HTTP 服务器和客户之间传递的状态信息。

欢迎一起学习~

相关文章:

HTTP 超文本传送协议

1 超文本传送协议 HTTP HTTP 是面向事务的 (transaction-oriented) 应用层协议。 使用 TCP 连接进行可靠的传送。 定义了浏览器与万维网服务器通信的格式和规则。 是万维网上能够可靠地交换文件(包括文本、声音、图像等各种多媒体文件)的重要基础。 H…...

MySQL导入/导出数据

MySQL导入/导出数据 文章目录 MySQL导入/导出数据一、MySQL 导入数据1、mysql 命令导入2、source 命令导入3、使用 LOAD DATA 导入数据4、使用 mysqlimport 导入数据4.1、mysqlimport的常用选项介绍 二、MySQL 导出数据1、使用 SELECT ... INTO OUTFILE 语句导出数据2、mysqldu…...

Matplotlib初探:认识数据可视化与Matplotlib

Matplotlib初探:认识数据可视化与Matplotlib Fig.1 利用Matplotlib进行数据可视化( 可视化代码见文末) 🌵文章目录🌵 🌳引言🌳🌳一、数据可视化简介🌳🌳二、Matplotlib库简介&#x…...

LeetCode 0987.二叉树的垂序遍历:遍历时存节点信息,遍历完自定义排序

【LetMeFly】987.二叉树的垂序遍历:遍历时存节点信息,遍历完自定义排序 力扣题目链接:https://leetcode.cn/problems/vertical-order-traversal-of-a-binary-tree/ 给你二叉树的根结点 root ,请你设计算法计算二叉树的 垂序遍历…...

TCP 和 UDP的区别

文章目录 概述区别UDPTCPTCP与UDP的选择UDP和TCP编程区别 概述 TCP(Transmission Control Protocol,传输控制协议)和 UDP(User Datagram Protocol,用户数据报协议)是互联网中两种最常用的传输层协议 总的来…...

Python 将一维数组或矩阵变为三维

Python 将一维数组或矩阵变为三维 正文 正文 话不多说直接上代码: import numpy as npsampling_points 10001arr np.linspace(0, 2, sampling_points) arr_3D arr.reshape(1, 1, -1) print(arr_3D) """ result: [[[0.0000e00 2.0000e-04 4.0000…...

Python如何实现定时发送qq消息

因为生活中老是忘记各种事情,刚好又在学python,便突发奇想通过python实现提醒任务的功能(尽管TIM有定时功能),也可定时给好友、群、讨论组发送qq消息。其工作流程是:访问数据库提取最近计划——>根据数据…...

支付方式接入:支付宝、微信支付、微软支付

支付方式接入:支付宝、微信支付、微软支付 1、微信支付-接入指引 2、支付宝-接入指引 3、微软支付-接入指引 3.1、使用visual studio打包应用(发布到微软市场):Package a desktop app from source code using Visual Studio -…...

C++中的互斥量

互斥量是一个类&#xff0c;互斥量的使用必须引入头文件#include <mutex>。互斥量就如同一把锁&#xff0c;在同一时间&#xff0c;多个线程都可以调用lock成员函数尝试给这把锁头加锁&#xff0c;但是只有一个线程可以成功给这把锁加锁&#xff0c;其他没有加锁成功的线…...

盲盒小程序开发

现如今&#xff0c;盲盒已经成为了市场上不可忽视的新型消费模式&#xff0c;并且也逐渐遍布在全球各地中。盲盒的种类商品也逐渐丰富完善&#xff0c;不在局限于性价比高的盲盒玩具、手办等&#xff0c;也发展到了美妆、电子、食品等行业&#xff0c;具有较大的实用性和收藏价…...

安装 Windows 10

1.镜像安装 镜像安装:安装Windows 10 2.安装过程(直接以图的形式呈现) 选择专业版的 等待安装即可...

C++文件操作->文本文件(->写文件、读文件)、二进制文件(->写文件、读文件)

#include<iostream> using namespace std; #include <fstream>//头文件包含 //文本文件 写文件 void test01() { //1.包含头文件 fstream //2.创建流对象 ofstream ofs; //3.指定打开方式 ofs.open("test.txt", ios::out); //4.写…...

Mac相关问题

Mac 更新node版本 第一步&#xff0c;先查看本机node.js版本&#xff1a; node -v 第二步&#xff0c;清除node.js的cache&#xff1a; sudo npm cache clean -f 第三步&#xff0c;安装 n 工具&#xff0c;这个工具是专门用来管理node.js版本的&#xff0c;别怀疑这个工具…...

Python爬虫之Splash详解

爬虫专栏&#xff1a;http://t.csdnimg.cn/WfCSx Splash 的使用 Splash 是一个 JavaScript 渲染服务&#xff0c;是一个带有 HTTP API 的轻量级浏览器&#xff0c;同时它对接了 Python 中的 Twisted 和 QT 库。利用它&#xff0c;我们同样可以实现动态渲染页面的抓取。 1. 功…...

Deep深度系统下载安装Beyond compare4

Beyond Compare 4下载和安装 1、在线安装 Debian, Ubuntu安装命令&#xff1a; wget https://www.scootersoftware.com/bcompare-4.4.6.27483_amd64.deb sudo apt update sudo apt install ./bcompare-4.4.6.27483_amd64.deb Redhat Enterprise Linux, Fedora, CentOS安装命令…...

Qt 使用QScintilla 编辑lua 脚本

需求&#xff1a; 利用QScintilla 编辑lua 脚本 步骤&#xff1a; 1&#xff0c;下载 QScintilla Riverbank Computing | Download 2, 打开 src/qscintilla.pro 文件 编译出 dll库 3&#xff0c;工程中引入这个库 注意debug 模式 必须加载debug 版本编译的库&#xff0…...

2022长安杯复现

案件情况 某地警方接到受害人报案称其在某虚拟币交易网站遭遇诈骗&#xff0c;该网站号称使用“USTD 币”购买所谓的“HT 币”&#xff0c;受害人充 值后不但“HT 币”无法提现、交易&#xff0c;而且手机还被恶意软件锁定 勒索。警方根据受害人提供的虚拟币交易网站调取了对应…...

Netty Review - NioEventLoopGroup源码解析

文章目录 概述类继承关系源码分析小结 概述 EventLoopGroup bossGroup new NioEventLoopGroup(1); EventLoopGroup workerGroup new NioEventLoopGroup();这段代码是在使用Netty框架时常见的用法&#xff0c;用于创建两个不同的EventLoopGroup实例&#xff0c;一个用于处理连…...

团队配置管理规范浅见

在一段时间的工作过程中配置管理工作确实对我们的生产活动产生了巨大的工作量&#xff0c;现在就这个工作来进行梳理一下。 本文主要分为两部分&#xff1a; 1、借用软件系统分析师的配置管理部分内容来介绍配置管理的工作&#xff08;原谅时间精力有限&#xff0c;原文基本已…...

「算法」二分查找1:理论细节

&#x1f387;个人主页&#xff1a;Ice_Sugar_7 &#x1f387;所属专栏&#xff1a;算法详解 &#x1f387;欢迎点赞收藏加关注哦&#xff01; 二分查找算法简介 这个算法的特点就是&#xff1a;细节多&#xff0c;出错率高&#xff0c;很容易就写成死循环有模板&#xff0c;但…...

单例模式深度解析:从基础实现到生产级避坑指南

1. 单例模式&#xff1a;为什么它既是基石又是“坑”在软件开发的江湖里&#xff0c;单例模式&#xff08;Singleton Pattern&#xff09;的名号&#xff0c;几乎无人不知。它被写进教科书&#xff0c;是设计模式中最容易理解、也最常被提及的模式之一。但有趣的是&#xff0c;…...

3分钟掌握ppInk:Windows屏幕标注工具的终极使用指南

3分钟掌握ppInk&#xff1a;Windows屏幕标注工具的终极使用指南 【免费下载链接】ppInk Fork from Gink 项目地址: https://gitcode.com/gh_mirrors/pp/ppInk 你是否在演示时需要用鼠标或触摸屏快速标注屏幕内容&#xff1f;是否希望有一款简单易用但功能强大的标注工具…...

轻量级代码生成模型nanocoder:边缘部署与高效微调实战

1. 项目概述&#xff1a;一个为边缘而生的高效代码生成模型最近在折腾一些边缘设备上的AI应用&#xff0c;比如在树莓派或者Jetson Nano上跑一些轻量级的代码补全工具&#xff0c;发现市面上那些动辄几十亿参数的大模型根本塞不进去&#xff0c;跑起来也慢得让人心焦。就在这个…...

TVA模型适配FPC材料疲劳差异

重磅预告&#xff1a;本专栏将独家连载系列丛书《智能体视觉技术与应用》部分精华内容&#xff0c;该书是世界首套系统阐述“因式智能体”视觉理论与实践的专著&#xff0c;特邀美国 TypeOne 公司首席科学家、斯坦福大学博士 Bohan 担任技术顾问。Bohan先生师从美国三院院士、“…...

立创泰山派RK3566开发环境实战:从交叉编译到高效文件传输

1. 立创泰山派RK3566开发环境搭建全攻略 第一次拿到立创泰山派RK3566开发板时&#xff0c;我和大多数嵌入式开发者一样兴奋又忐忑。这款基于Rockchip RK3566处理器的开发板性能强劲&#xff0c;但配套资料相对分散&#xff0c;特别是对于从其他平台&#xff08;比如我熟悉的IMX…...

终极指南:如何在Windows电脑上实现AirPlay 2无线投屏功能

终极指南&#xff1a;如何在Windows电脑上实现AirPlay 2无线投屏功能 【免费下载链接】airplay2-win Airplay2 for windows 项目地址: https://gitcode.com/gh_mirrors/ai/airplay2-win 还在为Windows电脑无法接收iPhone、iPad或Mac的屏幕镜像而烦恼吗&#xff1f;Airpl…...

Ubuntu 18.04.6 从零到一:新手避坑与高效配置实战指南

1. 为什么选择Ubuntu 18.04.6&#xff1f; Ubuntu 18.04.6是长期支持版本&#xff08;LTS&#xff09;的最终更新&#xff0c;特别适合需要稳定系统的用户。相比最新版本&#xff0c;它的软件生态更成熟&#xff0c;社区支持更完善。我实测发现&#xff0c;这个版本对老硬件兼容…...

阿里图像复原验证码识别

一、简介 这个就是阿里的图像还原验证码&#xff0c;他是从一个图片中任意抠出一个物品&#xff0c;可能是蜡烛、车轮、盘子、瓶子、盖子、扣子等等。然后让你通过鼠标拖动的方式&#xff0c;把物品拖到对应的位置上&#xff0c;完成图像复原验证。 这个验证码还有一个非常变态…...

Hive 3.1.2 避坑指南:手把手解决‘Metastore未初始化’及分区表数据导入那些事儿

Hive 3.1.2 实战避坑&#xff1a;从Metastore初始化到分区表优化的全链路解决方案 当你在Ubuntu 18.04上刚完成Hive 3.1.2的安装&#xff0c;满心欢喜准备大展拳脚时&#xff0c;命令行却无情地抛出"Hive metastore database is not initialized"的错误提示——这场景…...

ASReview实战:用主动学习技术高效完成文献综述

1. 项目概述&#xff1a;当学术文献综述遇上主动学习如果你是一名研究生、科研人员&#xff0c;或者任何需要从海量文献中筛选出相关研究的人&#xff0c;那么“大海捞针”这个词你一定深有体会。面对动辄成千上万篇的论文标题和摘要&#xff0c;传统的人工筛选不仅耗时耗力&am…...