网络基础
1.应用层
程序员写的满足我们日常需求的网络程序,都是在应用层。
1.1HTTP协议的认识
应用层协议是我们程序员自己定义的,大佬们定义的HTTP(超文本传输协议)就是其中之一。我们平常看到http://…这是非完整的网址,有时也可以看到https,这是在HTTP协议基础上加密而成的。
URL:俗称网址(统一资源定位符)
一个较为完整的URL应该是如下的:
协议方案名称://用户名:密码@服务器地址:端口号/请求资源路径?查询字符串#片段标识符
- 登录信息:就是用户名与密码,但是现在一般看不到,其破坏隐私性。
- 服务器地址:其实就是IP地址转化的,又称域名,是为了方便记忆。
- 服务器端口号:默认端口号。
- 带层次的文件路径:dir是一个标识符,请求资源路径,’/'并非根目录,只是相对路径。
- 查询字符串:给服务器提交数据。
- 片段标识符:标识页面位置。
1.2URL解码与编码
查询字符串中若是出现特殊字符,则有可能与URL中间隔符产生歧义导致URL解析失败 。
编码:将需要转码的字符串转成16进制,然后从右向左,取4位(不足四位直接处理),每2位做一位,前面加上%,编码成%xy格式
解码:当遇到%,则认为紧跟其后的两个字符需要转码,将第一个字符转换为数字左移4位与第二个字符转换后的数据相加。
解码与编码是逆过程
1.3HTTP协议格式
1.3.1 http请求
- 请求首行:请求方法+URL+协议版本(0.9,1.1, 1.0 ,2)
- Header:请求的属性,冒号分割的键值对,每组属性之间使用\n分割,遇到空行表示Header部分结束
- Body:空行后面的内容都是body,body允许为空字符串,如果body存在,则在Header中会有Content-Length属性来标识body的长度。
(头部以一个个key-value组成的键值对,并且各个键值对之间以\n作为间隔,通过\r\n识别头部与正文并作为头部与正文的间隔)
1.3.2 http响应
- 响应首行:版本号+响应状