Blogia
Geeks i d'altres

Method HEAD

El meu objetiu es que el server web sigi el més estandar posible. Una de les pases per aconseguir, és que pugi acceptar més methods que simplement GET's.
Per a ser "validat" com a HTTP 1.1 basta acceptar GETs i HEADs, i l'unic que diferència el HEAD del GET es que amb el HTTP Response no s'inclouen les dades que es demanen al HTTP Request. Com ja sabeu, un response es forma a partir dels headers i les dades; ido en el cas d'una petició HEAD domés es retornen els headers, les dades NO.

Aixó es molt facil d'implementar. Per a saber si ens trobam davant un method GET o HEAD, empram aquest codi (una vegada que ja hem lletgit el HTTP Request del socket).

if(request[0] == 'G' && request[1] == 'E' && request[2] == 'T') {
     method = GET;
     longi = 5;
}
else {
     method = HEAD;
     longi = 6;
}


Si algú té una suggerencia per a fer la comprovació anterior més "elegant", sóc tot orelles ;). Com podeu imaginar, abans hem definit el GET i el HEAD ..

#define GET 0
#define HEAD 1


Ara que ja sabem si tenim un GET o un HEAD, el que em de fer es afegir les dades en cas de que sigi un GET.

if(method == GET) {
     strcat(response,data);
}


Com veis, és una "pixarada de ca", com es diu per aqui. Encara no he penjat la nova versió perque aquests dies estic sense ordenador, perque la font d'alimentació es va cansar de treballar sense descans i va dir prou, i com que no he pogut probar-ho com toca no vull penjar un codi que façi coses extranyes (encara que no seria la primera vegada .. :D).

El pròxim objectiu: que presenti imatges, i no tan sols texte plà i pagines html.
Fins una altra!

5 comentarios

Guti -

Me refería a un else if, no un else.

Respecto a memcmp, te permite comparar dos bloques de memoria, tambíen valdría strcmp, pero memcmp suele ser más eficiente, sobretodo si conoces la longitud de la cadena con la que comparar.

seterom -

hey! tu blog esta muy bien... de geek frustrado yo creo que nada... res en catala? : ) saludos desde asturias y sigue asi con el blog.

servomac -

En el tema del else tienes razón, porque aunque es posible que me pidan algo que no sea ni GET ni HEAD, no tendré código aducuado para actuar en consequencia, así que te haré caso y todo lo que no sea un GET se tratara como HEAD :P.

La función memcmp no la conozco, pero en un momento me lo miro.

¡Gracias compañero!

Guti -

Más elegante lo puedes hacer con un else if para el HEAD en vez de un if.

Más eficiente utilizando memcmp en vez de la comparación caracter a caracter.

servomac -

L'html d'aquesta pàgina és una cagada.

ACLARACIÓ: Els "&nbsp" que es veuen al codi es suposa que són espais en blanc (SP).