【Java ee初阶】http(1)

news2025/5/17 5:17:54

HTTP

全称为“超文本传输协议”,由名字可知,这是一个基于文本格式的协议,而TCP,UDP,以太网,IP...都是基于二进制格式的协议。

如何区别该协议是基于哪种格式的协议?

形如这种协议格式,按照xxx个字节,xxx个比特位,这样的方式来安排的妥妥的就是二进制(不涉及任何字符)

超文本:文本包含了一些更复杂的内容,例如图片、视频、音频、特殊字体、链接......

HTTP诞生于1991年,同时,Python,Linux,Vim,Qt(C++知名的库)同时诞生于这一年。

HTTP的各种版本

HTTP是应用层协议,传输层依赖于TCP来进行实现。(HTTP2.0及以前,是基于TCP;到了HTTP3.0,基于UDP)

因为TCP的传输效率更好,但是他的可靠性没有UDP好

HTTP协议,是一个非常经典的“一问一答”模型。

关心HTTP交互过程的时候,应该注重两方面:一方面需要关心HTTP请求是什么样子的,另一方面要关心HTTP响应是什么样子的。而上述二者就构成了HTTP的协议格式。

HTTP 请求格式
1. 首行 (请求的第一行)
2. 请求头 (header) 从第二行开始, 往后若干行
3. 空行 (请求头的结束标记)
4. 请求正文 (body) [有的请求有, 有的没有]

HTTP 响应,可能被压缩的
Content-Encoding: gzip

本来是文本,压缩了就变成二进制了。

网络通信过程中,最贵的硬件资源,就是网络带宽

直接把原始数据进行传输,比较大,消耗的网络带宽就多了。

可以把数据进行压缩,压缩之后数据就变少了,通过网络传输的内容也少了。
数据到了对端再通过 CPU 来进行解压缩

压缩 / 解压缩
压缩包 (rar, zip....) (一系列的压缩算法)

一个不太恰当的例子
比如你的数据
aabbbccccccdddd
压缩后
2a3b4c5d


点击这个条条就能解压缩

HTTP 响应格式
1. 首行
2. 响应头 (header)
3. 空行 (响应报头的结束标记)
4. 正文 (body)
(当前的正文部分就包含了网页的 HTML)

URL

方法(method)    URL                                                                                                     版本号

URL:统一资源定位器,描述了网络上的某个资源的具体位置,需要明确访问网络上的哪个资源

登录信息(认证):淘汰了,现在已经没有网站采取这种认证方式了。30年前,采取这样的方式来进行身份认证。

服务器地址:服务器地址

服务器端口:服务器的端口号

带层次的文件路径:path,一个机器上的一个服务器程序,可能管理着很多资源,这些资源可能是真实的文件,还可能是一些“虚拟的”“动态生成的”资源(根据请求,计算出来的响应)

查询字符串:query string。请求中的参数,通过参数进行进一步的解释说明。是键值对格式,=分割键和值,通过&分割多个键值对

片段标识符:标识网页的某个部分,实现“页面内跳转功能”。文档类网站会带有这个。

完整的 URL 包含了很多信息
重点关心的主要是 4 个部分
1) IP
2) 端口
3) 路径
4) 查询字符串


https://www.sogou.com/ 只有 IP 地址, 其他的好像都没有。
https://cn.vuejs.org/guide/introduction.html#single-file-components 没有端口, 也没有查询字符串
一个 URL 中, 有些部分是可以省略的

如果没有端口号, 浏览器会给一个默认值

一次通信, 需要
源 IP (浏览器客户端, 端口号, 系统分配的空闲端口)
源端口
目的 IP
目的端口 (URL 中的端口, 描述了你访问的服务器的端口, 不是你浏览器客户端的端口)


URL 中目的端口如果不写, 浏览器会给默认值. 根据协议类型确定.
http:// => 端口给 80 (http 服务器的端口号 也是作为 "知名端口号")
https:// => 端口给 443 (https 服务器的端口号也是 "知名端口号")

带层次的路径也能省略, 省略之后, 其实是一个 /
表示 "根目录"
访问一个服务器管理资源/目录 中的最顶层的目录/资源
通常就对应到一个网站的主页

query string 本来就不是必须的. 都属于程序员自行约定的

片段标识符, 也可以省略(需要页面内跳转, 才设定, 不需要的话就可以省略了)
程序员代码中自定义的(前端内容)

URL encode

