2016-07-01 16 views
0

です。:2つのこと:1つは、2つの異なるドメインからのjQueryとAngularのPOSTリクエストを発行していました。 I created a jsfiddleを使用して、同じドメインからの両方の要求をテストし、両方とも機能します。かなり一般的なものにして、設定値を入れ替えて、必要なサイトの基本HTTP認証でXML POSTリクエストをテストできるようにしました。もう1つは、角度$ httpサービスを使用して、Data-Typeヘッダーの結果が次のエラーになることです。Request header field Data-Type is not allowed by Access-Control-Allow-Headers in preflight response。だから私はそのヘッダーを削除しました。私は依然としてリクエストが1つのドメインからではなく、他のドメインでは動作していないのはまだ解決しています。私がそれを理解したら、私は更新し、解決済みとマークします。ここHTTP基本認証はjQuery POSTリクエストでは動作しますが、角度は

var mapstory = { 
    xml: '<?xml version="1.0" encoding="UTF-8"?> <wfs:Transaction xmlns:wfs="http://www.opengis.net/wfs" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" service="WFS" version="1.0.0" xsi:schemaLocation="http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.0.0/wfs.xsd"> <wfs:Update xmlns:feature="http://www.geonode.org/" typeName="geonode:dja_remote_service_edit_test"><ogc:Filter xmlns:ogc="http://www.opengis.net/ogc"><ogc:FeatureId fid="garbage_id" /></ogc:Filter></wfs:Update></wfs:Transaction>', 
    url: 'https://demo.mapstory.org/geoserver/wfs/WfsDispatcher', 
    auth: authToken //base64 encoded string of 'user:password' 
}; 

$.ajax({ 
    url: mapstory.url, 
    beforeSend: function(xhr) { 
    xhr.setRequestHeader("Authorization", "Basic " + mapstory.auth); 
    }, 
    type: 'POST', 
    contentType: 'text/html', 
    dataType: 'xml', 
    processData: false, 
    data: mapstory.xml, 
    success: function(data) { 
    console.log(data); 
    } 
}); 

はレスポンスヘッダである:予想通り、基本認証では、次のjQuery POSTリクエストが機能/更新

Access-Control-Allow-Credentials: true 
Access-Control-Allow-Headers: Origin,Content-Type,Accept, Authorization, x-requested-with 
Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT, DELETE 
Allow: GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS 
Connection: keep-alive 
Content-Length: 0 
Date: Fri, 01 Jul 2016 21:06:50 GMT 
Server: nginx 
access-control-allow-origin: http://localhost:8888 

しかし、AngularJSに下記(v1.2.21)のdoesnの仕事:

var mapstory = { 
    xml: '<?xml version="1.0" encoding="UTF-8"?> <wfs:Transaction xmlns:wfs="http://www.opengis.net/wfs" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" service="WFS" version="1.0.0" xsi:schemaLocation="http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.0.0/wfs.xsd"> <wfs:Update xmlns:feature="http://www.geonode.org/" typeName="geonode:dja_remote_service_edit_test"><ogc:Filter xmlns:ogc="http://www.opengis.net/ogc"><ogc:FeatureId fid="garbage_id" /></ogc:Filter></wfs:Update></wfs:Transaction>', 
    url: 'https://demo.mapstory.org/geoserver/wfs/WfsDispatcher', 
    auth: authToken //base64 encoded string of 'user:password' 
}; 

var config = { 
    withCredentials: true 
}; 

config.headers = { 
    'Authorization': 'Basic ' + mapstory.auth, 
    'Content-Type': 'text/html', 
    'Data-Type': 'xml' 
}; 

$http.post(mapstory.url, mapstory.xml, config) 
.success(function(data) { 
    console.log(data); 
}); 

私はこのreから次の応答ヘッダーを受け取りますクエスト:

Content-Language: en 
Content-Type: text/xml;charset=UTF-8 
Date: Fri, 01 Jul 2016 20:52:13 GMT 
Server: WSGIServer/0.1 Python/2.7.11 
Vary: Accept-Language, Cookie 
X-Frame-Options: SAMEORIGIN 

私は上記の角度の要求から有効なXMLレスポンスを得るが、応答は要求が許可されなかったことを示しています。

Content-Typeの値をapplication/xmlに置き換えようとしましたが、これは結果に影響しませんでした。

私はAngular $ httpのドキュメントを読んで、同様の問題を説明しているthis Stack Overflow questionなどの他の多くのリソースにアクセスしました。推奨される解決策は、X-Requested-Withデフォルトヘッダーを削除することです。このステップは、1.2以上のAngularバージョン(Angular's Githubの場合はhere'sの閉鎖問題)では明らかに必要ではありませんが、どうしようもありませんでした。運がない。

これに関するガイダンスはすばらしいと思います。 非常にこれを読んで、これを考慮する時間を取るために多くをありがとう!

+1

リクエストヘッダはどのように異なるのですか?あなたが2つの異なる反応を得ているならば、***は何らかの形で違いがなければなりません。そして、それは欠けているものについてのかなり良い手がかりになるはずです。 –

答えて

-1

サーバが角度を同じドメインアプリケーションとして認識しないようです。ですから、Webサーバーのヘッダーにaccess-control-allow-origin:*という値を含めることで、 "外部"ドメインからの要求を許可することができます。

関連する問題