Javascript - XMLHttpRequest tut nicht, warum?

OP (Firma: Q3) #6136782
Lesenswert?

Kann mir mal jemand bitte einen Tip geben, warum das Script nach der 
markierten Stelle einfach nix mehr tut? Die enthaltenen Zugangsdaten 
sind echt, aber kein Problem, es ist ein Testsystem. Danke für Hilfe!
1
<html>
2
<head>
3
    <title>SOAP JavaScript Client Test</title>
4
    <script type="text/javascript">
5

6
        function soapTest()
7
        {
8
            var request = new XMLHttpRequest();         
9
            var xmls = "";
10

11
            xmls+="<?xml version='1.0' encoding='utf-8'?>";
12
            xmls+="<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/' ";
13
            xmls+="xmlns:ns='http://dpd.com/common/service/types/LoginService/2.0'>";
14
            xmls+="<soapenv:Body>";
15
            xmls+="<ns:getAuth>";
16
            xmls+="<delisId>sandboxdpd</delisId>";
17
            xmls+="<password>xMmshh1</password>";
18
            xmls+="<messageLanguage>de_DE</messageLanguage>";
19
            xmls+="</ns:getAuth>";
20
            xmls+="</soapenv:Body>";
21
            xmls+="</soapenv:Envelope>";
22
               
23
            request.open("POST", "https://public-ws.dpd.com/services/LoginService/V2_0/?wsdl", false);
24
            request.setRequestHeader("SOAPAction","http://dpd.com/common/service/LoginService/2.0/getAuth");
25
            request.setRequestHeader("Content-Type", "text/xml");
26
           
27
            alert(xmls);
28
            alert("es get los ...");
29

30
            request.send(xmls);    //<====== hier geht nix mehr :-(
31

32
            alert("es ist durch ...");
33
            alert(request.responseText);
34
        }
35
    </script>
36
</head>
37
<body> 
38
            <input type="button" value="Soap" onclick="soapTest();" />
39
</body>
40
</html>

Der letzte Parameter bei request.open() ist mit Absicht "false", d.h. 
das Script wartet, bis ein Ergebnis kommt (synchron), ansonsten rauscht 
es dort einfach durch (asynchron), aber Ergebnisse kommen dann auch 
keine ... nichtmal eine Fehlermeldung. Damit ist der Server ansonsten 
sehr freigiebig
OP (Firma: Q3) #6136819
Lesenswert?

3.14 schrieb:
> Gibt es irgendeine Meldung in der Entwicklerkonsole?

guter Hinweis, hatte ich übersehen:

"Quellübergreifende (Cross-Origin) Anfrage blockiert: Die 
Gleiche-Quelle-Regel verbietet das Lesen der externen Ressource auf 
https://public-ws.dpd.com/services/LoginService/V2_0/?wsdl. (Grund: 
CORS-Kopfzeile 'Access-Control-Allow-Origin' fehlt)."

Habe das File auf dem Desktop liegen und nicht in einem Server. Brrrr
Gast #6136883
Lesenswert?

Frank E. schrieb:
> 3.14 schrieb:
> Gibt es irgendeine Meldung in der Entwicklerkonsole?
>
> guter Hinweis, hatte ich übersehen:
>
> "Quellübergreifende (Cross-Origin) Anfrage blockiert: Die
> Gleiche-Quelle-Regel verbietet das Lesen der externen Ressource auf
> https://public-ws.dpd.com/services/LoginService/V2_0/?wsdl. (Grund:
> CORS-Kopfzeile 'Access-Control-Allow-Origin' fehlt)."
>
> Habe das File auf dem Desktop liegen und nicht in einem Server. Brrrr

Setz dir ein Apache auf (Standardkonfiguration) und mach deine Projekte 
darin. Aber sei vorsichtig, dass keine Portfreigaben eingerichtet sind. 
Das Problem wird aber bleiben. Um es zu beheben, hast du die Möglichkeit
a) den Serverdienst auf den eigenen Server verfrachten (evtl. PHP oä 
installieren)
b) JSONP verwenden (ist viel einfacher, als es klingt)
OP (Firma: Q3) #6137162
Lesenswert?

