简介

  • C++服务器开发,后台开发基本理论知识

静态文件托管 是什么

在服务器环境中,静态文件托管指的是将静态文件(例如HTML、CSS、JavaScript、图像、视频等)通过HTTP协议提供给客户端。这意味着服务器会接收来自客户端的请求,并将请求的静态文件发送回客户端,使其能够在浏览器中进行显示或使用。

静态文件托管是一种简单有效的方式来提供网站或应用程序的静态内容,因为这些文件通常不需要在每次请求时进行处理或生成动态内容。

通常情况下,服务器会配置一个目录,称为静态文件目录(或文档根目录),该目录包含要提供给客户端的静态文件。当收到针对这些静态文件的HTTP请求时,服务器会检查请求的文件路径,并将相应的文件内容发送回客户端。

例如,如果您的服务器上的静态文件目录是/var/www/html,并且有一个名为index.html的文件,当用户在浏览器中访问您的服务器时,可以通过URL http://yourdomain.com/index.html 来请求该文件。服务器会将/var/www/html/index.html的内容发送回浏览器,使其能够显示该网页。

静态文件托管常用于简单的网站、单页应用程序(SPA)和服务端渲染的应用程序等场景。相比于动态内容生成,静态文件托管可以提供更快的响应速度,减轻服务器的负载,并且不需要在每个请求上进行处理。

对于静态文件托管,您可以使用各种服务器软件,如Apache、Nginx等,通过配置服务器软件的相关选项来指定静态文件目录和其他细节。

C++ 传输二进制数据

  • 二进制数据传输的本质
    • 首先明确,数据在计算机内存中的存储方式是二进制的,在进行数据传输的时候,从内存中读取出来的数据就是二进制的数据。
    • 因此,如果能够保证数据存储上的连续性的话,我们只需要告诉httplib,传输数据的指针地址是什么,传输数据的长度是多少即可。
  • 指针相关概念
    • C里面关于内存数据的操作需要两个条件,一个是指针,一个是长度
    • 针对连续的内存,可以通过指针+长度的方式来操作内存
  • float* 和 char* 类型的指针有什么区别
    • 本质上都是指向数据的存储地址,区别在于指针类型,以及读出数据时候的格式转换
    • float* 类型的指针,指针运算的时候,因为float是4个字节,需要转换成1个字节,因此需要size * 4
    • char* 类型的指针,指针运算的时候,因为char是1个字节,因此直接获取size即可

理解字节本质和二进制

  • 无论是互联网应用还是物联网应用,在网络传输层传输的其是都是二进制数据。因为现代通讯设备对信号处理都是用的数字电路,数字电路的输入输出只有两种状态,那就是高电平或者低电平,也就是对应二进制数据的1和0。
  • 按照一定的时序和时钟基准,就可以代表了不同的信息。

  • 网络传输中是按照字节传输的,而每个字节通常是按照8位二进制组成的。
  • 一个字节由8个二进制位组成,通常标准是高位在前,最低位序号是0,最高位序号是7。

  • 为什么叫二进制?
    • 生活中使用的数字计数是10进制的,因逢10进1而得名。那二进制也是因为逢2进1而得名的。
    • 一个字节的8位二进制实际就是一个计数标记,由8个位组合在一起表示。因为每个位只能有0和1两种变化,所以要计数到2的时候就得进位了。

理解十六进制

  • 二进制的写法,一个字节要写8次,显然很不方便,也不好读,口算成十进制数有很大难度。那么十六进制标准书写是两个字符表示一个字节,等宽制的,便于编辑和浏览。
  • 更重要的是与二进制的换算刚好将8位分成两部分,每四位对应一个字符,两个字符拼在一起代表了完整的8位

  • 十六进制,顾名思义应该是逢十六进一,但是阿拉伯数字只有0-9,那么逢十六进一至少要能表示到15才可以。因此十六进制在0-9的基础上又增加了A-F六个字母分别代表10-15。对应十进制值
    • 00 表示 0
    • 0A 表示 10
    • 0F 表示 15
    • 10 表示 16(因为满16就进位了)
  • 一个字节的8个位四四分开,分别对应前后两个16进制字符,就很快可以换算出来

HTTP 文件上传

  • 在HTTP中,我们要上传文件的时候一般都是通过Form实现的,对于Form有个属性可以用于定义提交的编码方式: enctype,它的可选值有
    • application/x-www-form-urlencoded: 默认的类型
    • multipart/form-data : 允许通过file类型的用于上传文件
    • text/plain : 不常用的方式,直接将数据传输到后端