HTTP1.0协议详解

    • 前言
    • 主要特点
    • 存在的不足
    • 与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协议详解

在这里插入图片描述

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

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

相关文章

[开源]基于 AI 大语言模型 API 实现的 AI 助手全套开源解决方案

原文:[开源]基于 AI 大语言模型 API 实现的 AI 助手全套开源解决方案 一飞开源,介绍创意、新奇、有趣、实用的开源应用、系统、软件、硬件及技术,一个探索、发现、分享、使用与互动交流的开源技术社区平台。致力于打造活力开源社区&#xff0…

keepalived离线安装

上传离线安装包 将离线安装包拖动到服务器上 进入到离线安装包路径,执行下面脚本进行安装 rpm -Uvh --force --nodeps *.rpm

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赢&…

TCP与UDP协议

TCP与UDP协议 1、TCP协议: 1、TCP特性: TCP 提供一种面向连接的、可靠的字节流服务。在一个 TCP 连接中,仅有两方进行彼此通信。广播和多播不能用于 TCP。TCP 使用校验和,确认和重传机制来保证可靠传输。TCP 给数据分节进行排序…

智能驾驶汽车虚拟仿真视频数据理解(一)

赛题官网 datawhale 赛题介绍 跑通demo paddle 跑通demo torch 提交的障碍物取最主要的那个?不考虑多物体提交。障碍物,尽可能选择状态发生变化的物体。如果没有明显变化的,则考虑周边的物体。车的状态最后趋于减速、停止,时序…

OpenAI的Whisper蒸馏:蒸馏后的Distil-Whisper速度提升6倍

1 Distil-Whisper诞生 Whisper 是 OpenAI 研发并开源的一个自动语音识别(ASR,Automatic Speech Recognition)模型,他们通过从网络上收集了 68 万小时的多语言(98 种语言)和多任务(multitask&am…

Windows11怎样投屏到电视上?

电视屏幕通常比电脑显示器更大,能够提供更逼真的图像和更震撼的音效,因此不少人也喜欢将电脑屏幕投屏到电视上,缓解一下低头看电脑屏幕的烦恼。 Windows11如何将屏幕投射到安卓电视? 你需要在电脑和电视分贝安装AirDroid Cast的电…

Python | 机器学习之SVM支持向量机

​🌈个人主页:Sarapines Programmer🔥 系列专栏:《人工智能奇遇记》🔖少年有梦不应止于心动,更要付诸行动。 目录结构 1. 机器学习之SVM支持向量机概念 1.1 机器学习 1.2 SVM支持向量机 2. SVM支持向量机…

hahahaha发到这里吧

一大早上笑死我 恭喜在座的各位,一直以为这次比赛public和private排名会相差不大,结果前6有4个人都是从银牌歘一下上来的,想象地到他们看到结果时的喜悦

python引入自己不同目录的模块

1.目录结构 from manual_data.utils import delete_and_insert_center

ceph学习笔记

ceph ceph osd lspoolsrbd ls -p testpool#查看 ceph 集群中有多少个 pool,并且每个 pool 容量及利 用情况 rados dfceph -sceph osd tree ceph dfceph versionsceph osd pool lsceph osd crush rule dumpceph auth print-key client.adminceph orch host lsceph crash lsceph…

搞科研、写论文,如何正确使用GPT?AIGC技术解析、提示词工程高级技巧、AI绘图、ChatGPT/GPT4应用

目录 专题一 OpenAI开发者大会最新技术发展及最新功能应用 专题二 AIGC技术解析 专题三 提示词工程高级技巧 专题四 ChatGPT/GPT4的实用案例 专题五 让ChatGPT/GPT4成为你的论文助手 专题六 让ChatGPT/GPT4成为你的编程助手 专题七 让ChatGPT/GPT4进行数据处理 专题八 …

这就是不创业的最大的原因,机器视觉兄弟们创业要谨慎,为什么99.99%机器视觉公司老板是销售人员?

机器视觉公司,99%公司实行销售优先原则,企业老板99%从销售人员中产生。所以机器视觉兄弟们创业要谨慎。 企业的本质就是通过销售获得利润的组织,销售是立足之本,没有销售,创业就是耍流氓。因此,企业的一切…

CF1899B 250 Thousand Tons of TNT

题目链接 题目 题目大意 T T T 组测试数据 每组 n n n 个货物,第 i i i 个货物 的重量是 a i a_i ai​ 用k辆货车按顺序装这些货物,条件是每辆车上的货物个数都一样,也即是说 n n n 必须能被 k k k 整除, 求任意两辆车货物总…

Redis 访问控制列表(ACL)

Redis ACL 关于 Redis ACL与旧版本兼容ACL helpACL 配置模式redis.conf 配置模式外部 ACL File 配置模式 ACL 规则总结 关于 Redis ACL Redis ACL (访问控制列表) 是 Access Control List 的缩写,它允许某些连接在可以执行的命令和可以访问的密钥方面受到限制。它…

代码随想录算法训练营第五十八天丨 动态规划part18

739. 每日温度 思路 首先想到的当然是暴力解法,两层for循环,把至少需要等待的天数就搜出来了。时间复杂度是O(n^2) 那么接下来在来看看使用单调栈的解法。 什么时候用单调栈呢? 通常是一维数组,要寻找任一个元素的右边或者左边…

智能配电房管理系统

智能配电房管理系统依托电易云-智慧电力物联网,是一种集成了互联网、物联网、大数据、人工智能等先进技术的管理系统,专门用于配电房的智能化管理和运维。以下是智能配电房管理系统的主要功能和特点: 一、主要功能: 实时监测与数据…

SQL 的 AND、OR 和 NOT 运算符:条件筛选的高级用法

AND 运算符 SQL的AND运算符用于根据多个条件筛选记录,确保所有条件都为TRUE才返回记录。下面是AND运算符的基本语法: SELECT column1, column2, ... FROM table_name WHERE condition1 AND condition2 AND condition3 ...;column1, column2,等是您要选…

Go 语言数组基础教程 - 数组的声明、初始化和使用方法

数组用于在单个变量中存储相同类型的多个值,而不是为每个值声明单独的变量。 声明数组 在Go中,有两种声明数组的方式: 使用var关键字: 语法 var array_name [length]datatype{values} // 这里定义了长度 或者 var array_n…