‘壹’ rust actix_web解决跨域问题
在做Web服务时使用的是与主站 配置的是fb.net , 另外个成员列表服务是 m1.fb.net ,这会造成一个跨域问题。在浏览器下使用 XML Http Request 或者 fetch 发出一个HTTP请求,假如这个HTTP的协议、主机名或者端口任意一个与当前网页地址有不一致时,为了安全浏览器会限制响应结果,通常这类问题就是所谓的跨域问题。
可以参考: https://segmentfault.com/a/1190000012550346
https://developer.mozilla.org/zh-CN/docs/Web/HTTP/CORS
解决跨域问题的方式有很多,比如 jsonp , iframe 等等。但在这里,我使用HTTP协议里约定的字段来解决这个问题,这也是最干净完美的解决方案。为了处理有跨域请求的特殊场景,HTTP协议里有一个特殊的响应头字段 Access-Control-Allow-Origin ,意思允许访问的 Origin ,值可以是通配符 * ,允许所有,或者写上一个具体的 Origin 值。
在 actix-web 里, 我们需要配合 actix_cors 来处理关于跨域请求的配置,以下是一个例子
Cargo.toml
main.rs
测试一下
如果我们把Origin换成另一个域名,则会报错
400出错了,提示
不允许的Origin请求,另外http和https视为不同的origin,都需要添加支持。
如果你需要允许所有的 Origin ,也就是不做限制的话,那么使用 * 号做通配符
通常来说不建议这么干,
当然如果有nginx做负载的话,也可以在nginx上部署,此时后端服务可以不用如此实现了,否则可能会出现:
‘贰’ web开发JAVA,GO,PHP,Python哪种语言好
具体看应用场景。小公司接外包或者创业,首选php,容易上手,学习应用成本很低,有好像thinkphp这种可以快速构建的框羡橘大架和极大量可参考的系统;针对大企业或者大型web应用开发可伍姿以考虑java,有spring这种事实上的企业级框兄竖架,程序员也好招,企业级的解决方案比较丰富;如果针对云原生web应用做微服务什么的,go语言更适合,学起来不算难,性能也更强;做一些b/s工具型系统可以考虑nodejs,小巧灵活,生态库贼丰富;如果想学一门语言能干很多不同事情,那就是python了,从web开发到大数据都能搞,生态很强大,不过性能就普普通通;追求性能,那就是c/c++或者rust语言,性能没得说,只是学习门槛很高,有drogon或者actix这样的框架,开发个一般的系统用的时间会比用php多很多,但是跑起来会快很多很多。