CORS麻烦无法解决jquery,laravel5.2

时间:2016-05-13 19:05:33

标签: javascript ajax web-services cors

我遇到了麻烦。 我明白了。



function soapRequest()
    {
        var soap_str='';
        soap_str+='<?xml version="1.0" encoding="UTF-8"?>'; 
        soap_str+='<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"';
        soap_str+='xmlns:ns1="https://www.pagofacil.net/st/public/Wsstransaccion/?wsdl"';
        soap_str+='xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"';
        soap_str+='xmlns:xsd="http://www.w3.org/2001/XMLSchema"';
        soap_str+='xmlns:ns2="http://xml.apache.org/xml-soap"';
        soap_str+='xmlns:enc="http://www.w3.org/2003/05/soap-encoding">';
        soap_str+='<env:Body>';
        soap_str+=' <ns1:transaccion env:encodingStyle="http://www.w3.org/2003/05/soapencoding">';
        soap_str+=' <param0 xsi:type="ns2:Map"><item><key xsi:type="xsd:string">nombre</key><value xsi:type="xsd:string">Juan A</value></item><item><key xsi:type="xsd:string">apellidos</key>         <value xsi:type="xsd:string">Lopez Hernández</value></item> <item>         <key xsi:type="xsd:string">numeroTarjeta</key>         <value xsi:type="xsd:string">5579567890123456</value>       </item>       <item>         <key xsi:type="xsd:string">cp</key>         <value xsi:type="xsd:string">11560</value>       </item>       <item>         <key xsi:type="xsd:string">cvt</key>         <value xsi:type="xsd:string">123</value>       </item>       <item>         <key xsi:type="xsd:string">monto</key>         <value xsi:type="xsd:string">100</value>       </item>       <item>         <key xsi:type="xsd:string">mesExpiracion</key>         <value xsi:type="xsd:string">10</value>       </item>       <item>         <key xsi:type="xsd:string">anyoExpiracion</key>         <value xsi:type="xsd:string">15</value>       </item>       <item> <key xsi:type="xsd:string">idSucursal</key>         <value xsi:type="xsd:int">1</value>       </item>       <item>         <key xsi:type="xsd:string">idUsuario</key>         <value xsi:type="xsd:int">1</value>       </item>       <item>         <key xsi:type="xsd:string">idServicio</key>         <value xsi:type="xsd:int">3</value>       </item>       <item>         <key xsi:type="xsd:string">telefono</key>         <value xsi:type="xsd:string">5550220910</value>       </item>       <item>         <key xsi:type="xsd:string">celular</key>         <value xsi:type="xsd:string">5550123456</value>       </item>       <item>         <key xsi:type="xsd:string">calleyNumero</key>         <value xsi:type="xsd:string">Anatole France 311</value>       </item>       <item>         <key xsi:type="xsd:string">colonia</key>         <value xsi:type="xsd:string">Polanco</value>       </item>       <item>         <key xsi:type="xsd:string">municipio</key>         <value xsi:type="xsd:string">Miguel Hidalgo</value>       </item>       <item>         <key xsi:type="xsd:string">estado</key>         <value xsi:type="xsd:string">Distrito Federal</value>       </item>       <item>         <key xsi:type="xsd:string">pais</key>         <value xsi:type="xsd:string">Mexico</value>       </item>       <item>         <key xsi:type="xsd:string">email</key>         <value xsi:type="xsd:string">comprador@correo.com</value>       </item>       <item>         <key xsi:type="xsd:string">param1</key>         <value xsi:type="xsd:string"/>       </item>       <item>         <key xsi:type="xsd:string">param2</key>         <value xsi:type="xsd:string">2</value>       </item>       <item>  <key xsi:type="xsd:string">param3</key>         <value xsi:type="xsd:string">3</value>       </item>       <item>         <key xsi:type="xsd:string">param4</key>         <value xsi:type="xsd:string"/>       </item>       <item>         <key xsi:type="xsd:string">param5</key>         <value xsi:type="xsd:string"/>       </item>     </param0> ';
        soap_str+='</ns1:transaccion> </env:Body> </env:Envelope>';
        var str=soap_str;
        function createCORSRequest(method,url)
        {
            var xhr= new XMLHttpRequest();
            if ("withCredentials" in xhr){
                xhr.open(method,url,false);
            }
            else
            {
                //CORS not supported
                console.log("CORS not supported");
                alert("CORS not supported");
                xhr=null;
            }
            return xhr;
        }        
        var xhr= createCORSRequest("POST","https://www.pagofacil.net/st/public/Wsstransaccion/");
        
        alert(xhr);
        
        if(!xhr)
        {
            console.log("xhr issues");
            return;
        }

        xhr.onload = function ()
        {
            var results = xhr.responseText;
            console.log(results);
        }

        xhr.setRequestHeader('Content-Type','text/xml');
        xhr.setRequestHeader("Access-Control-Allow-Origin","http://localhost:8000/");       
        alert(str);
        xhr.send(str);
    }
    soapRequest();
