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"); // 设置请求方法为GETconn.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.hqwc.cn/news/194124.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【心得】PHP的文件上传个人笔记

目录 1 php的文件上传绕过 黑名单绕过 2 php文件上传的00截断 3 iconv字符转换异常后造成了字符截断 4 文件后缀是白名单的时候的绕过 web服务器的解析漏洞绕过 5.高级文件上传绕过 1 .htaccess nginx.htaccess 2 服务端内容检测 3 配合伪协议来绕过 4.配合日志包含绕…

智能电力监测系统

智能电力监测系统是一种先进的电力监控技术,它结合了互联网、物联网、大数据、人工智能等先进技术,对电力系统的运行状态进行实时监测和分析。以下是智能电力监测系统的主要功能和优势: 一、主要功能: 实时数据监测:智…

时间序列与 statsmodels:预测所需的基本概念(2)

时间序列与 statsmodels:预测所需的基本概念(2) 维托米尔约万诺维奇 跟随 出版于 走向发展 4 分钟阅读 2022 年 1 月 31 日 8 一、说明 在使时间序列平稳后,在本博客中我们应用 SARIMAX 预测并进行深入解释。 二、关于平稳性 …

接口自动化测试中解决接口间数据依赖

在实际的测试工作中,在做接口自动化测试时往往会遇到接口间数据依赖问题,即API_03的请求参数来源于API_02的响应数据,API_02的请求参数又来源于API_01的响应数据。 因此通过自动化方式测试API_03接口时,需要预先请求API_02接口&a…

轻松掌控财务,分析账户花销,明细记录支出情况

随着科技的发展,我们的生活变得越来越智能化。然而,对于许多忙碌的现代人来说,管理财务可能是一件令人头疼的事情。复杂的账单、花销、收入,这些可能会让你感到无从下手。但现在,我们有一个全新的解决方案——一款全新…

[qemu逃逸] XNUCA2019-vexx

前言 这题没有去符合, 题目本身不算难. 用户名: root 密码: goodluck 设备逆向 题目没有去符合, 所以其实没啥好讲了, 就列一些笔者认为关键的地方 这里的定义了两块 mmio 内存区. 然后看下设备实例结构体: 可以看到 QEMUTimer, 所以多半就是劫持 dma_timer 了. 漏洞点在…

传输层协议-TCP协议

目录 TCP协议格式理解可靠性序号与确认序号16位窗口大小六个标志位连接管理机制三次握手四次挥手 确认应答机制(ACK)超时空重传机制流量控制滑动窗口拥塞控制延迟应答捎带应答面向字节流粘包问题TCP异常情况TCP小结基于TCP应用层协议TCP/UDP对比用UDP实现…

【STL】:反向迭代器

朋友们、伙计们,我们又见面了,本期来给大家解读一下有关反向迭代器的模拟实现,如果看完之后对你有一定的启发,那么请留下你的三连,祝大家心想事成! C 语 言 专 栏:C语言:从入门到精通…

吐血整理,金融银行测试的“火“到底在哪里?银行测试真正实施...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 银行里的软件测试…

基于金鹰算法优化概率神经网络PNN的分类预测 - 附代码

基于金鹰算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于金鹰算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于金鹰优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要:针对PNN神经网络的光滑…

千梦网创:外貌与内貌

一、怎样提高身价? 同样的商品或服务怎样卖得更贵? 要么通过更贵的渠道、要么通过更好的包装。 水还是那个水,放在星巴克可以卖很贵,印上不同的logo可以卖不同的价格。 拿线下的教育培训行业来说,真正让你去测评哪…

element中el-upload上传文件去掉文件列表

<template><el-uploadref"upload"action"/api/upload":limit"1"accept.xlsx:on-success"uploadSuccess":on-error"uploadError"><el-button size"small" type"primary">点击上传<…