HTTP协议是超文本传输协议的缩写,是用于从万维网传输超文本到浏览器的传输协议。
HTTP基于TCP/IP通信协议来传递数据(HTML文件,图片文件、查询结果等)。它不涉及数据包(packet)传输,主要规定了客户端和服务器之间的通信格式,默认使用80端口。
(1)无连接:无连接是指限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。这种方式可以节省传输时间。
(2)无状态:HTTP协议自身不对请求和响应之间的通信状态进行保存,任何两次请求之间都没有依赖关系。(每次请求都是独立的,与前面的请求和后面的请求都没有直接联系。协议本身不保留之前一切的请求或响应报文的信息。)
关于Http请求方法,以及在前面的文章详细说明了,点击跳转
4、Http状态码
1XX——信息提示,服务器收到请求,需要请求者继续执行操作;
2XX——成功,操作被成功接收并处理;
3XX——重定位,需要进一步的操作以完成请求;
4XX——客户端错误,请求包含语法错误或无法完成请求;
5XX——服务器错误,服务器在处理请求的过程中发生了错误。
常见状态码:
100:继续,客户端应继请求;
200:请求成功;
301:资源(网页等)被永久转移到其他 URL;
302:暂时重定向;
403: Forbidden —禁止访问;
404:请求的资源(网页等)不存在;
500:内部服务器错误。
HTTP1.0默认使用 Connection:cloose
,浏览器每次请求都需要与服务器建立一个 TCP 连接,服务器处理完成后立即断开 TCP 连接(无连接),服务器不跟踪每个客户端也不记录过去的请求(无状态)。
HTTP1.1默认使用 Connection:keep-alive
(长连接),避免了连接建立和释放的开销;通过 Content-Length 字段来判断当前请求的数据是否已经全部接受。不允许同时存在两个并行的响应。
Http协议的初始版本中,每进行一次Http通信就要断开一次TCP连接。每次请求都会造成TCP连接的建立和断开,增加通信量的开销。
持久连接的特点:
持久连接也称为Http keep-alive,只要任意一端没有明确提出断开连接,则保存TCP连接状态。
减少了TCP连接的重复建立和断开所造成的额外开销,减去了服务器端的压力。
持久连接使得多数请求以管线化方式(pipelining)成为可能。可以同时并行发送多个请求,而不需要一个接一个的等待响应了。(请求打包一次传输过去,响应打包一次传递回来),管线化的前提是在持久连接下。
Http1.1缺陷
(1)高延迟,带来页面加载速度的降低。(网络延迟问题只要由于队头阻塞,导致宽带无法被充分利用)
(2)无状态特性,带来巨大的Http头部。
(3)明文传输,不安全。
(4)不支持服务器推送消息。
SPDY协议:2009年谷歌公开了SPDY协议,主要解决Http1.1效率不高的问题。
SPDY被当做HTTP2.0的基础,其主要特性(兼容老版本HTTP协议,同时可以使用SSL功能)都在HTTP2.0中得到继承。
HTTP2.0:基于SPDY,专注于性能,目标是在用户和网站直接只用一个连接。
(1)二进制传输
http2.0将请求和响应数据分割为更小的帧,并且它们采用二进制编码(http1.0基于文本格式)。多个帧之间可以乱序发送,根据帧首部的流表示可以重新组装。
(2)Header压缩
Http2.0开发了专门的“HPACK”算法,大大压缩了Header信息。
(3)多路复用
http2.0中引入了多路复用技术,很好的解决了浏览器限制同一个域名下的请求数量的问题。
多路复用技术可以只通过一个TCP链接就可以传输所有的请求数据。
(4)服务端推送
HTTP2.0在一定程度上改不了传统的“请求-应答”工作模式,服务器不再完全被动地响应请求,也可以新建“流”主动向客户端发送消息。(例如,浏览器在刚请求html的时候就提前把可能会用到的JS,CSS文件发送给客户端,减少等待延迟,这被称为“服务端推送Server Push”)
服务器也不能随便将第三方资源推送给服务器,必须经过双方确认。
(1)TCP以及TCP+TLS建立连接的延迟(握手延迟)
(2)TCP的队头阻塞没有彻底解决(http2.0中,多个请求是跑在一个TCP管道中的,一旦丢包,TCP就要等待重传(丢失的包等待重新传输确认),从而阻塞该TCP连接中的所有请求)
因为HTTP2.0存在这些缺点,所以出现了HTTP3.0。
Google在推行SPDY的时候意识到了上述http2.0一系列问题,于是又产生了基于UDP协议的“QUIC”协议,让HTTP跑在QUIC上而不是TCP上。从而产生了HTTP3.0版本,它解决了“队头阻塞”的问题。
(1)实现了类似TCP的流量控制,传输可靠性的功能。
(2)实现了快速握手功能(QUIC基于UDP,UDP是面向无连接的,不需要握手和挥手,比TCP快)
(3)集成了TLS加密功能
(4)多路复用,彻底解决TCP中队头阻塞的问题(单个“流”是有序的,可能会因为丢包而阻塞,但是其他流不会受到影响)
HTTP1.1的缺点:安全性不足和性能不高;
HTTP2.0完全兼容HTTTP1.0,是“更安全的HTTP,更快的HTTPS”,头部压缩,多路复用等技术充分利用了带宽,降低了延迟。
HTTP3.0的底层支撑协议QUIC基于UDP实现,又含TCP的特点,实现了又快又可靠的协议。
文章浏览阅读467次。Baumer工业相机堡盟工业相机使用BGAPI SDK将图像数据转换为Bitmap的几种方式(C#)(Mono)_c# 调用 sdk转bitmap
文章浏览阅读316次,点赞7次,收藏8次。【代码】高尔夫游戏源码uinty引擎开发。_炫技高尔夫 代码
文章浏览阅读1.7k次。话说这是第一次自己配置log4j,以前都是拿来就用,完全没想过这个问题。 log4j的配置文件还是比较好用的,只要编译后log4j.properties文件是在classes目录下,它就会自动查找这个文件。 把记录日志放到文件中也是比较好配置的,问题是这个日志文件在哪儿,死活没找到?这让我有些慌张,如果不自己定义路径,将它控制住,就会觉得有些不舒服。 在网上搜了大半天,关于log4j讲解的文章_wildfly部署后log4j对应的log在哪里
文章浏览阅读3.2k次。JRebel热部署 xml文件修改 sql文件修改 不生效_jrebel 不更新sql
文章浏览阅读1.6k次,点赞6次,收藏14次。论文学习笔记 POSEIDON: Privacy-Preserving Federated Neural Network LearningNDSS 2021录用文章目录论文学习笔记 POSEIDON: Privacy-Preserving Federated Neural Network Learning一、机器学习1. 机器学习(ML)中的挑战2. 隐私保护机器学习(PPML)二、POSEIDON方案1. 系统和威胁模型2. 方案总览多方同态加密(MHE)联邦学习主要挑战和解决方法3. 方案CKKS_poseidon: privacypreserving federated neural network learning
文章浏览阅读1.9k次。1漏洞背景OpenTSDB(Open Time Series Data Base)是基于HBASE构建的分布式、可扩展的时间序列数据库。OpenTSDB可以获取电力行业、化工行业、物联网行业等各类型实时监测、检查与分析设备所采集、产生的时间序列数据,并提供存储、索引以及图形化服务,使其易于访问和可视化。2 漏洞原理OpenTSDB 2.4.0及之前版本中存在远程代码执行漏洞,用户提交的yrange参数或其他相关参数的值在/src/tsd/GraphHandler.java文件中进行简单的反引号._cve-2020-35476
文章浏览阅读8.9k次,点赞10次,收藏85次。Linux常用60个命令--实例详解Linux提供了大量的命令,利用它可以有效地完成大量的工作,如磁盘操作、文件存取、目录操作、进程管理、文件权限设定等。所以,在Linux系统上工作离不开使用系统提供的命令。要想真正理解Linux系统,就必须从Linux命令学起,通过基础的命令学习可以进一步理解Linux系统。不同Linux发行版的命令数量不一样,但Linux发行版本最少的命令也有200多_linux命令一共有多少个?
文章浏览阅读262次,点赞3次,收藏3次。 【功能说明】 shutdown是一个用来安全关闭或重启Linux系统的命令,系统在关闭之前会通知所有的登录用户,系统即将关闭,此时所有的新用户都不可以再登陆了,与shutdown功能类似的命令还有init、halt、poweroff、reboot。 【语法格式】 技巧说明: 1)注意shutdown命令与后面的选项之间至少要有一个空格。 2)通常情况下,我们执行的shutdown命令为shutdown -h now或shutdown -r now。 【选项参数】 参数选项_type `help' to learn how to use xshell prompt.
文章浏览阅读1.4k次,点赞11次,收藏32次。之前小编用Python做GUI界面,首选就是。但是它们实现起来工作量及代码量太大,还要一步步设计调试界面排版等问题,而且界面最终呈现也不是特别美观,还有就是打包后太大等一系列问题。最近公司同事刚好有个相关界面开发需求,给我推荐了Python的新型Gui库,不仅可以做本地GUI程序,还可以同步生成一个Web Gui 服务,将Gui界面同步到浏览器上展示。它就是nicegui。NiceGui是一个简单易用的基于Python的Web-UI框架,其目的是使在Python中开发前端应用程序变得容易。_python linux web gui
文章浏览阅读1.8k次。使用pip命令安装Flask-RESTfulpip install flask-restful可以从GitHub上的页面下载开发版本。git clone https://github.com/flask-restful/flask-restful.gitcd flask-restfulpython setup.py developFlask-RESTful具有以下依赖项(如果使用pip将自动安装):Flask版本0.10或更高Flask-RESTful需要Python版本2.7、3._flask_restful install
文章浏览阅读707次。oozie编译一、版本oozie版本:4.3.1JDK:1.8HADOOP:2.7.7hive:hivepig:0.16.0sqoop:1.4.7spark:2.3.0hbase:0.94.27tomcat:8.0.53二、编译前需要修改的地方root pom.xmljdk版本修改 <properties> <targe_oozie 4.3.1 编译
文章浏览阅读966次,点赞2次,收藏2次。123_合川电信面试