So Passwort geändert ... ist aber m.E: unkritisch, weil eh nur Sandbox.

Aber: Ich habe das Script jetzt in den Apache meiner Synology versetzt, 
anstatt direkt als File zu öffen. Es "klemmt " aber immer noch an der 
gleichen Stelle.

Ursprünglich dachte ich ja an ein Rechte-Problem: Von wegen File und 
aktive Inhalte - Browser haben da sehr eigene Ansichten - ist aber 
nicht. Bis zum ersten Alert wird es ausgeführt und dann ist Ende. Auch 
kein Timeout, es sei denn, dieses ist 20min lang ... Mist.
OP (Firma: Q3) #6137169
Lesenswert?

Ich habe mich jetzt nochmal zum Thema CORS belesen - "tolle" Erfindung.

Das heisst am Ende, ich kann keinen XMLHttpRequest auf eine Domäne 
machen, in der nicht auch mein eigenes Script liegt. Das ist echt super 
z.B. für die Kontaktaufnahme zu einem Paketdient ...

Damit ist dieser Versuch wohl erledigt.
#6137213
Lesenswert?

Frank E. schrieb:
> Ich habe mich jetzt nochmal zum Thema CORS belesen - "tolle"
> Erfindung.
>
> Das heisst am Ende, ich kann keinen XMLHttpRequest auf eine Domäne
> machen, in der nicht auch mein eigenes Script liegt. Das ist echt super
> z.B. für die Kontaktaufnahme zu einem Paketdient ...
>
> Damit ist dieser Versuch wohl erledigt.

Das hat ja auch seinen Grund. Aus Sicherheitstechnicher Sicht wäre dies 
ein absoluter Super-Gau. Und wie bereits erwähnt kann man dies 
"freischalten" auf dem Server. Dies macht man aber auch nur für bekannte 
IPs.

Wenn der Paketdienst eine "Kontaktaufnahme" wünscht. Dann stellt er auch 
eine Möglichkeit dazu bereit (JSON, XML File, UDP Req,...).

Wie wäre es in diesem Fall, wenn du einfach mal den Paketdienst fragst 
welche Möglichkeiten er bietet die nötigen Informationen zu bekommen?


Hier eine API von DPD:

https://www.shippypro.com/dpd-API.html

Wie man sieht ist diese nicht kostenfrei, deswegen wird es auch keine 
kostenfreie Schnittstelle nach außen geben. ?
Gast #6139838
Lesenswert?

Frank E. schrieb:
> Ich habe mich jetzt nochmal zum Thema CORS belesen - "tolle" Erfindung.
>
> Das heisst am Ende, ich kann keinen XMLHttpRequest auf eine Domäne
> machen, in der nicht auch mein eigenes Script liegt. Das ist echt super
> z.B. für die Kontaktaufnahme zu einem Paketdient ...
>
> Damit ist dieser Versuch wohl erledigt.

Google mal nach "CORS-Proxies". Statt per XMLHttpRequest direkt auf die 
gewünschte Resource zuzugreifen, schickt man seinen Request stattdessen 
an den CORS-Proxy, teilt ihm mit, auf welche URL man eigentlich 
zugreifen möchte, und bekommt dann vom Proxy die gewünschte Ressource 
zurückgeliefert, aber mit passendem "Access-Control-Allow-Origin 
*"-CORS-Header.

Und schwupps, schon hat man das völlig schwachsinnige Sicherheitskonzept 
hinter CORS einfach ad absurdum geführt.
Gast #6139858
Lesenswert?

CORS-Liebhaber schrieb:
> Und schwupps, schon hat man das völlig schwachsinnige Sicherheitskonzept
> hinter CORS einfach ad absurdum geführt.

No, hat man nicht. Der sinn von cors ist es unter anderem, dass eine 
seite nicht einfach so im nahmen eines anderen anhand seiner session 
genutzt werden kann. Ein cors proxy hat einen anderen origin, und damit 
nicht die selben session cookies. Natürlich muss das mit techniken wie 
stp kombiniert werden, um effektiv zu sein. Ein anderer Aspekt ist, dass 
dank CORS webbrowser nicht als proxies misbraucht werden können.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren