WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   C och CGI (https://www.wn.se/forum/showthread.php?t=29993)

Drew 2008-06-17 21:17

Jag håller på att skriva om en av mina sidor från php till C, men jag har stött på problem med kakor.

Om jag gör som man ska och skriver
Kod:

        printf("Content-type: text/html\n\n");
        printf("set-cookie: kaka=test; path=/\n\n");

så skriver den ut "set-cookie: kaka=test; path=/" överst på sidan och sätter ingen kaka.
Om jag skriver
Kod:

        printf("set-cookie: kaka=test; path=/\n\n");
        printf("Content-type: text/html\n\n");

så sätts kakan, men den skriver ut html-koden istället för att visa sidan.

Någon som har något trevligt förslag till lösning? Kan det vara min apache som är felkonfigurerad och isåfall hur?

martine 2008-06-17 21:37

Kan hända att jag är på fel spår här men konventionen efter headers är väl \r\n och inte \n\n?

Edit: Vore ju logiskt, två radbrytningar i http betyder ju "slut på headern, innehållet börjar".

Drew 2008-06-17 21:51

\n\n ger två radbrytningar. \r\n ger bara en, det skulle isåfall vara \r\n\r\n.
\n = newline
\r = carriage return

Men tack ändå
Citat:

två radbrytningar i http betyder ju "slut på headern, innehållet börjar".
Givetvis är det så.
Kod:

printf("Content-type: text/html\n");
printf("set-cookie: kaka=test; path=/\n\n");

ska de ju vara.

martine 2008-06-17 22:01

Citat:

Originally posted by Drew@Jun 17 2008, 21:51
\n\n ger två radbrytningar. \r\n ger bara en, det skulle isåfall vara \r\n\r\n.
\n = newline
\r = carriage return

\n = unix-radbrytning
\r = mac-radbrytning
\r\n = windowsradbrytning

Därutöver finns unicode-radbrytning (0x0085) och unicode-styckesbrytning (0x2029) och ett par till om vi ska vara riktigt petiga.

Av någon anledning (kanske för att det alltid ska fungera såväl unix/mac/windows) så blev \r\n standard för mime.

Jake.Nu 2008-06-18 00:15

Standarden säger CRLF (alltså \r\n) vad jag vet.

T.ex. när du hämtar en sida.
Kod:

GET / HTTP/1.0\r\n
Host: www.domain.tld\r\n
Connection: close\r\n
\r\n


martine 2008-06-18 01:14

Citat:

Originally posted by Jake.Nu@Jun 18 2008, 00:15
Standarden säger CRLF (alltså \r\n) vad jag vet.
Ja, det var det jag tänkte, så är det ju i alla fall uttryckt i klartext i någon rfc för mime-standarden men för http är jag inte säker om det måste vara \r\n eller om \n räcker. Telnettar man på unix så vet man ju inte vad man skickar… (Och sen vet man ju inte om det man kör med bara råkar fungera med en viss server eller alltid fungerar, alltså är väl \r\n säkrast?)

Jake.Nu 2008-06-18 16:10

Ibland fungerar (tyvärr) \n också eftersom tillverkarna bygger in "skydd" mot dåligt programmerade server/klient applikationer.

Detsamma gäller för epostmeddelanden där alla headers (i själva meddelandet) också skall avslutas med CRLF.
SMTP fungerar likadant, CRLF avslutar en rad (som för övrigt bara får vara max 1023 tecken har jag för mig).

Kör som standarden säger: CRLF.


Alla tider är GMT +2. Klockan är nu 14:30.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson