Si un suposat PDF o full de càlcul comença amb HTTP/1.1 200 OK, el baixador ha desat una resposta crua en lloc del fitxer. Aquesta resposta esquemàtica només conté quatre bytes de contingut:

HTTP/1.1 200 OK
Transfer-Encoding: chunked

4
DATA
0

El fitxer és DATA. La línia d'estat, les capçaleres, el marcador de mida i l'estructura de terminació pertanyen a HTTP. Eliminar un nombre fix de bytes no és segur perquè les longituds de les capçaleres varien. Copiar tot el que hi ha després de la primera línia en blanc encara deixa l'enquadrament de fragments, i les respostes informatives poden precedir la resposta final.

Per a una baixada normal, substituïu la còpia de sòcol cru a fitxer per la interfície de cos de resposta del client HTTP. Configureu-ne el servidor intermediari, valideu l'estat final i transmeteu el cos a una sortida temporal. El client gestiona l'enquadrament del missatge: els cossos delimitats per longitud, per fragments i per connexió requereixen anàlisis diferents.

La codificació del contingut és una capa més. Decidiu si necessiteu bytes del fitxer descodificats o contingut cru sol·licitat explícitament, segons el comportament documentat del client. Els bytes comprimits no són automàticament una corrupció del servidor intermediari.

Si l'aplicació ha de conservar codi a nivell de sòcol, assumeix totes aquestes regles d'anàlisi i també la gestió de lectura i escriptura. Escriviu només el nombre de bytes que realment retorna una lectura, no la capacitat del búfer, i gestioneu les escriptures parcials. En cas contrari, el contingut obsolet del búfer pot corrompre fins i tot un cos extret correctament.

HTTPS necessita més que despullar una resposta CONNECT: després d'establir el túnel correctament, establiu el TLS de destinació i després analitzeu la resposta HTTP interna. Els bytes xifrats que segueixen les capçaleres del servidor intermediari no són el fitxer baixable.

Deixeu la sortida fallida o incompleta amb un nom temporal. Publiqueu-la només quan la transferència i les comprovacions del fitxer hagin reeixit; un fitxer no buit no demostra una baixada completa.

Articles relacionats