2015-05-25 12:31 GMT+03:00 Georgiana Diana via so <[email protected]>: > Salut, > Atunci cand raspundem unui request de la un client, trebuie sa trimitem si > un antet HTTP (200 sau 404, dupa caz), dupa care sa trimitem fisierul. Am > doua intrebari legate de acest lucru: > > 1) Este okay sa trimitem antetul cu functia send [1] (prin apeluri repetate, > pentru ca socket-ul nu permite o dimensiune foarte mare a bufferului) sau > exista un mod mai elegant de a face acest lucru ?
Da, este ok. Pe Windows, TransmitFile() are un parametru lpTransmitBuffers pentru a preciza un header/trailer. > 2) Daca trimit mai intai antetul si apoi fisierul, atunci cand se compara > fisierul obtinut de client si cel initial, trimis de server, cmp esueaza, > pentru ca in fisierul primit de client se afla si antetul. Am vazut ca in > testele care testeaza (scuze de repetare) existenta antetului (de ex, testul > 13), se foloseste redirectare catre un fisier, iar testele care compara cele > doua fisiere (sursa si destinatie), folosesc wget (de ex, testul 17). Nu imi > dau seama cum sa rezolv aceasta problema, anume faptul ca apare si antetul > HTTP in fisierul primit de client. wget nu ar trebui să salveze răspunsul HTTP în fișier. Asigură-te că răspunsul HTTP trimis de tine este corect și conține: * linia de status * header-ele Content-Type, Content-Length, Connection * linie goală (CRLF) Vezi exemple de headere HTTP la [2]. Dacă problema nu este de aici, revin-o cu mai multe detalii. > > [1] http://linux.die.net/man/3/send > [2] http://elf.cs.pub.ro/so/res/teme/tema5-util/http-parser/test.c Adrian _______________________________________________ http://ocw.cs.pub.ro/courses/so/info/lista-discutii
