计算机网络之HTTP协议

一、HTTP协议基本概念

HTTP(HyperText Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传输协议。它可以使浏览器更加高效,减少网络传输量。HTTP协议不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分内容首先显示(如文本先于图形)。HTTP协议是客户端浏览器或其他程序与Web服务器之间的应用层通信协议。在Internet上的Web服务器上存放的都是超文本信息,客户端需要通过HTTP协议传输所要访问的超文本信息。

二、HTTP协议工作原理

1. 请求-响应模式

HTTP协议基于请求-响应模式,即客户端发送请求,服务器返回响应。

2. 分层顺序通信

利用TCP/IP协议族进行网络通信时,会通过分层顺序与对方进行通信。发送端从应用层往下走,接收端则从链路层往上走。首先作为发送端的客户端在应用层(HTTP协议)发出一个想看某个Web页面的HTTP请求。接着,在传输层(TCP协议)把从应用层处收到的数据(HTTP请求报文)进行分割,并在各个报文上打上标记序号及端口号后转发给网络层。在网络层(IP协议),增加作为通信目的地的MAC地址后转发给链路层。这样一来,发往网络的通信请求就准备齐全了。接收端的服务器在链路层接收到数据,按序往上层发送,一直到应用层。当传输到应用层,才能算真正接收到由客户端发送过来的HTTP请求。

3. HTTP报文

用于HTTP协议交互的信息被称为HTTP报文。请求端(客户端)的HTTP报文叫做请求报文;响应端(服务器端)的叫做响应报文。HTTP报文本身是由多行(用CR+LF作换行符)数据构成的字符串文本。HTTP报文大致可分为报文首部和报文主体两部分。两者由最初出现的空行(CR+LF)来划分。通常,并不一定有报文主体。

三、HTTP请求与响应

1. HTTP请求报文

  • 请求行:包含用于请求的方法、请求URI和HTTP版本。
  • 请求头部:包含表示请求的各种条件和属性的各类首部。
  • 请求体:在使用POST或PUT等方法时,携带发送给服务器的数据。

2. HTTP响应报文

  • 状态行:包含HTTP版本、状态码、状态描述。
  • 响应头部:包含服务器的相关数据及被请求的文档信息。
  • 响应体:服务器向客户端发送的实际数据。

四、HTTP方法

HTTP请求可以使用多种请求方法,每种方法定义了不同的操作:

  • GET:请求服务器发送某个资源。
  • POST:向指定资源提交数据,请求服务器进行处理(如提交表单或上传文件)。
  • HEAD:类似于GET请求,但返回的响应中没有具体的内容,用于获取报头。
  • PUT:从客户端向服务器传送的数据取代指定的文档的内容。
  • DELETE:请求服务器删除Request-URI所标识的资源。
  • OPTIONS:使服务器传回该资源所支持的所有HTTP请求方法。
  • TRACE:回显服务器收到的请求,主要用于测试或诊断。
  • PATCH:是对PUT方法的补充,用来对已知资源进行局部更新。
  • CONNECT:HTTP/1.1中预留给能够将连接改为通道方式的代理服务器。通常用于SSL加密服务器的链接(经由非加密的HTTP代理服务器)。

五、HTTP状态码

HTTP状态码由三个十进制数字组成,第一个十进制数字定义了状态码的类型。响应分为五类:

  • 1xx(信息响应):表示请求已被接收,继续处理。
  • 2xx(成功响应):表示请求已成功被服务器接收、理解、并接受。
  • 3xx(重定向):表示需要客户端采取进一步的操作才能完成请求。
  • 4xx(客户端错误):表示请求包含语法错误或无法完成请求。
  • 5xx(服务器错误):表示服务器在处理请求的过程中发生了错误。
六、HTTP协议的无状态性

HTTP协议是一种无状态协议,协议自身不对请求和响应之间的通信状态进行保存。也就是说,在HTTP这个级别,协议对于发送过的请求或响应都不做持久化处理。这是为了更快地处理大量事务,确保协议的可伸缩性,而特意把HTTP协议设计成如此简单的。然而,随着Web的不断发展,很多业务都需要对通信状态进行保存。因此,引入了Cookie技术,通过在请求和响应报文中写入Cookie信息来控制客户端的状态。

七、HTTP/1.1与持久连接

HTTP/1.1版本引入了持久连接的方法,只要任意一端没有明确提出断开连接,则保持TCP连接状态。这样可以在一次TCP连接后进行多次请求和响应的交互,减少了建立和关闭连接的消耗和时间延迟。持久连接使得多数请求以管线化方式发送成为可能,即不用等待亦可发送下一个请求,从而提高了传输效率。

八、HTTPS协议

HTTPS(Hyper Text Transfer Protocol over Secure Socket Layer)是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。HTTPS更加安全,它是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比HTTP协议的信息明文传输安全。HTTPS需要到CA申请证书,一般免费证书很少,需要交费。端口号不同:HTTP默认端口号80,HTTPS默认端口号443。状态不同:HTTP的连接很简单,是无状态的。而HTTPS协议是SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比HTTP协议安全。

九、Java代码示例

以下是一个简单的Java程序,用于通过HTTP协议发送GET请求并接收服务器的响应:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;public class HttpExample {public static void main(String[] args) {try {// 创建一个URL对象URL url = new URL("https://www.example.com");// 通过URL对象打开一个HttpURLConnection连接HttpURLConnection connection = (HttpURLConnection) url.openConnection();// 设置请求方法为GETconnection.setRequestMethod("GET");// 获取服务器的响应码int responseCode = connection.getResponseCode();// 打印响应码System.out.println("Response Code: " + responseCode);// 如果响应码为200(OK),则读取响应内容if (responseCode == HttpURLConnection.HTTP_OK) {BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));String inputLine;StringBuilder response = new StringBuilder();// 读取响应内容并存储在StringBuilder对象中while ((inputLine = in.readLine()) != null) {response.append(inputLine);}// 关闭输入流in.close();// 打印响应内容System.out.println("Response Content: " + response.toString());} else {// 如果响应码不是200,则打印错误信息System.out.println("Error: " + responseCode);}} catch (IOException e) {// 捕获并处理IOException异常e.printStackTrace();}}
}

十、HTTP协议的未来发展

随着Web技术的不断发展,HTTP协议也在不断适应新的需求。HTTP/2.0引入了二进制格式、多路复用、头部压缩等特性,显著提高了传输效率。而基于QUIC协议的HTTP/3.0进一步提升了传输速度和安全性,尤其在高延迟和不稳定的网络环境中表现出色。

1、http/2

HTTP/2.0是基于SPDY协议发展而来的。SPDY是由Google开发的基于TCP的会话层协议,旨在最小化网络延迟,提升网络速度,优化用户的网络使用体验。SPDY并不是一种用于替代HTTP的协议,而是对HTTP协议的增强。HTTP/2标准于2015年5月以RFC 7540正式发表。
二进制传输:HTTP/2.0采用二进制格式传输数据,而非HTTP/1.x的文本格式。这减少了解析数据的时间,提高了传输效率。
多路复用:HTTP/2.0支持在一个TCP连接上并发发送多个请求和响应,通过流(stream)和帧(frame)的概念实现。这解决了HTTP/1.x中的队首阻塞问题,显著提高了传输性能。
首部压缩:HTTP/2.0使用HPACK压缩算法对头部信息进行压缩,减少了传输的数据量。HPACK通过维护一个动态表和静态表来存储和引用常见的头部字段,进一步提高了压缩效率。
服务器推送:HTTP/2.0引入了服务器推送(Server Push)机制,允许服务器在客户端请求之前主动推送资源到客户端缓存,减少了客户端的等待时间,提高了应用的响应速度。
增强的安全性:虽然HTTP/2.0协议本身并没有声明必须使用TLS,但现代浏览器如Chrome等强制要求使用HTTP/2.0时必须通过TLS(即HTTPS),从而提高了传输过程的安全性。

2、http/3

HTTP/3.0是基于Google开发的QUIC协议构建的。QUIC(Quick UDP Internet Connections)是一个基于UDP的新型传输层协议,旨在解决TCP的一些固有问题,如连接建立的延迟和拥塞控制算法的不足。HTTP/3.0标准于2022年6月6日正式发布,并被IETF(互联网工程任务组)制定在RFC 9114中。
基于QUIC的传输层协议:HTTP/3.0不再依赖于TCP,而是使用QUIC进行数据传输。QUIC具有更快的连接建立时间和更好的拥塞控制,同时支持快速的连接迁移和零RTT(Round-Trip Time)握手。
多路复用:HTTP/3.0延续了HTTP/2.0的多路复用特性,允许在单个连接上并行发送多个请求和响应,提高了网络利用率和性能。
0-RTT连接建立:基于QUIC的特性,HTTP/3.0支持零RTT连接建立,使得客户端可以在不进行完整的握手过程的情况下发送数据,进一步减少了延迟。
连接迁移:QUIC支持快速的连接迁移,即使在网络切换或IP地址变更的情况下,连接也能够快速恢复,提高了网络的稳定性和可靠性。
抗拥塞控制:HTTP/3.0内置了先进的拥塞控制算法,能够更好地适应网络环境的变化,提供更稳定和可靠的网络性能。
内置加密:HTTP/3.0将TLS 1.3集成在传输层,所有连接默认使用TLS 1.3加密,进一步简化了安全连接的建立过程,并增强了数据传输的安全性。

十一、总结

HTTP协议是计算机网络中用于Web通信的基础协议之一。它基于请求-响应模式,通过分层顺序与对方进行通信。HTTP协议定义了请求和响应的格式以及常见的请求方法和状态码。HTTP协议是无状态的,但可以通过Cookie等技术来管理状态。随着技术的演进,HTTP协议也在不断发展和完善,以适应新的需求和挑战。

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

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

相关文章

vue使用方法创建组件

vue 中 创建 组件 使用 方法创建组件 vue2 中 import vueComponent from xxxx function createFn(){const creator Vue.extend(vueComponent);const instance new creator();document.appendChild(instance.$el); }vue3 中 import { createApp } from "vue"; im…

关于SwitchCase中变量定义及使用变量的一些注意事项参数传递参数时不能实现多态动态绑定的问题c++语法

关于SwitchCase中变量定义及使用变量的一些注意事项参数传递参数时不能实现多态动态绑定的问题c语法 说明(废话)问题解决方案问题1 case中不能定义变量多态函数动态传绑定的问题 总结 说明(废话) 用了这么多年的c,有些语法上的问题真的让人很难办,有的问…

MySQL中的行转列和列转行操作

MySQL是一款常用的关系型数据库,广泛应用于各种类型的应用程序和数据存储需求。在MySQL中,我们经常需要对表格进行行转列或列转行的操作,以满足不同的分析或报表需求。本文将详细介绍MySQL中的行转列和列转行操作,并提供相应的SQL…

新世联科技:NG2-A-7在DAC空气捕集提取CO2的应用

一、DAC空气捕集提取CO2的介绍 直接空气碳捕获(Direct Air Capture,简称DAC)是一种直接从大气中提取二氧化碳的技术。 二、DAC空气捕集提取CO2的前景 从大气中提取的这种二氧化碳可以作为循环经济的一部分以各种不同方式使用。未来&#xf…

面试题分享11月5日

1、JWT 数据结构 头部(Header)、负载(Payload)、签名(signature) 头部(Header)、负载(Payload)都是明文的,根据 base64URL 进行转化&#xff0c…

uni-app 封装图表功能

文章目录 需求分析1. 秋云 uchars2. Echarts 需求 在 uni-app 中使用图表功能,两种推荐的图表工具 分析 在 Dcloud市场 搜索Echarts关键词,会出现几款图表工具,通过大家的下载量,可以看到秋云这个库是比较受欢迎的,其…

详细解读个性化定制大杀器IP-Adapter代码

Diffusion models代码解读:入门与实战 前言:IP-Adapter作为Diffusion Models最成功的技术之一,已经在诸多互联网应用中落地。介绍IP-Adapter原理和应用的博客有很多,但是逐行详细解读代码的博客很少。这篇博客从细节出发&#xff…

PHP JSON 教程

PHP JSON 教程 PHP 是一种广泛使用的开源服务器端脚本语言,而 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。PHP 提供了多种函数和库来处理 JSON 数据,使得在 PHP 应用程序中解析和生成 JSON 数据变得非常容易。本教程将详细介绍 PHP 中 JSON 的使用方法…

数据采集之scrapy框架2

本博文使用自动化爬虫框架完成微信开放社区文档信息的爬取(重点理解 scrapy 框架自动化爬 虫构建过程,能够分析 LinkExtractor 和 Rule 规则的基本用法) 包结构目录如下图所示: 主要代码: ( items.p…

WAPI认证过程如何实现?

WAPI(WLAN Authentication and Privacy Infrastructure)认证过程是通过一系列步骤来实现的,以确保无线局域网(WLAN)中设备的合法性和数据传输的安全性。以下是WAPI认证过程的详细实现步骤: 一、认证前的准…

从零开始的LeetCode刷题日记:746. 使用最小花费爬楼梯

一.相关链接 题目链接:746. 使用最小花费爬楼梯 二.心得体会 这道题还是动规五部曲。 1.首先是dp数组及其下标的含义,dp记录了每层楼梯对应的爬的方法,每个下标存储每个对应楼层。 2.然后是递归公式,这里的递归公式就不是简单…

深⼊理解指针(2)

目录 1. const修饰指针及变量 2. 野指针 3. assert断⾔ 4. 指针的传址调⽤ 一 const修饰指针及变量(const是场属性——不能改变的属性) 1 const修饰变量 那怎么证明被const修饰的变量本质还是变量呢? 上面我们绕过n,使…

每日科技资讯:2024年11月06日【龙】农历十月初六 ---文末送书

目录 1.OpenAI因算力瓶颈暂缓GPT-5发布 合作芯片开发寻求突破2.现在,𝕏 允许被你屏蔽的人继续查看你的帖子3.硬刚Intel与AMD!NVIDIA明年推出PC芯片4.苹果停止签署 iOS 18.0.1,不再允许从 18.1 降级5.Nvidia 加入道琼斯指数成份股 …

swoole扩展安装--入门篇

对于php来说,swoole是个强大的补充扩展。这是我第3次写swoole扩展安装,这次基于opencloudos8系统,php使用8.2。 安装swoole扩展首先想到的是用宝塔来安装,毕竟安装方便,还能统一管理。虽然获得swoole版本不是最新的&am…

layui xm-select的使用

一、文档 xm-select 二、使用 <div id"js-form-tags{$ke}{$index}" val"{$ke}"></div> <input type"hidden" class"selectkey" name"selectkey[]" value"{$ke}" /> function initSelect(id…

【大模型开发指南】llamaindex配置deepseek、jina embedding及chromadb实现本地RAG及知识库(win系统、CPU适配)

说一些坑&#xff0c;本来之前准备用milvus&#xff0c;但是发现win搞不了&#xff08;docker都配好了&#xff09;。然后转头搞chromadb。这里面还有就是embedding一般都是本地部署&#xff0c;但我电脑是cpu的没法玩&#xff0c;我就选了jina的embedding性能较优&#xff08;…

vue前端sku实现

this.value.skuStockList [];let skuList this.value.skuStockList;//只有一个属性时if (this.selectProductAttr.length 1) {let attr this.selectProductAttr[0];for (let i 0; i < attr.values.length; i) {skuList.push({spData: JSON.stringify([{key:attr.name,v…

pyspark基础准备

1.前言介绍 学习目标&#xff1a;了解什么是Speak、PySpark&#xff0c;了解为什么学习PySpark&#xff0c;了解课程是如何和大数据开发方向进行衔接 使用pyspark库所写出来的代码&#xff0c;既可以在电脑上简单运行&#xff0c;进行数据分析处理&#xff0c;又可以把代码无缝…

数据库基础(4) . 数据库结构

2.基础结构 2.1.结构及名称 数据库 database 表空间 tablespaces(Oracle) 表格 table 字段 column 记录 record 值 value 2.2.数据库 database 在配置文件中指定存放位置 # 设置mysql数据库的数据的存放目录 datadirD:\MySQL\mysql-8.0.16-winx64\data每个数据库对应…

Meme 币生态全景图分析:如何获得超额收益?

近期&#xff0c;BTC 再次突破 7 万美元大关&#xff0c;市场上贪婪指数再次达到 80&#xff0c;而 Meme 币往往是每次牛市冲锋的号角&#xff0c;比如 $GOAT 5 天内价格一度上涨超 1 万倍。通过对当前市场 TOP 25 Meme 币的交易数据分析&#xff0c;我们发现了几个值得关注的市…