Merkwürdiges verhalten von Links...

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Also ich stehe gerade total auf dem Schlauch... Ich bastel an PyLucid als WSGI-App und hänge gerade an einem Merkwürdigen Fehler...

Also ich erzeuge eine HTML-Seite mit folgenden Links:

Code: Alles auswählen

...
	<ul>
		<li><a href="/$install/tests/db_info/">DB connection Information</a></li>
		<li><a href="/$install/tests/module_admin_info/">Information about installed modules</a></li>
		<li><a href="/$install/tests/path_info/">Path/URL check</a></li>
	</ul>
...
vollständiger HTML-Source ist im Wiki: [wiki]Paste/120[/wiki]

So, das komische ist, das die URLs so nicht umgesetzt werden... Denn Firefox setzt sie quasi so um:
  • 1.) /tests/db_info
    2.) /$install/tests/module_admin_info/
    3.) /tests/path_info
Man sieht also das der 2. Link ok ist, aber bei den beiden anderen fehlt /$install/ :shock:

Das komische ist, das unter "Seiteninformation/Links" die Links alle richtig "aufgelöst" werden... Nur, mit "Live HTTP Headers" sehe ich das Firefox die anfragen schon falsch verschickt...

Ich hab mit gedacht, ok, vielleicht sprinnt Firefox... Aber auch mit epiphany-Browser ist das Ergebniss das selbe!

Also ich weiß echt nicht was da falsch läuft :evil:

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
rayo
User
Beiträge: 773
Registriert: Mittwoch 5. November 2003, 18:06
Wohnort: Schweiz
Kontaktdaten:

Hi

Ist ein $-Zeichen überhaupt in der URL erlaubt? dass sollte doch %xx heissen oder nicht? Weiss halt jetzt nicht was das Zeichen ist. (%20 ist ja ein Space)

Könnte ja daran liegen.

Gruss
BlackJack

Code: Alles auswählen

In [144]:import urllib

In [145]:urllib.quote('$')
Out[145]:'%24'
@jens: Sieht der (X)HTML Quelltext denn genau so aus wie das was Du gepostet hast? Also ich meine wenn Du ihn Dir im Firefox unter `Ansicht/Seitenquelltext anzeigen` ansiehst, dann ist überall das ``$install`` zu sehen?
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

BlackJack hat geschrieben:Also ich meine wenn Du ihn Dir im Firefox unter `Ansicht/Seitenquelltext anzeigen` ansiehst, dann ist überall das ``$install`` zu sehen?
Jup, das '$'-Zeichen ist vielleicht keine gute Idee... Ich hatte vorher statt "/$install/" einen Unterstrich, also "/_install/"... Ich brauche irgendwas um die Installations-Abteilung von den normalen Seiten zu trennen... Aber das "Escape"-Zeichen kann ich frei wählen...

Aber selbst als ich überhaupt kein "Zusatzzeichen" hatte, sondern einfach nur "/install/" funktionierte es nicht wie erwartet...

Wahrscheinlich ist es ein ganz dummer Fehler und ich komm einfach nicht drauf... Aber ich werde das ganze nochmal genauer untersuchen...

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

So, jetzt hab ich nochmal gezielt eine Anfrage mit Python RAW sockets gemacht... und siehe da, es klappt...

Das aufrufen der Seite mit dem Menu und den "Fehlerhaften" Links funktioniert und liefert eine Seite die in Ordnung ist. Und auch jeder Link, bei dem Firefox auf einer falschen Seite landet, funktioniert völlig normal... :shock:

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Also ich weiß nicht weiter... Ich dachte schon ich hätte den Fehler gefunden... Denn im HTML Header hatte ich den Tag http-equiv="expires" nicht geschlossen. Aber das war es auch nicht. Nun hab ich mal die HTML Datei total minimiert:

Code: Alles auswählen

<html>
<head><title>PyLucid Setup</title>
</head><body>
<a href="http://localhost:8080/install/tests/db_info/">DB connection Information</a>
<a href="http://localhost:8080/install/tests/module_admin_info/">Information about installed modules</a>
<a href="http://localhost:8080/install/tests/path_info/">Path URL check</a>
</body></html>
Diese Seite hab ich lokal als HTML-Datei gespeichert und in Firefox aufgerufen. Die ersten beiden Links klappen. Der dritte wird allerdings zu

Code: Alles auswählen

GET /tests/path_info HTTP/1.1\r\n
Das kann ich in Ethereal nachsehen :shock:

Jetzt muß ich doch mal Win hochfahren und mit dem IE testen...

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

jens hat geschrieben:Die ersten beiden Links klappen. Der dritte wird allerdings zu

Code: Alles auswählen

GET /tests/path_info HTTP/1.1\r\n
Hi Jens!

Das ist **normaler** HTML-Code. Das muss funktionieren.

Gibt es einen Unterschied, zwischen dem Verhalten deiner **Original**-Datei und einer komplett neuen Datei, wenn du für diese neue Datei den Code hier aus dem Forum kopierst? Dann hast du eventuell Probleme mit dem Coding oder mit unsichtbaren Zeichen.

Ich habe mir den Code aus dem Forum kopiert und unter Windows mit dem Firefox ausprobiert. Wie erwartet hat alles funktioniert. Es gab natürlich Fehler weil die Dateien bei mir nicht existieren, aber es wurden zumindest die richtigen URLs bemängelt.

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

verdammt, verdammt... Anscheinend spielt mir die ganze Zeit colubrid einen Streich! Erst als ich HttpMove modifiziert hab, sehe ich was passiert:

Code: Alles auswählen

class HttpMove(HttpException):
    """Automatically add a "Location:" header to the result."""
    msg = 'The resource has been moved to %s.'

    def __init__(self, url):
        sys.stderr.write("Move to: %s\n" % url)

        import inspect
        filename = inspect.stack()[1][1].split("/")[-1][-20:]
        sys.stderr.write(
            "%-20s line %3s\n" % (filename, inspect.stack()[1][2])
        )

        headers = [('Location', url)]
        self.headers += headers
        if '%s' in self.msg:
            self.msg = self.msg % url
Es wird also eine normale "Location"-Weiterleitung auf die falsche Seite gemacht...
Offensichtlich zeigt das aber "Live HTTP headers" nicht an :evil: Deswegen bin ich da nicht drauf gekommen...

Jetzt kann ich endlich untersuchen, warum das so ist...

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

So, jetzt hab ich es aber endgültig... (hoffe ich)... Also zum einen liegt es an meinem PATH_INFO prefix und dem fix_slash von colubrid. Der hat die HttpMoved-Weiterleitung ausgelöst...

Zum anderen hab ich mit path_info wohl keine gute Namenswahl bei meiner Methode getroffen :( Denn da gibt es wohl ein Problem mit: http://trac.pocoo.org/ticket/26

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Antworten