jquery / soap请求到本地libcs​​oap / nanohttpd服务器 - > Access-Control-Allow-Origin不允许使用Origin *

时间:2013-03-10 12:36:06

标签: jquery http post soap nanohttpd

我写了一个c程序,它需要一个其他程序的接口,也需要一个webste。所以我选择了libcs​​oap来创建一个soap接口。 libcs​​oap-library基于nanohttpd,这是一个用c编写的小型http服务器。

我刚刚实现了一些测试功能,例如一个ping - 函数只返回一个没有任何有趣数据的xml。

我可以在libcs​​oap的帮助下调用这些函数而不会出现任何问题。但现在,我尝试从虚拟网站调用soap接口。我刚创建了一个带有textarea的html文件和一个按钮,将textarea的内容作为原始xml发送。

然后我尝试将答案放入div - 按钮旁边的send。这个html文件位于我的本地机器xubuntu-02上的apache2网络服务器上。

以下是代码:

<HTML xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
  <HEAD>
    <TITLE>Debug Post</TITLE>
    <script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
    <script type="text/javascript">
    function submit_data() {
        var src = document.getElementById('data');
        $.support.cors = true;

        $.ajax({
            url: 'http://xubuntu-02:10000/tbs_blabla',
            type: 'POST',
            async: false,
            timeout: 30000,
            data: src.value,
            success: function(data) {
                alert('OK!');
                /*document.getElementById('data').value = data;*/
            },
            fail: function() {
                alert('failed');
            }
        });
    }
    </script>
  </HEAD>
  <BODY>
    <H1>Debug Post</H1>
      <textarea id="data" rows="10" cols="80">
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsd="http://www.w3.org/1999/XMLSchema" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <SOAP-ENV:Header/> <SOAP-ENV:Body>  <m:ping xmlns:m="urn:tbs_blabla">  <m:name xsi:type="xsd:string">Jonny B. Good</m:name></m:ping> </SOAP-ENV:Body></SOAP-ENV:Envelope>

     </textarea>
      <p>
        <input type="button" value="Submit" onclick="submit_data();return false;" />
      </p>
    <p>
    <div id="res">
    </div>
    </p>
  </BODY>
</HTML>

我使用chrome来调试代码。可以观察所有的http请求,我总是得到http状态200的答案。那么......请求应该完整吗?如果我检查服务器端的日志(libcs​​oap-log),我也可以看到xml已经处理,创建了一个新的xml并发送了新的xml。

我还用wireshark检查了请求,似乎没问题:

POST /tbs_blabla HTTP/1.1
Host: xubuntu-02:10000
Connection: keep-alive
Content-Length: 425
Accept: */*
Origin: http://xubuntu-02
User-Agent: Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.56 Safari/537.17
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Referer: http://xubuntu-02/test.html
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
DNT: 1

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsd="http://www.w3.org/1999/XMLSchema" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <SOAP-ENV:Header/> <SOAP-ENV:Body>  <m:ping xmlns:m="urn:tbs_blabla">  <m:name xsi:type="xsd:string">Jonny B. Good</m:name></m:ping> </SOAP-ENV:Body></SOAP-ENV:Envelope>

     HTTP/1.1 200 OK
Date: Sun, 10 Mar 2013 13:28:33 GMT
Server: Nano HTTPD library
Content-Type: text/xml
Content-Length: 417

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <SOAP-ENV:Header/> <SOAP-ENV:Body>  <m:pingResponse xmlns:m="urn:tbs_blabla">  <m:ok xsi:type="xsd:boolean">true</m:ok></m:pingResponse> </SOAP-ENV:Body></SOAP-ENV:Envelope>

所以,一切看起来都不错,但在javascript控制台的chrome中,我总是得到XMLHttpRequest cannot load http://xubuntu-02:10000/tbs_blabla. Origin http://xubuntu-02 is not allowed by Access-Control-Allow-Origin.

总是我发送请求,网页上没有任何反应。

我不知道为什么。我测试了很多东西。例如。使用chromium-browser --disable-web-securitychromium-browser --allow-file-access-from-files启动铬。

我查了很多stackoverflow-posts:

Error: "Origin null is not allowed by Access-Control-Allow-Origin" when loading an XML file with JQuery's ajax method

XmlHttpRequest error: Origin null is not allowed by Access-Control-Allow-Origin

Origin null is not allowed by Access-Control-Allow-Origin

$.ajax(): Origin null is not allowed

Access-Control-Allow-Origin error sending a jQuery Post to Google API's

...

也许有人能看出我做错了什么?

感谢您的帮助。

祝你好运

- 编辑 -

我刚在php中写了一个小'代理'。它只是接收xml将它发送到localhost:10000然后它返回xml-answer。现在我使用xml的post-field数据。

这是php文件:

<?php
echo shell_exec('curl http://localhost:10000/tbs_lgrow -m60 -d' . escapeshellarg($_POST['data']));
?>

现在它适用于这个小黑客。

由于

祝你好运

0 个答案:

没有答案