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
相关文章
|
10月前
|
弹性计算 ice
阿里云4核8g服务器多少钱一年?1个月和1小时价格,省钱购买方法分享
阿里云4核8G服务器价格因实例类型而异,经济型e实例约159元/月,计算型c9i约371元/月,按小时计费最低0.45元。实际购买享折扣,1年最高可省至1578元,附主流ECS实例及CPU型号参考。
868 8
|
10月前
|
弹性计算 定位技术 数据中心
阿里云服务器配置选择方法:付费类型、地域及CPU内存配置全解析
阿里云服务器怎么选?2025最新指南:就近选择地域,降低延迟;长期使用选包年包月,短期灵活选按量付费;企业选2核4G5M仅199元/年,个人选2核2G3M低至99元/年,高性价比爆款推荐,轻松上云。
1110 11
|
10月前
|
弹性计算
阿里云8核16G云服务器收费标准:最新价格及省钱购买方法整理
阿里云8核16G云服务器价格因实例类型而异。计算型c9i约743元/月,一年6450元(7折);通用算力型u1约673元/月,一年仅需4225元(5.1折)。实际价格享时长折扣,详情见ECS官网。
|
10月前
|
域名解析 弹性计算 负载均衡
给阿里云服务器加速的方法有哪些?
本文介绍如何通过阿里云CDN加速、ECS网络优化及SLB负载均衡三种方法提升服务器响应速度。涵盖具体操作步骤,助力用户优化访问性能。
|
12月前
|
弹性计算 小程序 容灾
2025购买阿里云服务器配置选择方法:企业+个人+学生攻略
2025年阿里云服务器购买省钱攻略,涵盖个人、中小企业及高性能配置推荐。个人用户优选38元轻量或99元ECS,企业用户选199元2核4G服务器,游戏用户适合4核16G或8核32G配置,详情请参考最新活动及攻略。
1642 11
|
11月前
|
弹性计算 定位技术 数据中心
阿里云服务器选择方法:配置、地域及付费模式全解析
2025阿里云服务器选购指南:就近选择地域以降低延迟,企业用户优选2核4G5M带宽u1实例,仅199元/年;个人用户可选2核2G3M带宽ECS,99元/年起。长期稳定业务选包年包月,短期或波动场景用按量付费,轻松搭建网站首选高性价比配置。
|
缓存 监控 前端开发
详述uniapp项目部署于Nginx服务器的配置优化方法。
综上所述,uniapp项目部署于Nginx的优化方法多种多样,应根据实际情况灵活地采取合适的策略。配置后持续监控和调试,适时调整配置以保持最佳性能,并确保随着应用需求和访问模式的变化,服务器配置得到适当的更新和优化。
465 0
|
Java 关系型数据库 Linux
首次使用 linux 阿里云服务器【入门及使用】
上午编辑的文章 下午更新下 安装环境 因为服务器默认 linux 系统,所以这里讲怎么配置 linux 云服务环境。我第一次使用的时候,还以为是要去安装一个界面化桌面,以便我这个命令小白可以操作。
首次使用 linux 阿里云服务器【入门及使用】
|
应用服务中间件 Linux 开发工具
首次使用 linux 阿里云服务器,入门及使用
安装环境 因为服务器默认 linux 系统,所以这里讲怎么配置 linux 云服务环境。 我第一次使用的时候,还以为是要去安装一个界面化桌面,以便我这个命令小白可以操作。但是,对于只有2G 的内存来说安装了之后将会很卡很卡。
3264 0
|
11月前
|
Linux 应用服务中间件 Shell
二、Linux文本处理与文件操作核心命令
熟悉了Linux的基本“行走”后,就该拿起真正的“工具”干活了。用grep这个“放大镜”在文件里搜索内容,用find这个“探测器”在系统中寻找文件,再用tar把东西打包带走。最关键的是要学会使用管道符|,它像一条流水线,能把这些命令串联起来,让简单工具组合出强大的功能,比如 ps -ef | grep 'nginx' 就能快速找出nginx进程。
1049 1
二、Linux文本处理与文件操作核心命令