在 SOAP 请求上收到 400 个错误请求(Transfer-encoding:分块问题?)

getting 400 bad request on SOAP requests (Transfer-encoding: chunked problem?)

我遇到了 this.A SOAP 请求从应用程序发送到我们的服务器的情况。 该请求在本地测试时工作正常,但在开发服务器上进行实时测试时总是失败。 该应用程序的管理员向我发送了他们的请求,以便我对其进行测试并找出问题所在。因此,当我删除 Transfer-encoding: chunked header 时,响应很好(来自 Postman 和 SoapUI)但是 Transfer-encoding header 出现时它失败了。

这是发送到我们的网络服务的请求:

请求headers:

POST http://xxx.dev.xxx.si/soap-mobile HTTP/1.1
Content-Type: text/xml; charset=UTF-8
Accept: */*
SOAPAction:"http://wtb.si/storitve/app/onlineGorillaMobile/v1/ZapisiVprasanjaZaUporabnika"
User-Agent: Apache CXF 2.4.6
Cache-Control: no-cache
Pragma: no-cache
Host: xxx.dev.xxx.si
Connection: keep-alive
Transfer-Encoding: chunked

请求body:

ff9 <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><ns8:ZapisiVprasanjaZaUporabnika xmlns:ns2="http://wtb.si/sheme/ponudbe/ipo/bean/v1" xmlns:ns3="http://wtb.si/sheme/ponudbe/ipo/v1" xmlns:ns4="http://wtb.si/sheme/ponudbe/v1" xmlns:ns5="http://wtb.si/sheme/skupno/v1" xmlns:ns6="http://wtb.si/sheme/app/onlineGorilla/sporocila/v1" xmlns:ns7="http://wtb.si/sheme/podpora/v1" xmlns:ns8="http://wtb.si/storitve/app/onlineGorillaMobile/v1" xmlns:ns9="http://wtb.si/sheme/zavarovanja/skupno/v1" xmlns:ns10="http://wtb.si/sheme/zavarovanja/bean/v1" xmlns:ns11="http://wtb.si/sheme/ponudbe/skupno/v1"><input><ns6:vprasanjaZaUporabnika><ns10:vprasanjaZaVrstoPredmetaZavarovanja><ns10:vrstaPredmetaZavarovanja>avto</ns10:vrstaPredmetaZavarovanja><ns10:vprasanja><ns4:parameterPaketa><ns4:iidParPaket>25390</ns4:iidParPaket><ns4:iidPaket>441218</ns4:iidPaket><ns4:parameter><ns11:vrsta>ŠTEVILKE</ns11:vrsta><ns11:prostiVnos>true</ns11:prostiVnos><ns11:naziv>Stanje števca (km)</ns11:naziv><ns11:jezik>sl</ns11:jezik><ns11:tip>STEVILO_JS</ns11:tip><ns4:iidParameter>448101</ns4:iidParameter><ns4:parameter>P244</ns4:parameter><ns4:casSekvenca>false</ns4:casSekvenca><ns4:ipo>true</ns4:ipo><ns4:kolicina>false</ns4:kolicina></ns4:parameter><ns4:zahtevanVnos>false</ns4:zahtevanVnos></ns4:parameterPaketa><ns4:parameterPaketa><ns4:iidParPaket>25392</ns4:iidParPaket><ns4:iidPaket>441218</ns4:iidPaket><ns4:parameter><ns11:vrsta>ZNAKI</ns11:vrsta><ns11:prostiVnos>false</ns11:prostiVnos><ns11:naziv>Lastnik vozila</ns11:naziv><ns11:jezik>sl</ns11:jezik><ns11:tip>SEZNAM</ns11:tip><ns4:iidParameter>448103</ns4:iidParameter><ns4:parameter>P246</ns4:parameter><ns4:casSekvenca>false</ns4:casSekvenca><ns4:ipo>true</ns4:ipo><ns4:parameterLOVsDTO><ns4:parameterLOV><ns4:iidLov>498562</ns4:iidLov><ns4:iidParameter>448103</ns4:iidParameter><ns4:vrednost>1</ns4:vrednost><ns4:vrstniRed>1</ns4:vrstniRed><ns4:prikazanaVrednost>fizièna oseba</ns4:prikazanaVrednost><ns4:jezik>sl</ns4:jezik></ns4:parameterLOV><ns4:parameterLOV><ns4:iidLov>498563</ns4:iidLov><ns4:iidParameter>448103</ns4:iidParameter><ns4:vrednost>2</ns4:vrednost><ns4:vrstniRed>2</ns4:vrstniRed><ns4:prikazanaVrednost>podjetje</ns4:prikazanaVrednost><ns4:jezik>sl</ns4:jezik></ns4:parameterLOV><ns4:parameterLOV><ns4:iidLov>498564</ns4:iidLov><ns4:iidParameter>448103</ns4:iidParameter><ns4:vrednost>3</ns4:vrednost><ns4:vrstniRed>3</ns4:vrstniRed><ns4:prikazanaVrednost>lizing</ns4:prikazanaVrednost><ns4:jezik>sl</ns4:jezik></ns4:parameterLOV></ns4:parameterLOVsDTO><ns4:kolicina>false</ns4:kolicina></ns4:parameter><ns4:zahtevanVnos>false</ns4:zahtevanVnos></ns4:parameterPaketa><ns4:parameterPaketa><ns4:iidParPaket>25393</ns4:iidParPaket><ns4:iidPaket>441218</ns4:iidPaket><ns4:parameter><ns11:vrsta>ZNAKI</ns11:vrsta><ns11:prostiVnos>false</ns11:prostiVnos><ns11:naziv>Mladi voznik</ns11:naziv><ns11:jezik>sl</ns11:jezik><ns11:tip>CK</ns11:tip><ns4:iidParameter>448104</ns4:iidParameter><ns4:parameter>P247</ns4:parameter><ns4:casSekvenca>false</ns4:casSekvenca><ns4:ipo>true</ns4:ipo><ns4:parameterLOVsDTO><ns4:parameterLOV><ns4:iidLov>498565</ns4:iidLov><ns4:iidParameter>448104</ns4:iidParameter><ns4:vrednost>1</ns4:vrednost><ns4:vrstniRed>1</ns4:vrstniRed><ns4:prikazanaVrednost>da</ns4:prikazanaVrednost><ns4:jezik>sl</ns4:jezik></ns4:parameterLOV><ns4:parameterLOV><ns4:iidLov>498566</ns4:iidLov><ns4:iidParameter>448104</ns4:iidParameter><ns4:vrednost>2</ns4:vrednost><ns4:vrstniRed>2</ns4:vrstniRed><ns4:prikazanaVrednost>ne</ns4:prikazanaVrednost><ns4:jezik>sl</ns4:jezik></ns4:parameterLOV></ns4:parameterLOVsDTO><ns4:kolicina>false</ns4:kolicina></ns4:parameter><ns4:zahtevanVnos>false</ns4:zahtevanVnos></ns4:parameterPaketa><ns4:parameterPaketa><ns4:iidParPaket>25394</ns4:iidParPaket><ns4:iidPaket>441218</ns4:iidPaket><ns4:parameter><ns11:vrsta>ŠTEVILKE</ns11:vrsta><ns11:prostiVnos>false</ns11:prostiVnos><ns11:naziv>Starost voznika</ns11:naziv><ns11:jezik>sl</ns11:jezik><ns11:tip>SEZNAM</ns11:tip><ns4:iidParameter>448105</ns4:iidParameter><ns4:parameter>P248</ns4:parameter><ns4:casS ff9 ekvenca>false</ns4:casSekvenca><ns4:ipo>true</ns4:ipo><ns4:kolicina>false</ns4:kolicina></ns4:parameter><ns4:zahtevanVnos>false</ns4:zahtevanVnos></ns4:parameterPaketa><ns4:parameterPaketa><ns4:iidParPaket>25395</ns4:iidParPaket><ns4:iidPaket>441218</ns4:iidPaket><ns4:parameter><ns11:vrsta>DATUM</ns11:vrsta><ns11:prostiVnos>true</ns11:prostiVnos><ns11:naziv>Datum pridobitve voznikega dovoljenja</ns11:naziv><ns11:jezik>sl</ns11:jezik><ns11:tip>DATUM_GUMB</ns11:tip><ns4:iidParameter>448106</ns4:iidParameter><ns4:parameter>P249</ns4:parameter><ns4:casSekvenca>false</ns4:casSekvenca><ns4:ipo>true</ns4:ipo><ns4:kolicina>false</ns4:kolicina></ns4:parameter><ns4:zahtevanVnos>false</ns4:zahtevanVnos></ns4:parameterPaketa><ns4:parameterPaketa><ns4:iidParPaket>25431</ns4:iidParPaket><ns4:iidPaket>441218</ns4:iidPaket><ns4:parameter><ns11:vrsta>ZNAKI</ns11:vrsta><ns11:prostiVnos>false</ns11:prostiVnos><ns11:naziv>Število prevoženih km na leto</ns11:naziv><ns11:jezik>sl</ns11:jezik><ns11:tip>SEZNAM</ns11:tip><ns4:iidParameter>448126</ns4:iidParameter><ns4:parameter>P269</ns4:parameter><ns4:casSekvenca>false</ns4:casSekvenca><ns4:ipo>true</ns4:ipo><ns4:parameterLOVsDTO><ns4:parameterLOV><ns4:iidLov>498560</ns4:iidLov><ns4:iidParameter>448126</ns4:iidParameter><ns4:vrednost>1</ns4:vrednost><ns4:vrstniRed>1</ns4:vrstniRed><ns4:prikazanaVrednost>manj kot 10.000 km</ns4:prikazanaVrednost><ns4:jezik>sl</ns4:jezik></ns4:parameterLOV><ns4:parameterLOV><ns4:iidLov>498561</ns4:iidLov><ns4:iidParameter>448126</ns4:iidParameter><ns4:vrednost>2</ns4:vrednost><ns4:vrstniRed>2</ns4:vrstniRed><ns4:prikazanaVrednost>med 10.000 in 20.000 km</ns4:prikazanaVrednost><ns4:jezik>sl</ns4:jezik></ns4:parameterLOV><ns4:parameterLOV><ns4:iidLov>498569</ns4:iidLov><ns4:iidParameter>448126</ns4:iidParameter><ns4:vrednost>3</ns4:vrednost><ns4:vrstniRed>3</ns4:vrstniRed><ns4:prikazanaVrednost>med 20.000 in 30.000 km</ns4:prikazanaVrednost><ns4:jezik>sl</ns4:jezik></ns4:parameterLOV><ns4:parameterLOV><ns4:iidLov>498570</ns4:iidLov><ns4:iidParameter>448126</ns4:iidParameter><ns4:vrednost>4</ns4:vrednost><ns4:vrstniRed>4</ns4:vrstniRed><ns4:prikazanaVrednost>med 30.000 in 40.000 km</ns4:prikazanaVrednost><ns4:jezik>sl</ns4:jezik></ns4:parameterLOV><ns4:parameterLOV><ns4:iidLov>498571</ns4:iidLov><ns4:iidParameter>448126</ns4:iidParameter><ns4:vrednost>5</ns4:vrednost><ns4:vrstniRed>5</ns4:vrstniRed><ns4:prikazanaVrednost>veè kot 40.000 km</ns4:prikazanaVrednost><ns4:jezik>sl</ns4:jezik></ns4:parameterLOV></ns4:parameterLOVsDTO><ns4:kolicina>false</ns4:kolicina></ns4:parameter><ns4:zahtevanVnos>false</ns4:zahtevanVnos></ns4:parameterPaketa><ns4:parameterPaketa><ns4:iidParPaket>25432</ns4:iidParPaket><ns4:iidPaket>441218</ns4:iidPaket><ns4:parameter><ns11:vrsta>ZNAKI</ns11:vrsta><ns11:prostiVnos>false</ns11:prostiVnos><ns11:naziv>Ali imate garažo</ns11:naziv><ns11:jezik>sl</ns11:jezik><ns11:tip>SEZNAM</ns11:tip><ns4:iidParameter>448127</ns4:iidParameter><ns4:parameter>P270</ns4:parameter><ns4:casSekvenca>false</ns4:casSekvenca><ns4:ipo>true</ns4:ipo><ns4:parameterLOVsDTO><ns4:parameterLOV><ns4:iidLov>498572</ns4:iidLov><ns4:iidParameter>448127</ns4:iidParameter><ns4:vrednost>1</ns4:vrednost><ns4:vrstniRed>1</ns4:vrstniRed><ns4:prikazanaVrednost>da</ns4:prikazanaVrednost><ns4:jezik>sl</ns4:jezik></ns4:parameterLOV><ns4:parameterLOV><ns4:iidLov>498573</ns4:iidLov><ns4:iidParameter>448127</ns4:iidParameter><ns4:vrednost>2</ns4:vrednost><ns4:vrstniRed>2</ns4:vrstniRed><ns4:prikazanaVrednost>ne</ns4:prikazanaVrednost><ns4:jezik>sl</ns4:jezik></ns4:parameterLOV></ns4:parameterLOVsDTO><ns4:kolicina>false</ns4:kolicina></ns4:parameter><ns4:zahtevanVnos>false</ns4:zahtevanVnos></ns4:parameterPaketa><ns4:parameterPaketa><ns4:iidParPaket>25433</ns4:iidParPaket><ns4:iidPaket>441218</ns4:iidPaket><ns4:parameter><ns11:vrsta>ZNAKI</ns11:vrsta><ns11:prostiVnos>true</ns11:prostiVnos><ns11:naziv>Ste veliko na poti</ns11:naziv><ns11:jezik>sl</ns11:jezik><ns11:tip>LOV_GUMB</ns11:tip><ns4:iidParameter>448128</ns4:iidParameter><ns4:parameter>P271</ns4:parameter><ns4:casSekvenca> dbb false</ns4:casSekvenca><ns4:ipo>true</ns4:ipo><ns4:kolicina>false</ns4:kolicina></ns4:parameter><ns4:zahtevanVnos>false</ns4:zahtevanVnos></ns4:parameterPaketa><ns4:parameterPaketa><ns4:iidParPaket>25434</ns4:iidParPaket><ns4:iidPaket>441218</ns4:iidPaket><ns4:parameter><ns11:vrsta>ZNAKI</ns11:vrsta><ns11:prostiVnos>true</ns11:prostiVnos><ns11:naziv>Ali potujete v tujino</ns11:naziv><ns11:jezik>sl</ns11:jezik><ns11:tip>LOV_GUMB</ns11:tip><ns4:iidParameter>448129</ns4:iidParameter><ns4:parameter>P272</ns4:parameter><ns4:casSekvenca>false</ns4:casSekvenca><ns4:ipo>true</ns4:ipo><ns4:kolicina>false</ns4:kolicina></ns4:parameter><ns4:zahtevanVnos>false</ns4:zahtevanVnos></ns4:parameterPaketa><ns4:parameterPaketa><ns4:iidParPaket>25435</ns4:iidParPaket><ns4:iidPaket>441218</ns4:iidPaket><ns4:parameter><ns11:vrsta>ZNAKI</ns11:vrsta><ns11:prostiVnos>true</ns11:prostiVnos><ns11:naziv>Službene poti</ns11:naziv><ns11:jezik>sl</ns11:jezik><ns11:tip>LOV_GUMB</ns11:tip><ns4:iidParameter>448130</ns4:iidParameter><ns4:parameter>P273</ns4:parameter><ns4:casSekvenca>false</ns4:casSekvenca><ns4:ipo>true</ns4:ipo><ns4:kolicina>false</ns4:kolicina></ns4:parameter><ns4:zahtevanVnos>false</ns4:zahtevanVnos></ns4:parameterPaketa><ns4:parameterPaketa><ns4:iidParPaket>25436</ns4:iidParPaket><ns4:iidPaket>441218</ns4:iidPaket><ns4:parameter><ns11:vrsta>ZNAKI</ns11:vrsta><ns11:prostiVnos>true</ns11:prostiVnos><ns11:naziv>Vozite 220 na uro</ns11:naziv><ns11:jezik>sl</ns11:jezik><ns11:tip>LOV_GUMB</ns11:tip><ns4:iidParameter>448131</ns4:iidParameter><ns4:parameter>P274</ns4:parameter><ns4:casSekvenca>false</ns4:casSekvenca><ns4:ipo>true</ns4:ipo><ns4:kolicina>false</ns4:kolicina></ns4:parameter><ns4:zahtevanVnos>false</ns4:zahtevanVnos></ns4:parameterPaketa><ns4:parameterPaketa><ns4:iidParPaket>25437</ns4:iidParPaket><ns4:iidPaket>441218</ns4:iidPaket><ns4:parameter><ns11:vrsta>ZNAKI</ns11:vrsta><ns11:prostiVnos>true</ns11:prostiVnos><ns11:naziv>Ste vedno prvi</ns11:naziv><ns11:jezik>sl</ns11:jezik><ns11:tip>LOV_GUMB</ns11:tip><ns4:iidParameter>448132</ns4:iidParameter><ns4:parameter>P275</ns4:parameter><ns4:casSekvenca>false</ns4:casSekvenca><ns4:ipo>true</ns4:ipo><ns4:kolicina>false</ns4:kolicina></ns4:parameter><ns4:zahtevanVnos>false</ns4:zahtevanVnos></ns4:parameterPaketa><ns4:parameterPaketa><ns4:iidParPaket>25438</ns4:iidParPaket><ns4:iidPaket>441218</ns4:iidPaket><ns4:parameter><ns11:vrsta>ZNAKI</ns11:vrsta><ns11:prostiVnos>true</ns11:prostiVnos><ns11:naziv>To je to</ns11:naziv><ns11:jezik>sl</ns11:jezik><ns11:tip>LOV_GUMB</ns11:tip><ns4:iidParameter>448133</ns4:iidParameter><ns4:parameter>P276</ns4:parameter><ns4:casSekvenca>false</ns4:casSekvenca><ns4:ipo>true</ns4:ipo><ns4:kolicina>false</ns4:kolicina></ns4:parameter><ns4:zahtevanVnos>false</ns4:zahtevanVnos></ns4:parameterPaketa><ns4:parameterPaketa><ns4:iidParPaket>25439</ns4:iidParPaket><ns4:iidPaket>441218</ns4:iidPaket><ns4:parameter><ns11:vrsta>DATOTEKA</ns11:vrsta><ns11:prostiVnos>true</ns11:prostiVnos><ns11:naziv>Kopija obstojeèe police</ns11:naziv><ns11:jezik>sl</ns11:jezik><ns11:tip>DATOTEKA</ns11:tip><ns4:iidParameter>448134</ns4:iidParameter><ns4:parameter>P277</ns4:parameter><ns4:casSekvenca>false</ns4:casSekvenca><ns4:ipo>true</ns4:ipo><ns4:kolicina>false</ns4:kolicina></ns4:parameter><ns4:zahtevanVnos>false</ns4:zahtevanVnos></ns4:parameterPaketa></ns10:vprasanja></ns10:vprasanjaZaVrstoPredmetaZavarovanja></ns6:vprasanjaZaUporabnika></input></ns8:ZapisiVprasanjaZaUporabnika></soap:Body></soap:Envelope> 0

响应headers + 响应body:

HTTP/1.1 400 status: 400 date: Mon, 24 Sep 2018 09:00:59 GMT server: Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips mod_fcgid/2.3.9 PHP/5.4.16 mod_python/3.5.0- Python/2.7.5 connection: close content-type: text/html; charset=iso-8859-1

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>400 Bad Request</title> </head><body> <h1>Bad Request</h1> <p>Your browser sent a request that this server could not understand.<br /> </p> <p>Additionally, a 400 Bad Request error was encountered while trying to use an ErrorDocument to handle the request.</p> </body></html> <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>503 Service Unavailable</title> </head><body> <h1>Service Unavailable</h1> <p>The server is temporarily unable to service your request due to maintenance downtime or capacity problems. Please try again later.</p> <p>Additionally, a 400 Bad Request error was encountered while trying to use an ErrorDocument to handle the request.</p> </body></html>

我怀疑当它在同一连接上的多个请求中发送数据块时,请求期间出现问题。不太确定,因为我是第一次这样做。

我正在使用 Laravel 5.6.38。下面是从应用程序调用的代码:

public function handle(Request $request) {   
        $opts = array(
             'http' => array(
                'Content-Type' => 'text/xml; charset=utf-8',
                'User-Agent' => 'PHP/SOAP',
                'Allow' => 'GET,POST',
                'Accept-Encoding:' => 'gzip, deflate, br',            
            ));`
        $context = stream_context_create($opts);

        $soapOptions = array(
            'stream_context' => $context,
            'cache_wsdl' => WSDL_CACHE_NONE,
            'encoding' => 'UTF-8',
            //'uri' => public_path().'/soap/storitve/app/onlineGorillaMobile/v1/OnlineGorillaMobile.wsdl'
        );

        try {
           $server = new \SoapServer(public_path().'/soap/storitve/app/onlineGorillaMobile/v1/OnlineGorillaMobile.wsdl', $soapOptions);
        //$server = new \SoapServer(null, $soapOptions);
        }
        catch (\SoapFault $sf) {
            Log::channel('soap')->info("SOAPfault: ".$sf->faultstring." (".$sf->faultcode.")");
        }

        $server->setObject(new Soap());
        ob_start();
        $server->handle();
        $response = ob_get_clean();


        return response($response)->header('Content-Type', 'text/xml; charset=UTF-8')->header('Host', env('HEADER_HOST'))->header('Allow', 'GET,POST');
    }

以下是针对每个请求生成的一些日志数据:

ob_get_status(真)

  0 => 
  array (
    'name' => 'default output handler',
    'type' => 0,
    'flags' => 112,
    'level' => 0,
    'chunk_size' => 4096,
    'buffer_size' => 8192,
    'buffer_used' => 0,
  ),
)  

headers_list()

array (
  0 => 'X-Powered-By: PHP/7.2.3',
  1 => 'Content-Type: text/xml; charset=utf-8',
) 

$this->_client->__getLastRequestHeaders()

POST /ponudbe-storitve-3.0.0/OnlineGorilla/OnlineGorilla HTTP/1.1
Host: xxxx-nabava.xxxxxxxx.com
Connection: Keep-Alive
User-Agent: PHP-SOAP/7.2.3
Content-Type: text/xml; charset=utf-8
SOAPAction: "http://wtb.si/storitve/app/onlineGorilla/v1/VpisiProfilUporabnikaInPolice"
Content-Length: 263972

邮递员截图:

很抱歉 post 但是我已经与这个问题斗争了一个星期了,我感到很绝望,所以我们将不胜感激。

编辑:

一些附加信息:

当 Postman 发送带有 Transfer-Encoding 的请求时:chunked header 显示日志记录同时停止 $server = new SoapServer('.......行被调用

[2018-09-24 14:27:57] local.INFO: initiating SoapServer  
[2018-09-24 14:27:57] local.INFO: array (
)  
[2018-09-24 14:28:02] local.DEBUG: array (
)

没有 Transfer-Encoding 日志记录将继续进行。所以整个请求在那个点停止。

此致

我想到了以下问题的解决方案:

调用我们的 Soap 服务的应用程序在 Java Apache CXF 上,所以我们所要做的就是在他们这边禁用分块 并且做到了。