HTTP1.0协议详解

news2024/12/27 13:42:35

    • 前言
    • 主要特点
    • 存在的不足
    • 与HTTP1.1的区别
    • 在Java中应用HTTP1.0协议
    • 知识拓展

在这里插入图片描述

前言

HTTP是由蒂姆·伯纳斯·李(Tim Berners-Lee)爵士创造的。他在1989年提出了一个构想,借助多文档之间相互关联形成的超文本(HyperText),连成可参阅的 WWW(World Wide Web,万维网),以帮助远隔两地的研究者们共享知识。在这个构想中,他提出了3项WWW构建的关键技术:HTML, URI, HTTP。因此,蒂姆·伯纳斯·李(Tim Berners-Lee)被公认为是万维网的发明者,互联网之父。

HTTP1.0是一种无状态、无连接的应用层协议。HTTP1.0规定浏览器和服务器保持短暂的连接,浏览器的每次请求都需要与服务器建立一个TCP连接,服务器处理完成后立即断开TCP连接(无连接),服务器不跟踪每个客户端也不记录过去的请求(无状态)。


在这里插入图片描述

主要特点

  1. 无状态(Stateless) :HTTP1.0 默认使用无状态通信协议,即服务器不会记录之前的请求信息,每个请求都是独立的,相互之间没有关联。
  2. 无连接(Connectionless) :在 HTTP1.0 中,每个请求都需要与服务器建立一个新的 TCP 连接,并且在请求完成后立即关闭连接。这意味着如果需要发送多个请求,就需要建立多个 TCP 连接,这会增加网络开销和延迟。
  3. 请求/响应模式 :HTTP1.0 的通信必须由客户端发起,服务器不能主动向客户端发送数据。通信过程包括请求和响应两个步骤,请求由客户端发出,响应由服务器返回。
  4. 幂等性 :幂等性是指对于同一个请求,无论执行多少次,结果都是相同的。HTTP1.0 的请求方法(GET、POST、PUT、DELETE等)都是幂等的,即多次执行相同的方法不会产生不同的效果。
  5. 头信息 :HTTP1.0 的请求和响应中都可以包含头信息(Headers),这些信息是可选的,用于传递一些额外的信息,如请求的类型、响应的状态码等。
  6. 分段传输 :HTTP1.0 支持分段传输,即可以将一个较大的数据分成多个较小的数据段进行传输,这样可以更好地处理网络拥堵和丢包的情况。
  7. 长连接 :虽然 HTTP1.0 默认使用无状态通信协议,但是它也支持长连接(Connection Persistence),通过在请求头中设置 Connection 字段为 Keep-Alive,可以保持 TCP 连接不断开,从而减少网络开销和延迟。

这些特点使得 HTTP1.0 在互联网上得到了广泛的应用,但是随着互联网的发展和需求的增加,HTTP1.0 也逐渐暴露出一些问题,如连接数量限制、网络利用率低等。因此,后来出现了 HTTP1.1 和 HTTP2.0 等更高级的协议。

在这里插入图片描述

存在的不足

  1. 无法复用连接 :每次请求都需要创建新的TCP连接,完成三次握手和四次挥手,网络利用率低。
  2. 队头阻塞 :如果前一个请求被某种原因阻塞了,会导致后续请求无法发送。
  3. 无状态 :HTTP1.0协议是无状态的,这意味着服务器不会记录之前的请求信息,每个请求都是独立的,相互之间没有关联。这可能导致一些问题,比如在需要发送多个请求的情况下,每个请求都需要建立新的TCP连接,这会增加网络开销和延迟。
  4. 缺乏管道化 :基于无状态的基础,HTTP1.0只能等待第一个请求响应继续发送后面的请求,但响应的顺序还是按照请求的顺序返回。这意味着在处理大量请求时,可能会存在性能瓶颈。
  5. 缺乏流控制 :HTTP1.0没有内置的流控制机制,这可能导致在发送大量数据时出现网络拥堵和丢包的情况。
  6. 缺乏服务器端推送 :HTTP1.0只能由客户端发起请求,服务器不能主动向客户端发送数据。这限制了服务器向客户端推送数据的能力。
  7. 安全性问题 :由于HTTP1.0的明文传输特性,它容易受到中间人攻击和窃听。此外,由于HTTP1.0不支持连接复用和管道化等特性,也增加了安全风险。

在这里插入图片描述

与HTTP1.1的区别

HTTP 1.0和 HTTP1.1的主要区别体现在以下方面:

  • 连接管理 :HTTP 1.0默认使用非持久连接,即每个请求都需要建立新的TCP连接,而HTTP 1.1默认使用持久连接,通过复用TCP连接来避免频繁地建立连接和关闭连接,提高了网络利用率。
  • 带宽优化 :HTTP 1.0中,如果客户端只需要获取某个对象的一部分,服务器会将整个对象发送给客户端,存在一定的带宽浪费。而HTTP 1.1引入了条件请求头(如范围请求头Range),允许客户端只请求资源的某个部分,提高了带宽利用率。
  • 缓存机制 :HTTP 1.0提供了一个简单的缓存机制,但与HTTP 1.1相比,其设计的新特性以及对现有功能的细致规定相对较少。例如,HTTP 1.1引入了If-Unmodified-Since和If-Match头,为请求创建了其他形式的前提条件。
  • 可扩展性 :HTTP 1.1具有更好的可扩展性,引入了OPTIONS方法,这是一种客户端在不实际请求资源的情况下了解服务器功能的方法。

