DOJO AJAX请求要求OPTIONS
我通过CherryPy(一个Python的网页框架)搭建了一个简单的RESTful JSON网址。还有一个第二个应用程序(使用Pylons),需要访问这个CherryPy提供的网址。两个应用都是在本地运行的,直接在浏览器中打开这两个网址都能正常显示。
但是,当我从Pylons的请求中运行一个DOJO脚本去调用CherryPy的JSON网址时,就失败了。我在Firefox中打开LiveHeaders,发现DOJO首先发送了一个HTTP的“OPTIONS”请求。CherryPy拒绝了这个OPTIONS请求,返回了405错误,意思是“方法不被允许”,然后就停止了。
如果我把这个页面直接放到CherryPy应用中,就一切正常。
那么,在我的本地开发环境中,解决这个问题的最佳方法是什么呢?……在生产环境中也会出现这个问题吗?
2 个回答
1
我猜你的两个应用程序是在本地通过两个不同的端口运行的,这样就导致了dojo尝试进行跨域的XHR请求。
为了成功进行XHR请求,你需要从同一个地址(包括协议、主机名和端口)来提供JSON的URL。我是通过在本地使用nginx来做到这一点的,并且配置它将我的Dojo应用程序的数据库请求转发到CouchDB。
3
在另一个网站上,我发现你需要覆盖xhrArgs的头部信息,以防止这个问题。我引用了那个论坛的内容:
看起来默认情况下,dojo会在Access-Control-Request-Header属性中添加一个'X-Requested-With'参数,这通常会导致服务器拒绝请求,因为这会让跨站点的XHR请求强制进行预检请求。
原始解决方案 在这里。