2017-02-16 18 views
2

Я пытаюсь отправить xml с помощью метода POST в javascript, используя объект XmlHttpRequest. На моем сервере у меня есть веб-служба, которая получает запрос SOAP.Wildfly allow OPTIONS Методы, но возврат 405 Метод не разрешен

Когда я хочу отправить xml, браузер сначала пытается отправить запрос на запрос OPTIONS на сервер, но он возвращает OPTIONS 405 Method Not Allowed.

Проблема заключается в том, что у меня в ответе заголовок Access-Control-Method-Allowed : POST,OPTIONS,GET,PUT, поэтому я предполагаю, что мой сервер принимает метод OPTIONS, но мой веб-сервис понимает только POST.

Вот код:

var xmlhttp = new XMLHttpRequest(); 
xmlhttp.open('POST', url, false); 
var sr = mySoapRequest; //Here's my XML 

xmlhttp.onreadystatechange = () => { 
    if (xmlhttp.readyState == 4) { 
     if (xmlhttp.status == 200) {       
      var xml = xmlhttp.responseXML; 
      console.log(xml); 
      this.showAlert(xml); 
     } 
    } 
} 
xmlhttp.setRequestHeader("content-type", "file/xml"); 
xmlhttp.send(sr); 

Вот мой запрос HTTP протокола заголовки:

Accept:*/* 
Accept-Encoding:gzip, deflate, sdch 
Accept-Language:fr-FR,fr;q=0.8,en;q=0.6,en-US;q=0.4 
Access-Control-Request-Headers:content-type 
Access-Control-Request-Method:POST 
Connection:keep-alive 
DNT:1 
Host:192.168.149.127 
Origin:http://192.168.149.1:8100 
Referer:http://192.168.149.1:8100/?ionicplatform=android 

Вот мой HTTP заголовки ответа протокола:

Access-Control-Allow-Credentials:true 
Access-Control-Allow-Headers:accept, authorization, content-type, x-requested-with 
Access-Control-Allow-Methods:GET, POST, OPTIONS, PUT 
Access-Control-Allow-Origin:* 
Access-Control-Max-Age:1 
Connection:keep-alive 
Content-Length:224 
Content-Type:text/xml;charset=UTF-8 
Date:Thu, 16 Feb 2017 10:25:33 GMT 
Server:WildFly/8 
X-Content-Type-Options:nosniff 
X-FRAME-OPTIONS:SAMEORIGIN 
X-Powered-By:Undertow/1 
X-XSS-Protection:1 

Любые предложения?

ответ

3

Проблема заключается в том, что я в своем ответе водосборника Access-Control-метод разрешенными: POST, OPTIONS, GET, PUT, так что я предполагаю, что мой сервер принимает методу OPTIONS

No.

Это просто означает, что, когда вы отвечаете на любой запрос, который вы помещаете в этот заголовок, вы сообщают обозревателю о том, что приемлемо делать запросы OPC для кросс-начала.

Это абсолютно ничего не значит, что ваш сервер отвечает на запрос OPTIONS с 200 OK вместо 405 Method Not Allowed.

This answer предлагает:

@OPTIONS 
@Path("{path : .*}") 
public Response options() { 
    return Response.ok("") 
      .header("Access-Control-Allow-Origin", "*") 
      .header("Access-Control-Allow-Headers", "origin, content-type, accept, authorization") 
      .header("Access-Control-Allow-Credentials", "true") 
      .header("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS, HEAD") 
      .header("Access-Control-Max-Age", "1209600") 
      .build(); 
} 
+0

Действительно, вы правы. Поскольку я не могу получить доступ к коду веб-сервиса, я разработаю другое решение с промежуточным сервисом, который не использует xmlhttprequest :) спасибо за ваш ответ –