后端开发遇到的诸多问题(跨域,https,数据格式)
前言
第一次给人写后端,感觉思路和想法都just so so,大方面是没有什么太大的难点,可是一旦跟前端对接,就出现了很多自己学习时遇不到的bug。
辛亏我是一个十分粗心的人,踩了很多大家都意想不到的坑,鞠躬尽瘁,死而后已,我就把我的第一次开发经验分享一下,让工作室或其他地方的后辈少走弯路,实在是见笑了。
*** 友情提醒,会python只是一个程序员必备的技能,python用来写后端的效率实在是不如go语言,并且轮子数量远远不如Java语言,建议那些真的想从事后端开发的同学早日跑路,qqqxx ***
flask框架怎么用我就不说了,我只讨论一些小细节。
上线前的准备
十分建议先学会使用docker
正儿八经的后端开发,肯定要用到正儿八经的数据库的,而正儿八经的数据库,肯定要用的正儿八经的数据。可是每一次通过脚本上传数据也是挺麻烦,而且在云服务器上,环境多多少少有点差异,有可能你一个下午都在忙活怎么配环境,换服务器时更要重新如此,使用docker容器打包,到时候服务器上只需要跑一个docker服务就可以上线,十分的convenient!
写代码前,跟前端沟通下数据格式
一般都是为这种
1 | {"code":200,"data":data,"message":"success"} |
状态码+数据+反馈信息
这个很重要!!!!
写代码时有多潇洒,改代码时就有多狼狈
并且跟前端交代好各种情况的状态码
服务器购买方面
本人一开始是在春节买的腾讯云服务器上线的,一开始接口没有上域名的时候,的确很爽很快,腾讯云的镜像自带python3.8,很多必备的软件都具备了,系统也是latest version,甚至安装包的镜像服务器都贴心的换成了国内的了,唯一能够诟病的也就它不能使用GitHub。
等到你上域名,上ssl证书的时候,腾讯云会拒绝与cloudflare服务器连接,好像是因为我没有备案啥的,或者我的配置也可能有点毛病。不过cloudflare是真的方便,ssl证书根本不需要申请,一键生成就能用,相比之下,腾讯云复杂的控制台真的是让我眼花缭乱。不得不说,外国人做的东西真的是又快又方便。
所以说我建议请购买国外的vps,并且使用cloudflare来代理域名
不用担心这样做网站会被墙,目前只是黑名单屏蔽境外ip或者域名,我们良民做的网站当然也是大大的良民。
不会翻墙?
那请用一键脚本,直接复制到你的国外vps上就行,多的我就不说了,问问你的学长,朋友。
1 | V2Ray一键安装代码: |
上线后可能会遇到的bug
first 奇妙的跨域(知识涉及前端,可能会有些错误)
现在的浏览器为了安全,会屏蔽非接口的其他链接,怎么确定接口是自己的捏
主要是通过前端编写的拦截器
拦截器会检查状态码,响应头(比如Access-Control-Allow-Origin),如果不合乎规定,就禁止接口被使用
状态码问题很好解决,问题往往出在别的地方
对于一个小白,第一步一定要装上跨域组件(flask的跨域组件为FLASK_cors),装上组件后还没有完
如果你的接口没有其他奇奇怪怪的请求头,只需要在返回的响应头加上
1 | res.headers['Access-Control-Allow-Origin'] = 对方的完整 url/"*" |
如果此请求还包含其他的非默认响应头,那么请在响应上再加上一条响应头(Access-Control-Allow-Headers),使得您对客户端的响应能够通过预检。
eg
1 | res.headers["Access-Control-Allow-Headers"]="Authorization" |
目前我遇到的跨域问题就是这些,以后再遇到的话还会更新的。
上域名和证书时遇到的事情
**我使用的dns解析由cloudflare提供(再三强调),如果您不会翻墙的话请不要往下读 **
使用nginx转发请求
由于域名一般只能绑定ip地址,所以直接访问域名的话会默认请求到80端口(https是443端口),所以说必须使用nginx转发请求到你的后端程序端口。
下面我将给出我的设置文件,仅作参考,关于怎么配置的问题就不一一赘述了。
1 | upstream app_weapp { |
证书设置
cloudflare能免费生成15年有效期的证书
另外,请将SSL/TLS 加密模式设置为完全(严格)
不然会发生重定向错误
目前想到的就这些了
To be continued