作者个人研发在高并发场景下提供了一个简单、稳定、可扩展的延迟消息队列框架,具有精准的定时任务和延迟队列处理功能。开源半年多以来,已成功为十几家中小企业提供精准定时调度解决方案,经受住了生产环境的考验。为了造福更多的童鞋,这里提供一个开源的框架地址:https://github.com/sunshinelyz/mykit-delay写的比较早现在的互联网行业,大部分Web项目基本上都是采用前后端分离的方式模式。前端为H5项目,后端为Java、PHP、Python等项目。而且,大部分后端服务不会只部署一套服务,而是会使用Nginx来对后端服务进行负载均衡。那么,这时候就会出现一个问题:如果请求url的协议、域名、端口中的任何一个与当前页面url不同,就会出现跨域现象。那么如何使用Nginx来解决跨域问题呢?接下来,我们一起来讨论一下这个问题。为什么是跨域?受浏览器同源策略限制。同源策略(Sameoriginpolicy)是一种约定,是浏览器最核心、最基本的安全功能。如果缺少同源策略,可能会影响浏览器的正常功能。可以说Web是建立在同源策略的基础上的,而浏览器只是同源策略的一种实现。同源策略防止来自一个域的javascript脚本与来自另一个域的内容交互。所谓同源(即同域)是指两个页面具有相同的协议(protocol)、主机(host)和端口号(port)。Nginx是如何解决跨域的?这里,我们使用Nginx的反向代理功能来解决跨域问题。至于什么是Nginx的反向代理,请自行百度或谷歌。Nginx作为一个反向代理服务器,将http请求转发给另一台或一些服务器。跨域访问可以通过将本地url前缀映射到web服务器实现跨域访问。对于浏览器来说,访问的是同源服务器上的url。Nginx通过检测url前缀,将http请求转发到后面的真实物理服务器。并通过重写命令再次删除前缀。这样真实的服务器就可以正确的处理请求,而不知道这个请求是来自代理服务器的。Nginx解决跨域情况在使用Nginx解决跨域问题时,我们可以编译Nginx的nginx.conf配置文件,例如编辑nginx.conf文件的server节点内容如下图。server{location/{roothtml;indexindex.htmlindex.htm;//允许cros跨域访问add_header'Access-Control-Allow-Origin''*';}//自定义本地路径location/apis{rewrite^.+apis/?(.*)$/$1break;includeuwsgi_params;proxy_passhttp://www.binghe.com;}}然后我把项目部署在nginx的html根目录下,调用的时候url从http://www设置ajax.binghe.com/apitest/test变成http://www.binghe.com/apis/apitest/test然后解析成功。假设,我之前在页面上发出的Ajax请求如下所示。$.ajax({type:"post",dataType:"json",data:{'parameter':JSON.stringify(data)},url:"http://www.binghe.com/apitest/test",async:flag,beforeSend:function(xhr){xhr.setRequestHeader("Content-Type",submitType.Content_Type);xhr.setRequestHeader("user-id",submitType.user_id);xhr.setRequestHeader("角色类型",submitType.role_type);xhr.setRequestHeader("access-token",getAccessToken().token);},success:function(result,status,xhr){},error:function(e){layerMsg('请求失败,请稍后再试')}});修改请求如下,解决跨域问题。$.ajax({type:"post",dataType:"json",data:{'parameter':JSON.stringify(data)},url:"http:www.binghe.com/apis/apitest/test",async:flag,beforeSend:function(xhr){xhr.setRequestHeader("Content-Type",submitType.Content_Type);xhr.setRequestHeader("user-id",submitType.user_id);xhr.setRequestHeader("角色类型",submitType.role_type);xhr.setRequestHeader("access-token",getAccessToken().token);},success:function(result,status,xhr){},error:function(e){layerMsg('请求失败,请稍后再试')}});本文转载自微信公众号「冰河科技」,可通过以下二维码关注。转载本文请联系冰川科技公众号。
