Łukasz C.

Łukasz C. Senior Technical
Architect

Temat: protokol HTTP, pliki binarne

Witam,

jest sobie pewien serwerek http ktory otrzymuje request od klienta. Request jest "plikiem" php tak wiec poprzez cos a'la cgi zostaje uruchomiony php cli i w trakcie jego dzialania jest pobierany output z php. Ze wzgledu na rozne phpowe niuanse naglowek jest tworzony po stronie php. Rzadanie ma "zwrocic" plik binarny (np: pdf, xlsx) ktory jest generowany w locie.

GET /index.php HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; pl; rv:1.9.1.7) Gecko/20091221 Firefox/3.5.7
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: pl,en-us;q=0.7,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-2,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive

natomiast odpowiedz serwera:

HTTP/1.x 200 OK
Date: Tue, 02 Feb 2010 14:11:17 GMT
Server: XXX Shit Server
Content-Length: 1234
Content-Transfer-Encoding: binary
Content-Disposition: attachment; filename=dupa.pdf;
Content-Type: application/x-pdf

i wszystko niby dziala tzn: pokazuje sie okienko w przegladarce z wyborem gdzie zapisac plik, rozpoczyna sie download i .... zwis :S
sprawdzilem, naglowek i dane sa wysylane, content-length jest podane poprawnie wiec wtf :D?

czy ma ktos pomysl co w tym naglowku brakuje?
przegladarka zachowuje sie tak jakby nie wszystko zostalo wyslane i czeka na reszte danych.

czy dane binarne sa w jakis sposob kodowane?Łukasz Cepowski edytował(a) ten post dnia 02.02.10 o godzinie 15:29

konto usunięte

Temat: protokol HTTP, pliki binarne

i wszystko niby dziala tzn: pokazuje sie okienko w przegladarce z wyborem gdzie zapisac plik, rozpoczyna sie download i .... zwis :S
sprawdzilem, naglowek i dane sa wysylane, content-length jest podane poprawnie wiec wtf :D?

Masz wlaczone buforowanie danych? Robisz flush() lub ob_flush() w skrypcie wysylajacym plik?

Sprobuj tez wyslac takie naglowki:

header('Cache-Control: no-store, no-cache, must-revalidate',true);
header('Cache-Control: post-check=0, pre-check=0');
// HTTP/1.0 - no cache
header('Pragma: no-cache');
// return proper HTTP headers to the client
header('Content-Description: File download');
header('Content-Length: '.filesize($target));
header('Content-Type: '.$mime);
header('Content-Disposition: attachment; filename="'.basename($target).'"');


Co powinny byc w zmiennych $target i $mime pewnie sie domyslasz.
Sprobuj tez zlapac pakiety skladajace sie na ta transakcje i zobacz czy w ogole jakies dane sa wysylane, a jesli tak na jakim etapie komunikacja sie urywa.

Dane mozesz miec skompresowane gzipem jesli serwer to wspiera --> klient wysyla naglowek "Accept-Encoding: gzip,deflate".Łukasz S. edytował(a) ten post dnia 02.02.10 o godzinie 16:03
Jarosław Rafa

Jarosław Rafa senior software
engineer, Motorola
Solutions Systems
Polska

Temat: protokol HTTP, pliki binarne

Może spróbuj dołozyć "Connection: close" do nagłówka?
Jakub L.

Jakub L. Programista

Temat: protokol HTTP, pliki binarne

A wgetem pobiera poprawnie?

Temat: protokol HTTP, pliki binarne

wireshark i jazda analizuj ;]
Paweł R.

Paweł R. System administrator

Temat: protokol HTTP, pliki binarne

Problem z PMTU ?
Łukasz C.

Łukasz C. Senior Technical
Architect

Temat: protokol HTTP, pliki binarne

chyba wiem w czym problem ale musze to jeszcze sprawdzic,
dane z php sa pobierane przez serwer ktory jest w c++ do zwyklego stringa, i poprostu natrafia na bajty zerowe i nie wysyla nic dalej...

Następna dyskusja:

router oparty na linuksie z...




Wyślij zaproszenie do