CORS问题无法解析jquery,laravel 5.2

Posted

技术标签:

【中文标题】CORS问题无法解析jquery,laravel 5.2【英文标题】:CORS trouble cant solve jquery, laravel5.2 【发布时间】:2016-09-10 02:20:15 【问题描述】:

我有麻烦了。 我明白了。

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();

我收到以下错误。 1-register:895 OPTIONS pagofacil.net/st/public/Wsstransaccion/500(内部服务错误) 2-register:895 XMLHttpRequest 无法加载 pagofacil.net/st/public/Wsstransaccion/。对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,Origin 'http://localhost:8000' 不允许访问。响应的 HTTP 状态代码为 500。 3-register:895 Uncaught NetworkError: 无法在“XMLHttpRequest”上执行“发送”:无法加载“pagofacil.net/st/public/Wsstransaccion/”。

我尝试过 REST、JSON Post,但我在使用 SOAP 时遇到了同样的 CORS 问题。 我什至尝试在 mozilla 上禁用 CORS 安全选项,但没有用(同样的错误)。

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

更新 16-05-2016 找到了这个工具并得到了一些关于这个的信息。 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】:

我认为原因是服务器不允许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

这基本上是说“您可以从任何来源进行 POST 请求”。

对你的服务器发出相同的 curl 命令curl 'https://www.pagofacil.net/st/public/Wsstransaccion/' -I -X OPTIONS -H 'Access-Control-Request-Method: POST' -H 'Origin: http://localhost:8000/'

...返回

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

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

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

【讨论】:

非常感谢,请与第三方公司核实。

以上是关于CORS问题无法解析jquery,laravel 5.2的主要内容,如果未能解决你的问题,请参考以下文章

Laravel Sanctum + Nuxt JS 我无法通过 CORS

无法在 Laravel 5 中为特定路线添加 CORS

无法在 Laravel API 中启用 CORS?

Laravel cors 无法在 Apache 服务器上运行

Laravel 5 CORS - XMLHttpRequest 无法加载 http://myapi.com。预检响应具有无效的 HTTP 状态代码 500

XMLHttprequest 无法加载 [link]。从 [link] 重定向到已被 laravel 5 中的 CORS 策略阻止