HTTP和HTTPS
HTTP协议
HTTP处于TCP/IP五层协议栈的应用层,HTTP协议在传输层呢个是基于TCP的(详细的说,HTTP/1 HTTP/2是基于TCP,最新版本HTTP/3是基于UDP,但是当下互联网绝大部分都是HTTP/1.1)
应用层协议则是站在程序应用的角度,要对传输的数据进行具体的使用。
协议格式:数据具体是怎么组织的。
HTTP是一个文本格式的协议(不需要去理解具体的二进制位,而只是理解文本的格式即可)
HTTP请求
1.组成
请求分成4各部分
- 请求行(首行),包含三个部分 1)HTTP的方法,方法大概描述了这个请求想干啥,GET的意思就是想从服务器获取到某个东西 2)URL,描述了要访问的网络上的资源具体是在哪 3)版本,HTTP/1.1表示当前使用的HTTP的版本是1.1(1.1是当下最主流的版本,还可能是1.0/2/3)
- 请求头(header),包含了很多行,每一行都是一个键值对,键和值之间用:,空格来分割。这里的键值对个数是不固定的(有可能多,也有可能会少),不用的键和值标识的含义也有不同。
- 空行 相当于请求头的结束标记,类似于 链表的 null
- 请求正文(body) 可选的不一定有
详解
1)URL
网络上唯一资源的地址符,既要明确主机是谁,又要明确是主机上的那个资源
- 协议方案名:描述了当前这个URL是给那个协议来使用的,http://给HTTP用的,https://给HTTPS用的,jdbc:mysql://给jdbc:mysql使用的
- 服务器地址:当前要访问的主机是啥,这里可以是一个IP地址也可以是域名
- 服务器端口号:当前要访问的主机上的那个应用程序(端口号大部分情况下是省略的),省略的时候不是说没有,而是说浏览器会自动赋予一个默认值。对于HTTP开头的URL就会使用80端口作为默认值,对于HTTPS开头的URL就会使用443端口作为默认值。
- 带层次的文件路径:描述了电脑前要访问的服务器的资源是啥。虽然请求中的URL写的是一个文件路径,但是不一定是服务器就真的存在一个对应的文件,这个文件可能是一个真实的在磁盘上存在的文件,也可能是虚拟的有服务器代码构造的动态数据。
- 查询字符串:本质上是浏览器/服务器,给服务器传递自定义的信息,相当于对获取到的资源提出了进一步的要求,查询字符串的内容本质上也是键值对结构,完全是程序员自己定义的,查询字符串和路径之间使用?来分割。
- 片段标识符:描述了要访问当前html页面的中的具体的字部分,能够控制浏览器