HTTP
HTTP(全称"超文本传输协议")是一种应用最广泛的应用层协议;
文本=>字符串 超文本:可以传输文本,图片,语言等等其他的各种数据...
HTTP各种应用场景:
1.使用浏览器打开网页;
2.打开手机APP;
3.后端程序,都是"分布式/微服务"体系结构;
HTTPS可以认为是HTTP的升级版,和HTTP的差别在于引入了一层"加密层";
除了安全性之外,HTTP和HTTPS就是完全一样的;
HTTP协议是一种经典的"一问一答"式的模型:
客户端发一个请求,服务器返回一个响应;(一一对应)
---------------------------------------------------------------------------------------------------------------------------------
HTTP报文格式:
可以借助抓包工具,来观察到HTTP详细的请求/响应的详细情况.
TCP/UDP也是可以抓包的,日常开发中比较少抓,但是HTTP是经常抓的;
抓包:把通过网卡上的数据获取到,并解析出来;
代理又分为正向代理和反向代理;
正向代理:给客户端当代理;
反向代理:给服务器当代理;
压缩:在二进制的角度上对数据进行重新编码,保证信息量不变,体积缩小;
体积小了,在网络传输中消耗的带宽资源(最贵的硬件资源)就少了,就是用CPU资源换带宽资源;
---------------------------------------------------------------------------------------------------------------------------------
浏览器看到的网页,就是由HTML,CSS,JavaScript构成,返回一个HTML给浏览器就是HTTP非常经典的场景;
发送HTTP请求,就是往TCP socket中,按照一定格式,写入一段字符串;
收到HTTP响应,就是从TCP socket中,读出一段字符串再解析;
以下是一个HTTP请求的抓包结果:
首行
HTTP请求的方法(描述这个请求的动作) + URL访问的资源是什么 + HTTP的版本号
请求头(Header)
从第二行开始的若干行,一直到空行结束;
每一行都是一个键值对,键值之间使用": "分割;
HTTP中,请求头的键值对都有哪些,是HTTP标准规定的,不同的请求头都有特定的含义;
标准也允许用户自定义一些请求头;
空行
请求头的结束标志;
正文(body)
不是一定有的;一般是要提交的数据;
---------------------------------------------------------------------------------------------------------------------------------
以下是一个HTTP响应的抓包结果:
首行
版本号 + 状态码(成功[200]/失败/失败原因) + 状态码的描述;
响应头(Header)
从第二行开始的若干行,一直到空行结束;
每一行都是一个键值对,键值之间使用": "分割;
也是标准规定的,有的键值对只能出现在请求中,有的只能出现在响应中,有的都能出现;
空行
响应头的结束标志;
正文
对应响应来说,正文通常是HTML/CSS/JSON/JS/图片/音频/字体....
-------------------------------------------------------------------------------------------------------------------------------
URL(唯一资源定位符)
互联⽹上的每个⽂件都有⼀个唯⼀的URL,
它包含的信息指出⽂件的位置以及浏览器应该怎么处理它.
URL不是HTTP专属的,很多协议都会用到;
补充:URI(唯一资源标识符),可以简单的理解为URL是URI的一种实现;
URL结构组成
协议方案名:
指出URL是给哪个协议来服务的;
登录信息(认证):
这种身份认证方式已经废弃了,都是有个单独的登录页面;
服务器地址:
可以是IP也可以是域名;
服务器端口号:
不写端口号的时候,服务器会根据协议类型自动拼接一个端口号,不是随机分配空闲端口,描述的是服务器的端口,是固定的;
如果是HTTP协议,浏览器自动加上80端口; 如果是HTTPS协议,浏览器自动加上443端口;
带层次的文件路径:
确定服务器上的具体资源;