Warum ist der Schrägstrich im Web-Service so wichtig?

7

Ich habe einen Webservice in PHP und Python getestet. Die Adresse des Webdienstes war, sagen wir, http://my.domain.com/my/webservice . Als ich den Web Service in PHP mit dieser URL getestet habe, hat alles funktioniert. Aber, als ich den gleichen Ort benutzte, aber in Python mit SOAPpy habe ich einen Fehler bekommen.

Unten ist der Code, den ich verwendet habe, um mit dem Webdienst (Python) zu kommunizieren:

%Vor%

Die Antwort, die ich vom Server bekommen habe:

%Vor%

Ich finde heraus, dass, wenn ich dem web service location einen Schrägstrich hinzufüge, es funktioniert!

%Vor%

Warum verursacht der fehlende Schrägstrich den Fehler?

    
czuk 27.07.2009, 15:43
quelle

5 Antworten

19

Sie sind verschiedene URLs. http://my.domain.com/my/webservice impliziert eine Datei webservice im Ordner my . http://my.domain.com/my/webservice/ impliziert das Standarddokument im Ordner "my / webservice".

Viele Webserver korrigieren solche URLs automatisch, müssen dies jedoch nicht tun.

    
Yuliy 27.07.2009, 15:46
quelle
3

Da die tatsächliche Server-URL lautet: Ссылка

Die PHP-Bibliothek muss standardmäßig Weiterleitungen folgen.

    
jsight 27.07.2009 15:45
quelle
3

Der Fehler ist eine 301-Weiterleitung, was bedeutet, dass Sie mit dem Schrägstrich am Ende vom Webserver auf die URL umgeleitet werden.

Es scheint, dass PHP dieser Umleitung automatisch folgt und somit den Fehler nicht auslöst, Python dagegen nicht. Sie müssen Folgendes tun:

  1. Versuchen Sie, eine Verbindung zur ursprünglichen URL herzustellen
  2. Fange 301 Weiterleitungen und möglicherweise auch 302 Weiterleitungen
  3. Wenn es eine Weiterleitung gab, versuchen Sie stattdessen, sich mit dieser URL zu verbinden.

Die neue URL sollte in den Antwortheadern verfügbar sein.

HTH.

    
Frozenskys 27.07.2009 15:56
quelle
2

[Haftungsausschluss: Dies ist eine Kopie meiner Antwort von hier . Ich weiß, dass manche Leute diese Art des Kopierens nicht mögen, aber das erklärt, warum der Schrägstrich wichtig ist.]

Stellen Sie sich vor, Sie bedienen eine Seite

%Vor%

das enthält

%Vor%

Beim Klicken ruft der Browser des Benutzers http://mydomain.com/more.html auf. Hatten Sie stattdessen serviert

%Vor%

(mit dem gleichen Inhalt), würde der Browser http://mydomain.com/bla/more.html abrufen. Um diese Mehrdeutigkeit zu vermeiden, hängt die Umleitung einen Schrägstrich an, wenn die URL auf ein Verzeichnis verweist.

    
balpha 27.07.2009 15:50
quelle
0

Wie eine SOAP-URL aussieht, hängt vom Server ab, ob ein Schrägstrich erforderlich ist, hängt vom Server und der SOAP-Implementierung ab.

In Ihrem Fall gehe ich davon aus, dass der Zielserver ein Apache-Server ist und die SOAP-URL ein Verzeichnis ist, das Ihr SOAP-Skript enthält. Wenn Sie auf dem Server auf Ссылка zugreifen, entscheidet Apache, dass das Verzeichnis ordnungsgemäß adressiert ist als Ссылка und sendet eine 301-Weiterleitung.

SOAP verwendet einen http POST, es ist dem Client überlassen zu entscheiden, ob der Redirect befolgt werden soll oder nicht, ich nehme an, dass er es nicht erwartet.

Andere Implementierungen von SOAP, z.B. Apache Axis in Java haben URLs, die wie Servlets aussehen, z. Ссылка ohne Schrägstrich, in diesem Fall ist die URL ohne Schrägstrich korrekt, es existiert sowieso kein Verzeichnis.

Axis schlägt auch bei Umleitungen fehl, denke ich.

    
Alex Lehmann 27.07.2009 16:01
quelle

Tags und Links