我正在使用从事移动应用开发HTML5 + Phonegap
。当前正在使用XMLRPC
和运行的移动应用正常。(Android和iOS)
我需要使用与相同的应用程序website in browsers
。(使用HTML5)。但是,当我尝试在网站上运行我的应用程序时,出现此错误:
XMLHttpRequest cannot load 'Client' URL'. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost <http://localhost/>' is therefore not allowed access.
什么时候搜索专家说使用JSONP。但是我可以使用相同的XMLRPC方法吗?
例如 ;
出于登录目的,正在使用;
$.xmlrpc({
url: 'http://clienturl/xmlrpc/common',
methodName: 'login',
params: [Database_name','user_name','Password'],
success: function(response, status, jqXHR) {
alert('success'); },
error: OnError
});
它可以作为移动应用程序正常工作。
但是Access-Control-Allow-Origin
当我尝试作为网站运行时会遇到跨域问题。
我怎样才能解决这个问题 ?
默认情况下,SOP(相同来源策略)允许跨域请求,但它会阻止接收这些请求的响应。将Access-Control-Allow-Origin
在您的错误信息是CORS(跨域资源共享)标头。它告诉浏览器,您可以通过发送来自另一个域(您的XMLRPC客户端的域)的请求来读取域(您的XMLRPC服务器的域)的响应。因此,如果要使用AJAX进行调用,则必须从服务器发送回CORS allow标头。
注意:CORS无法在旧版浏览器中使用。
可能的解决方案:
如果您http://clienturl/xmlrpc/common
从打来的http://localhost
话
response.header('Access-Control-Allow-Origin', "*")
按照以下方法,它是一个不太安全的解决方案:Access-Control-Allow-Origin不允许使用起源http:// localhost,但是您始终可以为客户端添加另一个主机名(例如,http://client.xml.rpc),例如,通过Windows,您可以使用IIS服务器修改主机文件并添加绑定。
我不建议使用此解决方案,因为它具有允许凭据标头的安全隐患。
另一个更安全的选择是列出允许的主机列表,检查从哪个主机收到了实际的请求,然后发回适当的标头:
if (allowedHosts.contains(request.host))
if (request.host== "http://localhost")
response.header('Access-Control-Allow-Origin', "null");
else
response.header('Access-Control-Allow-Origin', request.host);
else
response.header('Access-Control-Allow-Origin', server.host);
这是具有多个主机的正确解决方案,因为如果您允许*的凭据,那么每个人都将能够读取和写入已登录用户的会话。
通过http://localhost
和file:///
IRI,您必须使用null
原点。我不确定其他协议,我猜在当前的浏览器中,您也必须使用null
它们的来源。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句