&#13;
&#13;
&#13;

我收到以下错误。 1个注册:895个选项pagofacil.net/st/public/Wsstransaccion/ 500(内部服务错误) 2-register:895 XMLHttpRequest无法加载pagofacil.net/st/public/Wsstransaccion/。对预检请求的响应没有通过访问控制检查:否&#39;访问控制 - 允许 - 来源&#39;标头出现在请求的资源上。起源&#39; http://localhost:8000&#39;因此不允许访问。响应的HTTP状态代码为500。 3-register:895 Uncaught NetworkError:无法执行&#39;发送&#39; on&#39; XMLHttpRequest&#39;:无法加载&#39; pagofacil.net/st/public/Wsstransaccion /&#39;。

我尝试过REST,JSON Post,并且我遇到了与SOAP相同的CORS问题。 我甚至试图在mozilla上禁用CORS安全选项,但没有工作(同样的错误)。

我不是在寻找解决方案,但我想知道我在哪里可以寻找。 谢谢大家。

2016年6月16日更新 找到这个工具并得到一些关于此的信息。 https://www.pagofacil.net/st/public/Wsrtransaccion/index/format/json?method=transaccion&data[nombre]=Juan&data[apellidos]=Lopez&data[numeroTarjeta]=5579567890123456&data[cvt]=123&data[cp]=11560&data[mesExpiracion]=10&data[anyoExpiracion]=18&data[monto]=6&data[idSucursal]=60f961360ca187d533d5adba7d969d6334771370&data[idUsuario]=62ad6f592ecf2faa87ef2437ed85a4d175e73c58&data[idServicio]=3&data[email]=gadlapaz@hotmail.com&data[telefono]=5550220910&data[celular]=5550123456&data[calleyNumero]=AnatoleFrance311&data[colonia]=Polanco&data[municipio]=Migueldalgo&data[estado]=DistritoFederal&data[pais]=Mexico

简而言之,pagofacil.net服务器不允许使用CORS。

1 个答案:

答案 0 :(得分:0)

我认为原因是服务器不允许OPTIONS请求,表明它们不允许CORS。我有一个启用了CORS的服务器,并且运行curl 'https://...myserver.../' -I -X OPTIONS -H 'Access-Control-Request-Method: POST' -H 'Origin: http://localhost:8000/' 会返回以下标题:

HTTP/1.1 200 OK
Content-Length: 0
Server: Microsoft-IIS/7.0
Access-Control-Allow-Origin: *
X-Powered-By: ASP.NET
Date: Sat, 14 May 2016 07:06:00 GMT
Set-Cookie: SERVERID=mon03; path=/
Cache-control: private

这基本上说&#34;你可以从任何来源做出POST请求&#34;。

对您的服务器curl 'https://www.pagofacil.net/st/public/Wsstransaccion/' -I -X OPTIONS -H 'Access-Control-Request-Method: POST' -H 'Origin: http://localhost:8000/'

发出相同的curl命令

...返回

HTTP/1.1 500 Internal Service Error
Date: Sat, 14 May 2016 07:06:09 GMT
Server: Apache/2.2.3 (Red Hat)
X-Powered-By: PHP/5.2.17
Content-Length: 269
X-XSS-Protection: 1; mode=block
X-Content-Type-Options: nosniff
Connection: close
Content-Type: text/xml; charset=utf-8

&#34;内部服务错误&#34;表示您无法执行OPTIONS请求,因此您无法执行您尝试执行的CORS请求。

如果服务器不允许CORS,除了请求它们启用CORS之外,您无能为力,或者通过您自己的代理服务器(您启用CORS)来路由您的呼叫。然后,此服务器可以向pagofacil发送请求并将数据返回给您。