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连接

相关实践学习
借助OSS搭建在线教育视频课程分享网站
本教程介绍如何基于云服务器ECS和对象存储OSS,搭建一个在线教育视频课程分享网站。
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1天前
|
Linux C语言 C++
vsCode远程执行c和c++代码并操控linux服务器完整教程
这篇文章提供了一个完整的教程,介绍如何在Visual Studio Code中配置和使用插件来远程执行C和C++代码,并操控Linux服务器,包括安装VSCode、安装插件、配置插件、配置编译工具、升级glibc和编写代码进行调试的步骤。
7 0
vsCode远程执行c和c++代码并操控linux服务器完整教程
|
2天前
|
存储 监控 NoSQL
Redis的实现二: c、c++的网络通信编程技术,让服务器处理多个client
本文讨论了在C/C++中实现服务器处理多个客户端的技术,重点介绍了事件循环和非阻塞IO的概念,以及如何在Linux上使用epoll来高效地监控和管理多个文件描述符。
9 0
|
1月前
|
监控 安全 网络协议
快速配置Linux云服务器
快速配置Linux云服务器
|
2月前
|
弹性计算 固态存储 ice
阿里云服务器2核16G、4核32G、8核64G配置不同ECS实例规格收费标准和CPU性能差异
2024年阿里云提供2核16G、4核32G及8核64G等多种服务器配置,用户可根据需求选择不同实例规格如内存型r8i、通用算力型u1等。以华北2(北京)为例,2核16G月费从286.2至385.99元不等;4核32G为572.4至771.97元;8核64G则在1144.8至1543.94元区间。公网带宽与系统盘(如ESSD云盘)亦有多样化选择与价格方案。长期租赁可享折扣,具体价格请访问阿里云官网确认。
102 7
|
2月前
|
弹性计算 固态存储 ice
阿里云ECS服务器2核16G、4核32G和8核64G不同配置租赁价格表
2024年阿里云服务器提供多种配置与实例规格,如2核16G、4核32G及8核64G等,用户可根据需求选择内存型r8i、通用算力型u1等不同架构。以2核16G为例,r8i每月334.19元起,u1则为286.2元起。公网带宽与系统盘亦有多档价位。实际价格与折扣请参照官网。
143 5
|
2月前
|
存储 弹性计算 大数据
阿里云服务器详细介绍_ECS云服务器优势_云服务器问题解答FAQ
阿里云服务器ECS是一种安全可靠的云计算服务,具备弹性伸缩、高性能及易用性等特点。提供多样化的实例规格,如经济型e、通用算力型u1、计算型c7等,满足不同业务需求。用户可根据业务规模选择合适的计算架构、存储类型及付费模式(包年包月、按量付费等),同时享受专有网络VPC、快照备份及丰富的镜像类型支持。此外,ECS支持免费试用,帮助企业与个人快速上手。
|
3月前
|
弹性计算 Java 应用服务中间件
云服务器 ECS产品使用问题之变更服务器配置时一直显示400异常报错,该怎么办
云服务器ECS(Elastic Compute Service)是各大云服务商阿里云提供的一种基础云计算服务,它允许用户租用云端计算资源来部署和运行各种应用程序。以下是一个关于如何使用ECS产品的综合指南。
|
3月前
|
弹性计算 安全 Linux
云服务器 ECS产品使用问题之如何处理Linux软件漏洞
云服务器ECS(Elastic Compute Service)是各大云服务商阿里云提供的一种基础云计算服务,它允许用户租用云端计算资源来部署和运行各种应用程序。以下是一个关于如何使用ECS产品的综合指南。
|
3月前
|
关系型数据库 Linux 数据库
如何在Linux云服务器上通过Docker Compose部署安装Halo,搭建个人博客网站?
本文指导用户如何在Linux服务器上使用Docker Compose部署Halo博客系统。首先确保拥有Linux服务器并安装Docker及Docker Compose。接着创建文件夹(例如`~/halo`),用于存放所有Halo相关数据。可以选择不同的Halo Docker镜像源,推荐使用具体版本而非`latest`标签以避免误操作。示例中提供了三种`docker-compose.yaml`配置方法:Halo+PostgreSQL、Halo+MySQL以及使用默认的H2数据库。每种配置都包括网络设置、健康检查和环境变量。
120 1
|
2月前
|
Linux 网络安全 数据安全/隐私保护
Linux专栏03:使用Xshell远程连接云服务器
Linux专栏03:使用Xshell远程连接云服务器
46 0