2015-02-10, 22:13
  #1
Medlem
AquaRegias avatar
Jag har sttt p en mycket intressant bugg. Jag har en vldigt simpel server (exemplet nedan skrivet i Python):

Kod:
import socket

socket.socket()
s.bind(("0.0.0.0"80))
s.listen(10)

while 
1:
    
connaddr s.accept()
    
    
conn.sendall("""
    <!DOCTYPE html>
    <html>
        <head>
            <title></title>
        </head>
        <body>
            <h1>HTTP</h1>
        </body>
    </html>
    """
)
                
    
conn.close() 

S fort en klient kopplar upp sig s skickar servern en enkel HTML-sida. Detta fungerar i alla webblsare.

Men om man erstter:

Kod:
<h1>HTTP</h1

med:

Kod:
<h1>HTTP </h1

s slutar det fungera i IE, man fr bara upp en vit sida istllet.

Detta skulle kunna frklaras med att IE har taskigt std fr HTTP 0.9, att ifall den endast fr en fil som svar s frsker den fortfarande parse:a fram statusrad och headers, ven om det inte borde pverka just strngen "HTTP "?

Som om det hr inte var konstigt nog s finns det nnu en pusselbit. Om jag har ett liknande program som ovan, fast skrivet i Java, dr jag anvnder metoden DataOutputStream.write (http://docs.oracle.com/javase/7/docs...te(byte[])) fr att skriva till socketen, d ger det samma problem. Men om jag istllet anvnder metoden DataOutputStream.writeBytes (http://docs.oracle.com/javase/7/docs...a.lang.String)) s fungerar det.

Vad? Hur? Varfr?
Citera
2015-04-18, 02:58
  #2
Medlem
Snuskass avatar
Jag har tyvrr inte kunnat testa med ldre versioner av IE, men det fungerar tminstone felfritt i IE 11. Knns inte som en bugg. Fr du felet med samma version, s kanske du istllet i din kod har ftt ett ogiltigt tecken, som inte kan visas eller som renderas som ett mellanslag.

Jag satt en gng och felskte varfr en text inte radbrts, vilket snkte en kundsajts design. Det visade sig vara webbredaktren som lagt in nbsp:s istllet fr vanliga mellanslag. Detta syntes inte i dtidens utvecklarpanel (om det ens fanns ngon...) s det tog en stund att hitta felet. Jag lste det genom att skriva en javascript-alert p teckenkoden och sg d att hexkoden matchade non-breaking space ... :-) Du kan ju alltid testa samma teknik; bara att kra en copy+paste till en strng och kr en alert p getCharCodeAt(), i en lokal html-fil.

Kolla ven vad du skickar fr encoding-attribut i dina HTTP-headers. UTF-8 r skrast, skulle jag sga. (Ngon fr grna rtta mig, det r kul med ny kunskap.) Komplettera detta med en meta-tagg i sidkoden:
Kod:
<meta charset="UTF-8">
Citera

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in