初识HTTP


一、HTTP是什么?

处于应用层的协议

应用层:客户端和服务端的应用程序,所在的网络分层,这样两个程序处于应用层(网络分层的同一层),需要使用相同的应用层协议(http就是应用层其中一种协议)
协议:http自己的文本格式

HTTP诞生于1991年,目前已经发展为最主流使用的一种应用层协议
目前我们主要使用的还是HTTP1.1和HTTP2.0
对于在浏览器访问一个资源(网页、图片、js、视频…)来说,就是基于http数据包的格式,从主机A的某个进程传输到主机B的某个进程
A和B可以是一个,也可以是不同的

超文本传输协议:可以传输文本及其他格式的数据资源,如图片、音乐、视频等

关于文本和二进制数据说明:

文本其实只是带编码的二进制数据
所以其实是可以互相转换的
1.Java中,String有getBytes(“编码”)就可以转换字符串为二进制数据
2.new String(字节数组,“编码”)可以转换二进制数据为字符串
http是属于文本格式,但是内部可以包含一些二进制数据

二、理解客户端和服务端交互的过程

客户端:浏览器进程
服务端:web服务器进程

浏览器输入www.sogou.com
在这里插入图片描述

三、HTTP协议格式

HTTP是一个文本格式的协议,可以通过Chrome开发者工具或者Fiddler抓包,分析HTTP请求/响应的细节
网络抓包:网络通信时,抓取传输的请求和相应数据包

  1. 开发者工具,网络面板:没有http协议原生格式的内容,还可以直接抓https包
  2. fiddler:可以看http原生格式的数据包

抓https的包需要配置一下:tools->options->
在这里插入图片描述
关于fiddler:
在这里插入图片描述
http协议
在这里插入图片描述
https协议
在这里插入图片描述

四、URL

1.认识URL

标识网络中某个资源的路径
格式:协议名://服务器地址:服务器端口号/带层次的资源路径?查询字符串
如mysql jdbc中的url:
jdbc:mysql://localhost:3306/test?useUnicode=true&characterEcoding=utf-8&useSSL=false
访问web资源:

  1. 浏览器上,可以不输入协议名
  2. 服务器路径,可以使用ip,或域名

1.ip不太方便记忆,使用域名更方便
2.还有一个好处:如购买一个阿里云服务器(提供公网的主机使用权)
切换为腾讯云服务器后,用户还是使用同样的域名(切换域名绑定的ip就行)

ping是测试某个主机能否访问到的一种手段
查看到域名,真实访问的时候,是哪个ip
在这里插入图片描述
ping ip地址也可以
在这里插入图片描述

  1. 端口号:浏览器不输入端口号,http端口默认使用80端口,https默认使用443端口
  2. 带层次的资源路径:标识在某个服务器中,具体某个资源的路径,如果没有输入资源路径,就是访问/(也称为某个web应用的根路径)
  3. 查询字符串:queryString

起的作用,是某个资源,不同条件下的数据
比如:教务系统获取某个学生的网页
传入不同的userId,就可以获取到不同的学生信息
queryString中的内容是键值对结构(键=值),其中key和value的取值个数和内容,完全由程序员自己约定,多个键值对之间&间隔(key1=value1&key2=value2)
前端(js代码)发送的时候,携带约定的键,后端(服务器)接收的时候,解析约定的键

  1. URL中的可省略部分

1.协议名:可以省略。省略后默认为http://
2.ip地址/域名:在HTML中可以省略(比如img,link,script,a标签的src或者href属性),省略后表示服务器的ip/域名与当前HTML所属的ip/域名一致
3.端口号:可以省略,省略后如果是http协议,端口号自动设为80;如果是https协议,端口号自动设为443
4.带层次的文件路径:可以省略,省略后相当于/,有些服务器会在发现/路径的时候自动访问/index.html
5.查询字符串:可以省略
6.片段标记:可以省略

2.关于URL encode

浏览器会自动给我们url进行编码:

  1. 地址栏输入url
  2. html、css里边,引入外部资源url(如js、css、图片、视频等)

如果url中包含特殊字符、中文、空格等,都会转义,再放在http协议的数据包中,再发送http请求
在这里插入图片描述
url encode(url编码): 将里边中文,空格等转换成16进制
url encode(url解码): 将url中16进制数据转换为原始的中文、空格

浏览器输入本地的一个html文件路径,其实也是一个本地文件访问的url格式
所以html中,引入一个中文的外部文件,可能有问题
还比如说js中,img src==“有中文”(保存url编码后的内容)可能结果就不是预期那样

因此需要注意:

前端代码引入url直接使用中文空格特殊字符是可以的
获取url,就需要小心,可能需要解码
js中:img.src属性中,保存的其实是编码后的url
后端:获取到url,也需要解码
假如需要获取url中的内容,且这部分内容是带中文特殊字符的,就需要考虑解码

关于url的长度问题:

浏览器和web服务器,可以配置url最大长度,如果没配置,就使用默认的长度

五、HTTP协议格式

在这里插入图片描述
请求:

  • 首行(请求行): ①请求方法 ②url ③HTTP版本号;响应行/状态行: ①HTTP版本号 ②状态码 ③状态码描述
  • header头(请求头/响应头): 多个键值对的内容(标识http协议的属性),每个键值对为:键:值(冒号后边规范上最好有一个空格),多个键值对之间是 换行符 间隔

键:http协议中,有规定http标准的header键,但是程序员也可以自己约定header键
程序员自己决定需要使用哪些header键

  • 空行: header结束,一直读取到空行,就可以解析到header
  • body(请求正文/响应正文): 请求携带的数据

例如gitee的登陆页面:
在这里插入图片描述
这部分数据是任意格式,那服务器接收到以后,如何解析呢?
在这里插入图片描述
一般来说,请求正文的格式,常用的是表单格式(传数据到服务端)、图片、视频(上传这些文件到服务器)等文件格式
响应正文的格式,常用的是text/javascript,text/css,text/html(返回网页,css样式文件,js文件)图片,视频等文件(客户端就可以使用文件:如图片渲染出来,播放视频,下载文件)
还有一种常见的格式application/json(传送一些数据到对方),请求和响应都常用(和js对象的格式差不多,只是键需要加双引号)

请求:一般就是输入一些内容后,提交数据到服务端
响应:一般就是服务端返回一些数据,客户端js代码获取响应数据,然后填充到html中

猜你喜欢

转载自blog.csdn.net/m0_51405559/article/details/122862336