HTTP 相关知识
1、HTTP协议
HTTP协议又称为(超文本传输协议),它是指用于WWW服务器传输文本到本地浏览器的传输协议。使得浏览器更加高效工作,并且使网络传输减少。
2、URL
URL(统一资源定位符),也就是我们俗称的“网址”,它是写在浏览器输入地址栏中。只要用于传输数据和建立连接。
2.1 结构说明
-
协议名:主要是约定了服务器和客户端之间通过什么格式进行通信。协议名不仅仅只有http,还有https(更加安全)等协议。
-
登录认证:访问该网站的用户名和密码(可存在),但是现在已经没有网站去使用这种方式去登录。
-
服务器地址:又是我们常见的位于网络层协议中的IP地址(也就是域名),域名通过DNS机制自动转化成IP地址。将网址设计出域名的样式是为了便于记忆。如下图,为百度的域名以及IP地址
-
服务器端口号:用来确定服务器上的一个具体的应用程序,其中http的端口号为80,https的端口号为443。端口号是可以省略不写(省略是因为自动生成了)。
-
带层次文件路径:每个路径就是对应服务器上的一个具体资源,路径的改变弹出的页面信息就是不用的。如果没有路径,默认就是根目录。类似于文件目录结构,如下图。
-
查询字符串(query String):使用问号分割路径和查询字符串,问号之后是开始查询字符串,以键值对的方式输出,其中键值对是可以有很多,具体根据程序猿自己开发决定。
-
片段标识符:一般用于在同一个网站内,进行模块之间的跳转,类似于(超链接),或者是word文档中的目录链接跳转。
3、HTTP的协议结构
http中请求和响应的结构,我们结合Fiddle抓包来进行查看——访问csdn
HTTP请求
由上图总结可以得到http请求的结构
首行:方法 + URL + 版本号
Header:请求的属性,冒号分隔的键值对,每组属性之间使用\n分割。当遇到空行时表示Header部分技术。
Body:空行之后的内容都是Body,Body允许为空字符串,当Header中出现Content-length属性表示Body的长度
HTTP响应
由上图总结可以得到http响应的结构
首行:版本号 + 状态码 + 状态码解释
Header:请求的属性,冒号分隔的键值对,每组属性之间使用\n分割。当遇到空行时表示Header部分技术。
Body:空行之后的内容就是Body,Body允许空字符串,当Header中出现Content-length时,表示Body的长度。其中当Body返回一个HTML代码时,说明这个HTML页面内容就在Body中
4、HTTP的方法
方法名 | 说明 | 支持的HTTP协议脚本 |
---|---|---|
GET | 获取资源 | 1.0 、1.1 |
POST | 传输实体主题 | 1.0 、1.1 |
PUT | 传输文件 | 1.0 、1.1 |
HEAD | 获取报文首部 | 1.0 、1.1 |
DELETE | 删除文件 | 1.0 、1.1 |
等等还有很多的方法,其中我们最常用的就是GET 和 POST方法
5、HTTP的状态码
类型 | 原因语句 | |
---|---|---|
1xx | 信息性状态码 | 接收的请求正在处理 |
2xx | 成功状态码 | 请求正常处理完毕 |
3xx | 重定向状态码 | 需要进行附加操作已完成请求 |
4xx | 客户端错误状态码 | 服务器无法处理请求 |
5xx | 服务器错误状态码 | 服务器处理请求出错 |
6、HTTP1.0到HTTP1.1到HTTP2.0的升级
6.1 HTTP1.0和HTTP1.1的区别
- 长连接:http1.1,默认开启长连接keep-Alive,在一定程度上弥补了HTTP1.0每次请求都需要创建连接的缺点。HTTP1.0需要使用keep-Alive参数来告知服务器来建立长连接。
- 缓存处理:在HTTP1.0中使用if_modified_Since,Expires来作为缓存标准。在HTTP1.1中,增加了更多的缓存策略:Entity tag ,if_Match ,if_None_Match,if_Unmodified_Since等
- 带宽优化:加入range头,可以请求一部分资源断点续传(201),发送header请求头,如果权限够返回100,否则返回401.
- Host头部处理:虚拟机存在共享IP,支持Host头域
6.2 HTTP1.1和HTTP2.0的区别
- 多路复用:HTTP2.0使用了多路复用的技术,做到同一个连接做到并发处理多个请求,而且并发请求的数量比HTTP1.1大了好几个两量级。
- 头部压缩:HTTP1.1不支持header的数据压缩,HTTP2.0采用HPACK算法对header的数据进行压缩,这样数据体积小,传输速度更开
- 服务端推送:服务器除了响应初次的服务器请求以外,还额外向客户端推送资源,无需客户端明确请求,这样就省去了重复请求的步骤
- 二进制“帧”:HTTP2.0通信的最小单位