计算机网络--应用层

应用层:
 直面程序员的一层,因为应用程序是程序员自己写的,因此应用层的协议都是程序员自己定的
自定义协议
 程序员自己根据自己应用的特点,定义协议(数据格式/数据描述信息)
eg:以一个简单的网络版计算机为例
 功能:客户端发送两个数字以及一个运算符给服务端,服务端获取到数据然后进行运算
int num1; int num2; char op;

  1. num1, num2, op ----将所有的数据转成字符串,使用特殊字符间隔;这时候就将数据按照指定协议组织起来了.
  2. 采用结构体构造二进制数据串
    struct cal_t{
    	int num1;
    	int num2;
    	char op;
    };
    

 序列化:将各个数据对象按照指定的协议组织成为持久化存储/数据传输的二进制数据串
 反序列化:将二进制数据传按照指定协议解析等到各个数据对象
 常见的序列化方式:json序列化/protobuf/二进制序列化
知名协议
HTTP协议: 超文本传输协议—早期专门用于传输超文本数据html,但是随着协议发展多元化,不限制数据格式
 网站-统一资源定位符:URL----在网络中唯一表示定位一个资源
 如何定位----URL中包含的元素:
  协议方案名称://认证用户名:认证密码@服务器IP地址:服务器处理进程端口/请求的资源路径?查询字符串#片段标识符
http://username:password@www.xxx.com:80/index.html
 服务器IP地址:

我们看得到不一定是IP地址,也可能是域名-服务器别名----通过域名解析服务器就能得到服务器的IP地址

 服务器端口:

web服务器默认http服务器端口是80端口,默认不显示

 /请求的资源路径:

资源在服务器上的路径,这里的/是http根路径,但是是一个服务器上的相对根目录,只是一个子目录

 查询字符串:

客户端提交给服务端的一些数据,有key=val&key=val形式的键值对组成
查询字符串中不能出现特殊字符,因为URL中特殊字符都有特殊含义,一旦提交的数据中有特殊字符,就会造成歧义,因此若提交的数据中有特殊字符,则需要进行数据转义
urlencode: url编码,将特殊字符每一个字节,转换为16进制的数字字符,并且使用%前缀做为转移表示
urldecode:url解码,在url中遇到%,则认为气候两个字符需要转移,将第一个字符转换成数字乘以16/左移4位,加上第二个字符转换的数字

片段标识符

html中的一个标签id,直接跳转到页面的某个位置

HTTP协议实现:
 抓包工具:wireshark / fiddler
  wireshark:网卡抓包工具,抓取流经网卡的所有数据流量----什么包都能抓
  fiddler:浏览器的代理工具,通过代理实现数据抓包-----专业的http抓包工具
 HTTP协议格式:

请求:
 首行: GET http://123.123.123.123/admin HTTP1.1 以空格进行间隔包含三个要素,并且最终以\r\n作为结尾
    请求方法:GET/POS/HEAD/DELETE/CONNECT/OPTION
     GET --请求实体资源,也可以通过url中查询字符串向服务器提交数据(数据不安全),但url长度有限制(各个服务器应用商的限制)
     POST --主要用于向服务器提交数据,提交的数据在正文中(数据安全)
      HEAD --类似于GET,相较于GET,HEAD只要响应头部,而不响应正文
   URL: http://123.123.123.123
    协议版本: HTTP1.1     0.9/1.0/1.1/2.0
   0.9: 这时候的http仅用于传输html数据,并且只有get请求,并且协议格式不完整
   1.0: 正式规定了http协议格式,并且增加了多种请求方式,并且支持了不同文件格式的数据流
   1.1: 在1.0的基础上增加了更多请求方式和头部描述信息,并且支持长连接
   2.0: 采用二进制流传输,并且进行多路复用,并且允许服务端主动推送数据
    短连接: http基于在传输tcp实现通信,短连接指的是建立连接,发送一个请求,得到响应后,则关闭连接
    长连接: 一次连接可以发送多条请求
 头部:描述本次请求的关键字段信息,由key-val形式的键值对组成,并且每个键值对以\r\n作为结尾
  Connection- -控制长短连接, Cache-control - -缓存控制,  User-Agent - -客户端属性, Accpet - -描述自己所能接收的数据属性, Content-length - - 描述正文长度, Content-Type - -描述符正文数据类型, Cookie
   Cookie: 早期http是短连接通信,是一个无状态协议,不会保存客户端状态,每次访问都需要进行登录,因此引入Cookie保存客户端状态。 Cookie中可以带有一些信息,持续在通信中描述客户端的通信状态,但是不够安全
 空行:间隔头部于正文,\r\n 接收http数据的时候,当连续接收两个\r\n\r\n(\r\n\r\n)的时候,则认为头部信息到此结束
  先获取完整头部,通过头部中的Content-Length获取正文长度,然后获取指定
 正文:提交服务端的数据
响应
 首行: HTTP/1.1 303 See other,   包含3个要素,以空格进行间隔,以\r\n作为结尾
  协议版本: 0.9/1.0/.1.1/2.0
  响应状态码: 表示本次的请求服务端做出的响应
   1xx:描述信息
   2xx:表示本次请求正确处理完毕
   3xx:重定向 - -你请求的资源在另一个位置,要求客户端重新请求新的位置; 301 - 永久 302 - 临时
   4xx:表示客户端请求错误; 400- -请求错误/ 404 - -表示请求的资源不存在
   5xx:表示服务端错误; 500- -服务器内部错误/ 502- -代理请求失败/无效响应/504- -代理请求超时
  状态码描述:对状态码的描述信息,可以是官方文档对应描述,也可以自定义
 头部:关于本次响应的一些关键字段描述信息,以key-val键值对组成,以\r\n作为结尾
  Transfer-Encoding:实体正文的传输方式
  Expires:缓存过期时间
  Location:重定向的新位置
  Set-Cookie:服务端通过Set-Cookie向客户端传递信息,会被保存在客户端浏览器的Cookie文件中
  Cookie:客户端通过Cookie文件读取数据通过cookie向服务端传递信息
Session:会话,服务端会为每个登录的客户端创建会话,在服务端描述一些信息(客户端身份信息,状态信息),保存在服务端,可以通过Cookie将session id返回给客户端,客户端每次通信都会通过cookie带又自己的session id;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值