当前位置: 首页 > 知识库问答 >
问题:

访问控制允许XMLRPC请求中的源问题

杜高谊
2023-03-14

我正在使用HTML5 Phonegap的移动应用程序开发中工作。目前我正在使用XMLRPC处理移动应用程序,并且工作正常。(Android和iOS)

我需要在浏览器中使用与网站相同的应用程序。(使用 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
});

它作为一个移动应用程序运行良好。

但当我尝试作为网站运行时,出现< code > Access-Control-Allow-Origin 跨域问题。

我该怎么解决这个问题?

共有1个答案

巫坚白
2023-03-14

默认情况下,SOP(同源策略)允许跨源请求,但它阻止接收这些请求的响应。错误消息中的< code > Access-Control-Allow-Origin 是一个CORS(跨源资源共享)标头。它告诉浏览器,您允许通过从另一个域(您的XMLRPC客户机的域)发送请求来读取一个域(您的XMLRPC服务器的域)的响应。所以如果你想用AJAX调用它,你必须从你的服务器发送回CORS允许头。

注意:CORS在旧浏览器中不起作用。

可能的解决方案:

>

  • 如果您从 http://localhost 致电 http://clienturl/xmlrpc/common,则

    response.header('Access-Control-Allow-Origin', "*")
    

    这是一个不太安全的解决方案:源http://localhost不被Access-Control-Allow-Origin允许,但是您总是可以为您的客户端添加另一个主机名(例如http://client.xml.rpc ),例如通过windows,您可以修改hosts文件并使用IIS服务器添加绑定。

    我不推荐这个解决方案,因为它对allow credentials头有安全风险。

    另一个更安全的选择是列出允许的主机列表,检查实际请求来自哪个主机,并发回正确的报头:

    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://localhostfile:///IRI,您必须使用null原点。我不确定其他协议,我想在当前的浏览器中,您也必须使用它们的null原点。

  •  类似资料:
    • 问题内容: 我看到以下错误: 使用此代码: 是什么原因引起的,如何解决? 问题答案: 在当前域之外发出ajax请求时,Javascript是受限制的。 例1:您的域名为example.com,并且您想向test.com提出请求=>您不能。 例2:您的域名是example.com,并且您想向inner.example.com发送请求,但是您不能。 例3:您的域名为example.com:80,并且您

    • 问题内容: 我尝试使用以下代码通过$ http(角度)发送http请求: 但这不起作用,并且我在Web控制台中有此错误: 你有解决方案吗 ? 问题答案: 您看到此错误是由于在浏览器中实现的称为Same Origin Policy的安全机制所致。 基本上,这是由于您的网页尝试访问驻留在与网页本身不同的主机,端口或方案(HTTP / HTTPS /文件等)所在的服务器上的资源而引起的。 为了解决此问题

    • 我正在创建一个脚本,加载在其他网站的外部。它加载CSS和HTML,在我自己的服务器上工作得很好。 但还是不管用。

    • 问题内容: 我从node.js服务器获取数据时遇到问题。 客户端是: 在服务器端,我还设置了标头: 但我得到一个错误 “ XMLHttpRequest无法加载http:// localhost:3003 / get_testlines 。对预检请求的响应未通过访问控制检查:所请求的资源上没有’Access- Control-Allow-Origin’标头。来源’ http://本地主机:3000

    • 我有错误: XMLHttpRequest 无法加载 http://localhost:5984/cp_config/。当凭据标志为 true 时,不能在“访问控制-允许-源”标头中使用通配符“*”。因此,不允许访问源“http://localhost”。XMLHttpRequest 的凭据模式由 withCredentials 属性控制。 但我有一个标题: 我该如何解决这个问题?

    • 我已经创建了两个web应用程序--客户端和服务应用程序。 当客户端和服务应用程序部署在同一个Tomcat实例中时,它们之间的交互很好。 但是当应用程序部署到分开的Tomcat实例(不同的机器)时,当请求发送服务应用程序时,我会得到以下错误。 我的客户端应用程序使用JQuery、HTML5和bootstrap。