HTTP初识
HTTP
HTTP是处于**++网络应用层的超文本++**传输协议
超文本?那跟普通的文本有什么区别呢
- 文本:字符串
- 超文本:HTTP不仅只限于文本传输,还能传输图片、视频、音频、字体,且以二进制的形式来传输
另外,HTTP在传输层中主要依赖TCP的协议 ,但HTTP 3.0 版本开始就以UDP协议传输------主要是为了传输效率考虑
那HTTP一般能应用在什么场景呢?
-
web开发中:负责网页前端与后端的通信
-
移动端APP:负责建立与服务器后端的通信
-
分布式系统的服务器之间的调用,这种应用近年来逐渐多了起来
在以前的服务器之间的调用一般都是基于 TCP 或者 UDP + 自定义协议的方式来实现(如protobuf),这是Fiddler中抓包的其中一个网卡内容
随着时代变迁,Java版本的微服务兴起,研究出了一套SpringCloud框架应用于服务器之间的调用就直接使用HTTP,实现与SpringMVC的无缝对接,HTTPS也是基于HTTP,引入了"加密层"实现的
了解完了HTTP的历史,那就继续了解HTTP的性质
HTTP是典型的"一问一答"模型,即客户端发出一个请求,服务器就返回一个响应。但其实客户端与服务器之间的交互方式不仅仅只有这一种形式,还有一问多答、多问一答,多问多答的交互模型,以下是它们在应用之间的区别
- 一问一答:HTTP
- 一问多答:下载一个大的文件、流式传输
- 多问多答:远程桌面(toDesk)
另外,HTTP也是不断发展的,比如现在的大模型,大多数都是采用流式传输的形式反馈,流式传输就是基于HTTP实现的"一问多答"的模式
既然HTTP是在应用层实现的传输协议,那也会有对应的报文格式,以客户端的角度来说有HTTP请求,服务器则有HTTP响应
-
HTTP请求
-
HTTP响应
从图中就能清楚的了解HTTP的请求和响应的框架,其他的都很容易理解,那HTTP请求中的URL是什么来的?既然叫唯一资源定位符,那定位了什么?接着看下去
URL
唯一资源定位符,用来标识网络上的一个资源的位置,其实URL不止在网络上,它是个通用的概念,很多协议都会用到URL,例如在JDBC中也能见到

那URL的格式一般都是怎么样的呢?我在华为的技术知识网页找到了关于URL格式的介绍以及参数解释
看到解释图我们会有一个疑问------ ?query 又是何方神圣
?query string
它是查询字符串,也是键值对结构的数据,其中 & 来分割键值对,= 分割键和值
例如上述的?name=tom&age=20
就分为了两个键值对分别是name=tom
和age=20
HTTP中会有很多的键值对,其中就包含query string和header里的键值对,那他们两有什么区分?
- query string 的键值对,是程序员自定义,在开发的时候通过前后端的程序员对接,就能确定某些query string的定义
- header的键值对是HTTP协议里就定义好的
urlencode
对于query string来说,有时候是需要进行encode转码,因为URL中包含了许多特殊的符号,都是有特定的含义
query string作为URL的一份子,如果在程序员定义的时候也包含了这些特殊符号,可能就会导致浏览器解析失败,无法正确地跳转
所以只要是包含了标点符号或者中英文字符,都要转义
其中中文字符的转义又需要特定封装以下------由于中文字符包含了多个字节,以utf8来讲,如果转义后的字节恰好和某个特殊符号的ascii码值一样就不好了
所以要把转义的内容的每个字节拿出来,使用十六进制标识,同时每个字节都要加上%

除此之外,我们还没有讲到HTTP的方法,接着看下去
方法-Method
在HTTP中,方法是请求中的一部分,表达要"做一个什么动作"

其中GET、POST是最常见的,其次就是PUT和DELETE,通过Fidder抓包HTTP请求也能看出大多数都是GET和POST方法

这次的HTTP初始就暂时讲到这里 后续会更进一步地拓展
希望对看到这里的你有所帮助,祝愿身体健康~(∠・ω< )⌒★