2017-02-16 13 views
2

XmlHttpRequestオブジェクトを使用して、JavaScriptでPOSTメソッドでxmlを送信しようとしています。 私のサーバーには、SOAPリクエストを受け取るWebサービスがあります。WildflyはOPTIONSメソッドを許可しますが返す405メソッドが許可されていません

xmlを送信するときに、ブラウザはプリフライトOPTIONS要求をサーバーに送信しようとしますが、OPTIONS 405 Method Not Allowedが返されます。

問題は私の応答ヘッダーにAccess-Control-Method-Allowed : POST,OPTIONS,GET,PUTがあるので、私のサーバーはOPTIONSメソッドを受け入れると思うが、私のWebサービスは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プロトコルのリクエストヘッダです:

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 

任意の提案:

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プロトコルのレスポンスヘッダーですか?

答えて

3

問題は、私は私の応答にアクセス制御 - 方法 - 可ヘッダたことである:POST、OPTIONS、GETは、私は私のサーバーは、OPTIONSメソッド

を受け入れると思いますので、PUT

これは、そのヘッダーを入れているリクエストに応答したときに、であることをブラウザに伝えていることを意味します。クロスオリジンのOPTIONS要求が可能です。

405 Method Not Allowedではなく、200 OKというOPTIONSリクエストに対してサーバを応答させることは絶対にありません。

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

確かに、あなたは正しいです。 Webサービスコードにアクセスできないので、xmlhttprequest :)を使用しないミドルウェアサービスで他のソリューションを開発します:)ありがとう –

関連する問題