总体而言, HTTP1.1在许多方面对HTTP 1.0进行了改进和优化,包括连接管理、带宽优化、缓存机制和可扩展性等。

在这里插入图片描述

在Java中应用HTTP1.0协议

在Java中应用HTTP1.0协议,可以使用Java内置的URLConnection类或Apache HttpClient库。

使用URLConnection类发送HTTP1.0请求的示例代码如下:

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

public class Http1_0Example {
    public static void main(String[] args) throws Exception {
        String url = "http://example.com";
        HttpURLConnection conn = (HttpURLConnection) new URL(url).openConnection();
        conn.setRequestMethod("GET"); // 设置请求方法为GET
        conn.setDoOutput(true); // 允许输出数据
        conn.setRequestProperty("Connection", "Keep-Alive"); // 设置长连接
        conn.connect(); // 建立连接
        int responseCode = conn.getResponseCode(); // 获取响应状态码
        if (responseCode == HttpURLConnection.HTTP_OK) { // 如果响应成功
            BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
            String line;
            while ((line = reader.readLine()) != null) { // 读取响应内容
                System.out.println(line);
            }
            reader.close();
        } else { // 如果响应失败
            System.out.println("HTTP error: " + responseCode);
        }
        conn.disconnect(); // 断开连接
    }
}

使用Apache HttpClient库发送HTTP1.0请求的示例代码如下:

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.util.EntityUtils;

public class Http1_0Example {
    public static void main(String[] args) throws Exception {
        String url = "http://example.com";
        HttpClient httpClient = HttpClientBuilder.create().build();
        HttpGet httpGet = new HttpGet(url); // 创建GET请求对象
        HttpResponse httpResponse = httpClient.execute(httpGet); // 执行请求并获取响应对象
        HttpEntity httpEntity = httpResponse.getEntity(); // 获取响应实体对象
        if (httpEntity != null) { // 如果响应实体对象不为空,则读取响应内容并输出到控制台
            String responseString = EntityUtils.toString(httpEntity);
            System.out.println(responseString);
        }
    }
}

在这里插入图片描述

知识拓展

通过下面的链接,我们一起来来了解更多的常用的一些网络协议

HTTP/2.0协议详解

HTTP1.1协议详解

gRPC协议详解

QUIC协议详解

Dubbo协议详解

RMI协议详解

Hessian协议详解

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SQL Server如何建表

一、数据表的组成 实现完整性的约束有: –6个约束 –非空 not null –主键 primary key –唯一 unique –检查 check –默认 default –主键自增 identity 表约束 主键约束:值不能为null,且不能重复 非空约束:不能为null 默认约束&#xf…

6. hdfs的命令操作

