ECS云服务器简单使用方法以及linux下c++socket搭建web服务器

简介: ECS云服务器使用感受;关于linux下c++socket套接字搭建web服务器的坑:http响应体与跨域请求

ECS云服务器使用感受

因为在学校的一门课程的大作业选择了搭建一个web服务器,于是便想找个云服务器。然后听人推荐就选择了阿里云,正好学生免费,且有良好的新手引导,综合体验还是不错的。
有一说一,要是想使用linux的话,ECS还是值得玩一下的。而且使用阿里云的ecs服务器比自己搭建虚拟机要省事很多,很多设置、操作在控制台里都能搞定,也不怕玩坏。而且只要是联网了就能登录,要是自己的虚拟机想要非宿主机登录的话需要进行很麻烦的配置,而且没有公网ip,出了局域网就用不了。唯一不如自己虚拟机的就是必须要联网,但是现在谁还没个网络,谁写代码不需要上网呢?(笑)
总之,虽然我用的是c++来搭建web服务器(纯纯的折磨自己了),但是阿里云的体验还是不错的。

linux下c++socket搭建web服务器以及一些坑

使用c++搭建web服务器真的折磨,关键是网上的资料也不多,踩坑了要自己想办法解决,大大减低了开发速度。
不过c/c++搭建web服务器最大的优点就是自由,只要掌握了http协议,就可以随心所欲地解析请求,然后随心所欲地返回http响应。毕竟用socket搭建web服务器就是建立tcp连接,读取请求,然后在发回响应(http响应结构的字符串)

踩的坑之一——文本结束符:

sizeof()这个函数是返回一个变量以字节为单位的大小,包括文本结束符'\0',但是'\0'这个字符在浏览器里是乱码:
假设这样写http响应体:

//已经返回了http响应头
//现在返回http响应体
char body[]="{\"user_id\":1,\"password\":123}";
write(clnt_sock,body,sizeof(body));
close(clnt_sock);

但在了浏览器中是这个样子的:
错误json.jpg
可以看到,浏览器中响应体末尾多了个null。
这就是因为write函数把body的文本结束符'\0'也返回去的结果。

如果响应体是html等文本类型可能不会有什么影响,但是要是想返回一个json数据的话,返回的'\0'会影响前端的解析。

“我这里(前端)拿到的响应体格式是字符串而不是json!”(来自于负责前端的同学)。

所以最好不要把字符串的文本结束符给返回给请求方。

只需把write函数三个参数改为sizeof(body)-1,少写回一个字符,便可解决。
注意http响应头中的Content-Length要与响应体的长度一致*

char body[]="{\"user_id\":1,\"password\":123}";
write(clnt_sock,body,sizeof(body)-1);
close(clnt_sock);

这样浏览器就能拿到正确的json格式的字符串
正确json.jpg

注意:用std::string的话,string的length()函数返回值不包含'\0'

std::string body="{\"user_id\":1,\"password\":123}";
write(clnt_sock,body,body.length());
close(clnt_sock);

跨域请求:

浏览器会对跨域请求进行拦截,这是在http响应头中加上Access-Control-Allow-Origin:、Access-Control-Allow-Methods:之类的头部字段和你想要给的值就行了。
浏览器可能会先发送一个OPTIONS请求,这是也需要对该请求响应。

以下为一个http响应样式:

HTTP/1.1 200 OK\r\nContent-Length:28\r\n
Content-Type:application/json;charset=utf-8\r\n
Access-Control-Allow-Origin: *\r\n
Access-Control-Allow-Methods: POST,GET,OPTIONS\r\n
Access-Control-Allow-Headers: client_id, Authorization, Access-Control-Allow-Headers, Origin, Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers\r\n
Connection:close\r\n
\r\n
{"user_id":1,"password":123}

Content-Type为json,编码方式为utf-8;
三个Access字段跨域请求时需要
Connection表明关闭tcp连接

相关实践学习
通义万相文本绘图与人像美化
本解决方案展示了如何利用自研的通义万相AIGC技术在Web服务中实现先进的图像生成。
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情: https://www.aliyun.com/product/ecs
相关文章
|
7月前
|
弹性计算 搜索推荐 异构计算
阿里云服务器多少钱一年?亲自整理ECS、轻量和GPU服务器租赁价格表
2025年阿里云服务器优惠汇总:轻量应用服务器2核2G 38元/年起,ECS 2核2G 99元/年,2核4G 199元/年,4核16G 89元/月,8核32G 160元/月,香港轻量25元/月起,新老用户同享,续费同价。
1892 158
|
7月前
|
弹性计算 运维 安全
阿里云轻量应用服务器与云服务器ECS啥区别?新手帮助教程
阿里云轻量应用服务器适合个人开发者搭建博客、测试环境等低流量场景,操作简单、成本低;ECS适用于企业级高负载业务,功能强大、灵活可扩展。二者在性能、网络、镜像及运维管理上差异显著,用户应根据实际需求选择。
553 10
|
7月前
|
弹性计算 运维 安全
区别及选择指南:阿里云轻量应用服务器与ECS云服务器有什么区别?
阿里云轻量应用服务器适合个人开发者、学生搭建博客、测试环境,易用且性价比高;ECS功能更强大,适合企业级应用如大数据、高流量网站。根据需求选择:轻量入门首选,ECS专业之选。
461 2
|
7月前
|
弹性计算 ice
阿里云4核8G云服务器配置价格:热门ECS实例及CPU处理器型号说明
阿里云2025年4核8G服务器配置价格汇总,涵盖经济型e实例、计算型c9i等热门ECS实例,CPU含Intel Xeon及AMD EPYC系列,月费159元起,年付低至1578元,按小时计费0.45元起,实际购买享折扣优惠。
2476 1
|
7月前
|
弹性计算 网络协议 Linux
阿里云服务器简介及使用教程,附送云服务器ECS自定义创建流程
阿里云ECS是安全可靠、弹性灵活的云计算服务,支持多种实例规格与操作系统,可快速创建和管理云服务器。本文详解ECS介绍、购买流程及使用教程,涵盖配置选择、网络设置、安全组规则等,助您轻松上手。
648 16
|
7月前
|
存储 弹性计算 网络协议
超详细的阿里云服务器购买流程,ECS自定义购买配置教程
本文详细图解阿里云ECS服务器自定义购买全流程,涵盖付费模式、地域选择、网络配置、实例规格、镜像、存储、安全组及登录设置等核心步骤,助您轻松掌握专业级云服务器搭建方法。
|
7月前
|
弹性计算 搜索推荐 异构计算
租用阿里云服务器一年要多少钱?ECS、轻量和GPU服务器租赁价格,手动整理
2025年10月阿里云服务器优惠持续,轻量应用服务器200M带宽38元起/年,ECS 2核2G 99元/年、2核4G 199元/年,4核16G 89元/月,8核32G 160元/月,香港轻量25元/月起,新老同享,续费不涨价。
1398 2
|
7月前
|
存储 弹性计算 网络协议
阿里云服务器ECS是什么?ECS介绍、云服务器创建及使用教程
阿里云ECS是安全可靠、弹性灵活的云计算服务,支持多种实例规格与操作系统,可快速创建和管理云服务器。本文详解ECS介绍、购买流程(含付费模式、地域、网络、存储等设置)及使用教程,助您轻松上手云服务器。
687 4