我可以对不同的门户使用 ajax GET 请求吗?
Posted
技术标签:
【中文标题】我可以对不同的门户使用 ajax GET 请求吗?【英文标题】:Can I use an ajax GET request to a different portal? 【发布时间】:2013-11-03 08:16:33 【问题描述】:我的前端与我的服务器在同一个域上,称之为 X。但是,前端在端口 8080 上,服务器 (nodejs) 正在侦听端口 1337 上的活动。每当我到达 X:1337在我的浏览器中,我的浏览器中显示了正确的 json。但是当我尝试从前端使用 ajax get 请求时,get 请求失败。在萤火虫中,它只显示标题。是跨域问题吗?还是不同的端口无关紧要?
谢谢!
【问题讨论】:
这是一个跨域问题。使用 CORS、JSONP 或服务器端代理。当源源和目标源之间的以下任何参数不同时,请求是跨源的:协议、子域、域或端口 谢谢,我会调查一下 请注意,IE 不考虑端口号。 【参考方案1】:我不知道为什么这个问题被否决了,因为这实际上是一个有趣的问题,我自己也想出了一个解决方案。具体来说,我喜欢构建我的应用程序,使前端是一个静态站点(roots/backbone/marionette 是一个很棒的堆栈),并从一个单独的 API 应用程序中提取数据而不会出现跨域问题,并且同时保持 cookie 完整,这样我就不需要做令牌认证或任何事情。我不确定您是否在这里遇到了类似的问题,但看起来您可能会遇到这样的问题,这就是我解决它的方法。
我所做的是使用nginx 将我的两个服务器映射到一个域名(我写了一个getting started guide here)。这样,您就没有跨域问题,并且它们可以非常顺利地协同工作。你可以使用如下的指令来让 nginx 发生这种情况:
server
listen 1234;
server_name localhost;
# re-route all api requests and remove the
# /api piece before routing them through
location /api
rewrite ^(/api)(.*)$ /$2 break;
proxy_pass http://localhost:1337;
proxy_set_header Host $http_host;
# pass through all other requests to the front end.
# in production this should be compiled and use a regular
# try_files block
location /
proxy_pass http://localhost:8080;
proxy_set_header Host $http_host;
使用此代码,您将在localhost:1234
设置一个服务器,它将所有正常请求发送到您在8080
运行的前端,并将任何以/api
开头的请求发送到您在@ 的节点服务器987654330@。此外,由于两者都在同一个域中,因此您不会遇到任何跨域问题。此设置在本地和生产环境中都运行良好。
【讨论】:
以上是关于我可以对不同的门户使用 ajax GET 请求吗?的主要内容,如果未能解决你的问题,请参考以下文章
websocket[tornado] 的单个实例可以处理不同的请求吗?
前端ajax中运用post请求和get请求之于session验证