https://cn.bing.com/search?q=%E5%93%94%E5%93%A9%E5%93%94%E5%93%A9&qs=n&form=QBRE&sp=-1&lq=0&pq=%E5%93%94%E5%93%A9%E5%93%94%E5%93%A9&sc=12-4&sk=&cvid=7CD8656EDA4749B08D5958CCF80B8679


url 的 query string 中的 value 部分, 可能需要进行 "转义" 的.

query string 的内容, 程序员可以自定义 (尤其是 value)
如果 value 中包含特殊符号, 就可能使 url 的解析出现错误.

url 中的特殊符号有特定含义.

中文也需要转义 (中文通过 utf8/gbk 之类的编码格式表示的, 有可能某个汉字的
utf8/gbk 编码中的某个字节, 恰好和某个特殊符号的 ascii 码相同了 还是可能造成误会)

转义的规则非常简单
把特殊符号的 ascii 取出来, 按照字节维度, 插入一些 %

上述 utf8 的编码解码 过程不需要手动实现
都有专门的库来进行


如果需要放中文/符号, 需要主动进行 url encode
否则, 浏览器/服务器可能解析失败

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

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

相关文章

day18-数据结构引言

一、 概述 数据结构:相互之间存在一种或多种特定关系的数据元素的集合。 1.1 特定关系: 1. 逻辑结构 2.物理结构(在内存当中的存储关系) 逻辑结构物理结构集合,所有数据在同一个集合中,关系平等顺…

我开源了一个免费在线工具!UIED Tools

UIED Tools - 免费在线工具集合 最近更新:修改了文档说明,优化了项目结构介绍 这是设计师转开发的第一个开源项目,bug和代码规范可能有些欠缺。 这是一个功能丰富的免费在线工具集合网站,集成了多种实用工具,包括 AI …

什么时候可以开始学习深度学习?

咱们先来聊聊机器学习和深度学习的关系~ 这个问题其实挺常见的,之前我也跟不少同事、同学聊过。最近有好几个同学也聊过。 简单说,深度学习是机器学习的一个子集,两者不是并列关系,而是“包含”关系。 你可以这么理解&#xff…

初学python的我开始Leetcode题8-5

提示:100道LeetCode热题-8-5主要是二叉树相关,包括三题:路径总和 III、二叉树的最近公共祖先、二叉树中的最大路径和。由于初学,所以我的代码部分仅供参考。 前言 二叉树完结撒花~ 下一次的图论会是一些有趣的应用案例~ 提示&am…

构建RAG混合开发---PythonAI+JavaEE+Vue.js前端的实践

写在前文:之所以设计这一套流程,是因为 Python在前沿的科技前沿的生态要比Java好,而Java在企业级应用层开发比较活跃; 毕竟许多企业的后端服务、应用程序均采用Java开发,涵盖权限管理、后台应用、缓存机制、中间件集成…

08.webgl_buffergeometry_attributes_none ,three官方示例+编辑器+AI快速学习

本实例主要讲解内容 这个Three.js示例展示了无属性几何体渲染技术,通过WebGL 2的gl_VertexID特性和伪随机数生成算法,在着色器中动态计算顶点位置和颜色,而不需要在CPU端预先定义几何体数据。 核心技术包括: WebGL 2的顶点ID特…

26考研 | 王道 | 计算机组成原理 | 一、计算机系统概述

26考研 | 王道 | 计算机组成原理 | 一、计算机系统概述 文章目录 26考研 | 王道 | 计算机组成原理 | 一、计算机系统概述1.1 计算机的发展1.2 计算机硬件和软件1.2.1 计算机硬件的基本组成1.2.2 各个硬件的工作原理1.2.3 计算机软件1.2.4 计算机系统的层次结构1.2.5 计算机系统…

LeetCode100.2 字母异位词分组

观察题目&#xff0c;需要把strs中的元素按照字母进行归类&#xff0c;一个朴素的思路是&#xff1a;遍历strs&#xff0c;对每个元素排序后插入哈希表中&#xff0c;随后再遍历一遍表将其转化为vector<vector<string>>。 class Solution { public:vector<vect…

显示的图标跟UI界面对应不上。

图片跟UI界面不符合。 要找到对应dp的值。UI的dp要跟代码里的xml文件里的dp要对应起来。 蓝湖里设置一个宽度给对应上。然后把对应的值填入xml. 一个屏幕上的图片到底是用topmarin来设置&#xff0c;还是用bottommarin来设置。 因为第一节&#xff0c;5&#xff0c;7 车厢的…