简介 本文主要介绍hdfs通过命令行操作文件 操作文件有几种方式,看个人习惯 hdfs dfs hdfs fs hadoop fs个人习惯使用 hadoop fs 可操作任何对象,命令基本上跟linux命令一样 Usage [hadoophadoop01 ~]$ hadoop fs Usage: hadoop fs [generic option…

C++初级项目-webserver(1)

1.引言 Web服务器是一个基于Linux的简单的服务器程序,其主要功能是接收HTTP请求并发送HTTP响应,从而使客户端能够访问网站上的内容。本项目旨在使用C语言,基于epoll模型实现一个简单的Web服务器。选择epoll模型是为了高效地处理大量并发连接…

CF1899A Game with Integers(思维题)

题目链接 题目 题目大意 t 组测试样例 每组给一个正整数 n, 有两种操作: 1-1 A 和 B 轮流操作, 如果这个整数变成了一个能被3整除的数,A赢,输出First 如果在10次操作以内,n不能被3整数,B赢&…

Windows Server2012 R2修复SSL/TLS漏洞(CVE-2016-2183)

漏洞描述 CVE-2016-2183 是一个TLS加密套件缺陷,存在于OpenSSL库中。该缺陷在于使用了弱随机数生成器,攻击者可以利用此缺陷预测随机数的值,从而成功绕过SSL/TLS连接的加密措施,实现中间人攻击。这个漏洞影响了OpenSSL 1.0.2版本…

jenkins清理缓存命令

def jobName "yi-cloud-operation" //删除的项目名称 def maxNumber 300 // 保留的最小编号&#xff0c;意味着小于该编号的构建都将被删除 Jenkins.instance.getItemByFullName(jobName).builds.findAll { it.number < maxNumber }.each { it.delet…

python django 小程序点餐源码

开发工具&#xff1a; PyCharm mysql5.7&#xff0c;微信开发者工具 技术说明&#xff1a; python django html 微信小程序 代码注释齐全&#xff0c;没有多余代码&#xff0c;适合学习(毕设)&#xff0c;二次开发&#xff0c;包含论文技术相关文档。 功能介绍&#xff1a…

MySQL优化(1):B+树与索引

作者简介&#xff1a;大家好&#xff0c;我是smart哥&#xff0c;前中兴通讯、美团架构师&#xff0c;现某互联网公司CTO 联系qq&#xff1a;184480602&#xff0c;加我进群&#xff0c;大家一起学习&#xff0c;一起进步&#xff0c;一起对抗互联网寒冬 对于60%的程序员而言&a…

ER 图是什么

文章目录 前言什么是 ER图ER 图实例简化的 ER 图总结 前言 产品经理在梳理产业业务逻辑的过程中&#xff0c;非常重要的一项工作就是梳理各个业务对象之间的关系。如果涉及对象很对的时候&#xff0c;没有工具支持的话很难处理清楚。今天我们就来介绍一个梳理业务对象关系的工…

数据结构与集合源码

我是南城余&#xff01;阿里云开发者平台专家博士证书获得者&#xff01; 欢迎关注我的博客&#xff01;一同成长&#xff01; 一名从事运维开发的worker&#xff0c;记录分享学习。 专注于AI&#xff0c;运维开发&#xff0c;windows Linux 系统领域的分享&#xff01; 本…

【科技素养】蓝桥杯STEMA 科技素养组模拟练习试卷F

1、常见的加密算法可以分为对称加密算法和非对称加密算法&#xff0c;以下关于它们的描述正确的是 A、AES是一种常见的非对称加密算法 B、凯撒密码是一种非对称加密 C、非对称加密算法的解密使用的秘钥与加密不同 D、对称加密算法无法被暴力破解 答案&#xff1a;C 2、12根…

ESP32 MicroPython UART及小车类构造函数实验⑥

ESP32 MicroPython UART及小车类构造函数实验⑥ 1、实验目的2、实验内容3、参考代码4、实验结果 1、实验目的 控制小车动起来 2、实验内容 控制小车的前进、后退、左转、右转。读取小车 使用到的串口构造函数&#xff1a; uartmachine.UART(id,baudrate,rx,tx)uart:返回的构…

C++多态原理揭秘

&#x1f388;个人主页:&#x1f388; :✨✨✨初阶牛✨✨✨ &#x1f43b;强烈推荐优质专栏: &#x1f354;&#x1f35f;&#x1f32f;C的世界(持续更新中) &#x1f43b;推荐专栏1: &#x1f354;&#x1f35f;&#x1f32f;C语言初阶 &#x1f43b;推荐专栏2: &#x1f354;…

二进制分析工具-radare2使用教程

二进制分析工具-radare2使用教程 按照如下执行命令 按照如下执行命令 r2 -A 二进制文件

我为什么开始写技术博客

今天没有技术文章&#xff0c;只是想聊聊认真做CSDN和公众号以来的一些感想。 1.为什么开启技术分享 我不算是一个聪明的人&#xff0c;没有过目不忘的本事&#xff0c;所以从工作开始就养成了做笔记的习惯&#xff1b; 最开始15、16年做模型开发&#xff0c;那时候环境其实就…

*ST富吉-688272 三季报分析(20231117)

*ST富吉-688272 基本情况 公司名称&#xff1a;北京富吉瑞光电科技股份有限公司 A股简称&#xff1a;*ST富吉 成立日期&#xff1a;2011-01-20 上市日期&#xff1a;2021-10-18 所属行业&#xff1a;计算机、通信和其他电子设备制造业 周期性&#xff1a;1 主营业务&#xff1a…

23111702[含文档+PPT+源码等]计算机毕业设计javaweb高校宿舍管理系统寝室管理

文章目录 **软件开发环境及开发工具&#xff1a;****项目功能介绍&#xff1a;****论文截图&#xff1a;****实现&#xff1a;****代码片段&#xff1a;** 编程技术交流、源码分享、模板分享、网课教程 &#x1f427;裙&#xff1a;776871563 软件开发环境及开发工具&#xff…

Excel 文件比较工具 xlCompare 11.01 Crack

比较两个 Excel 文件之间的差异 xlCompare. xlCompare.com 是性能最佳的 Excel diff 工具&#xff0c;用于比较两个 Excel 文件或工作表并在线突出显示差异。xlCompare 包括免费的在线 Excel 和 CSV 文件比较服务以及用于比较和合并 Excel 文件的强大桌面工具。如果您想在线了…

STM32与ZigBee无线通信技术在工业自动化中的应用

工业自动化是指利用电子技术、计算机技术和通信技术等手段&#xff0c;对工厂、设备和生产过程进行自动化控制和管理的过程。在工业自动化中&#xff0c;可靠的无线通信技术对于实时数据的传输和设备的协同控制至关重要。本文将介绍STM32微控制器与ZigBee无线通信技术在工业自动…

MySQL 运算符二

逻辑运算符 逻辑运算符用来判断表达式的真假。如果表达式是真&#xff0c;结果返回 1。如果表达式是假&#xff0c;结果返回 0。 运算符号作用NOT 或 !逻辑非AND逻辑与OR逻辑或XOR逻辑异或 1、与 mysql> select 2 and 0; --------- | 2 and 0 | --------- | 0 | -…