高并发内存池(三):TLS无锁访问以及Central Cache结构设计

目录 前言&#xff1a; 一&#xff0c;thread cache线程局部存储的实现 问题引入 概念说明 基本使用 thread cache TLS的实现 二&#xff0c;Central Cache整体的结构框架 大致结构 span结构 span结构的实现 三&#xff0c;Central Cache大致结构的实现 单例模式 thr…

在Taro中开发一个跨端Svg组件,同时支持小程序、H5、React Native

Taro系列中一直没有跨端的绘图工具&#xff0c;小程序端支持canvas但是不支持svg&#xff0c;RN端有 react-native-svg 支持svg&#xff0c;但是没有很好原生的canvas插件&#xff0c;社区的canvas都是基于WebView实现的&#xff0c;或者skia&#xff0c;这个插件的书写方式和c…

【办公类-100-01】20250515手机导出教学照片,自动上传csdn+最大化、最小化Vs界面

背景说明&#xff1a; 每次把教学照片上传csdn&#xff0c;都需要打开相册&#xff0c;一张张截图&#xff0c;然后ctrlV黏贴到CSDN内&#xff0c;我觉得太烦了。 改进思路&#xff1a; 是否可以先把所有照片都上传到csdn&#xff0c;然后再一张张的截图&#xff08;去掉幼儿…

Python零基础入门到高手8.4节: 元组与列表的区别

目录 8.4.1 不可变数据类型 8.4.2 可变数据类型 8.4.3 元组与列表的区别 8.4.4 今天彩票没中奖 8.4.1 不可变数据类型 不可变数据类型是指不可以对该数据类型进行原地修改&#xff0c;即只读的数据类型。迄今为止学过的不可变数据类型有字符串&#xff0c;元组。 在使用[]…

深度学习入门:深度学习(完结)

目录 1、加深网络1.1 向更深的网络出发1.2 进一步提高识别精度1.3 加深层的动机 2、深度学习的小历史2.1 ImageNet2.2 VGG2.3 GoogleNet2.4 ResNet 3、深度学习的高速化3.1 需要努力解决的问题3.2 基于GPU的高速化3.3 分布式学习3.4 运算精度的位数缩减 4、深度学习的应用案例4…

使用Scrapeless Scraping Browser的自动化和网页抓取最佳实践

引言&#xff1a;人工智能时代浏览器自动化和数据收集的新范式 随着生成性人工智能、人工智能代理和数据密集型应用程序的快速崛起&#xff0c;浏览器正在从传统的“用户互动工具”演变为智能系统的“数据执行引擎”。在这一新范式中&#xff0c;许多任务不再依赖单一的API端点…

java数组题(5)

&#xff08;1&#xff09;&#xff1a; 思路&#xff1a; 1.首先要对数组nums排序&#xff0c;这样两数之间的差距最小。 2.题目要求我们通过最多 k 次递增操作&#xff0c;使数组中某个元素的频数&#xff08;出现次数&#xff09;最大化。经过上面的排序&#xff0c;最大数…

物联网无线传感方向专业词汇解释

涡旋电磁波(VEMW)&#xff1a;一种具有轨道角动量的电磁波&#xff0c;其特性在于能够在传播过程中携带额外的相位信息&#xff0c;从而增加通信系统的容量和灵活性。波前&#xff1a;波动传播过程中&#xff0c;同一时刻振动相位相同的所有点构成的几何曲面&#xff0c;代表波…

Maven 插件参数注入与Mojo开发详解

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;精通Java编…

2024年全国青少年信息素养大赛——算法创意实践挑战赛复赛真题(小学组)——玫瑰花地的面积

2024年全国青少年信息素养大赛——算法创意实践挑战赛复赛真题(小学组)——玫瑰花地的面积 上面试卷可点下方&#xff0c;支持在线编程&#xff0c;在线测评&#xff5e; 2024年全国信息素养大赛 算法创意实践挑战赛复赛(小学组)_c_少儿编程题库学习中心-嗨信奥 5月17号 全国青…

【补充笔记】修复“NameError: name ‘ZhNormalizer‘ is not defined”的直接方法

#工作记录 一、问题描述 在运行CosyVoice_For_Windows项目时&#xff0c;出现以下报错&#xff1a; File "F:\PythonProjects\CosyVoice_For_Windows\cosyvoice\cli\frontend.py", line 74, in __init__ self.zh_tn_model ZhNormalizer(remove_erhuaFalse, fu…