[HTTP] questions sur le protocole

questions sur le protocole [HTTP] - Programmation

Marsh Posté le 10-02-2002 à 14:03:27    

Je vais créer un topic unique pour mes questions sur ce protocole car sinon, en quelques jours, la première page de cette section sera remplie avec mes posts ;)
 
Contexte:
je dois coder un httpd en C conforme à la norme HTTP/1.1 et portable au moins sur NetBSD/i386, Solaris/Sparc, OSF/Alpha
j'utilise lex/yacc (flex et bison pour être précis) pour parser le protocole
 
1ère question: concernant le request-header "Accept"
 
voici la syntaxe de la RFC 2616 (selon la norme BNF étendue):
 
       Accept         = "Accept" ":"
                        #( media-range [ accept-params ] )
 
       media-range    = ( "*/*"
                        | ( type "/" "*" )
                        | ( type "/" subtype )
                        ) *( ";" parameter )
       accept-params  = ";" "q" "=" qvalue *( accept-extension )
       accept-extension = ";" token [ "=" ( token | quoted-string ) ]
 
J'ai fait quelques tests pour voir comment les browsers utilisaient ce header et voici ce que j'ai remarqué :
 
 - les différents types définis sont séparés par ", "
   Est-ce que je peux considérer ce format comme un standart (sachant que les séparations de types ne sont pas précisés dans la RFC)
 - je n'ai pas encore trouvé un browser qui utilise le "accept-extension"
   Pourriez-vous m'expliquer sont fonctionnement, son utilité avec des exemples si possible?  :jap:  
 
 
Comment stockeriez-vous ces informations? (je pensais faire une liste chainée de structures)

Reply

Marsh Posté le 10-02-2002 à 14:03:27   

Reply

Marsh Posté le 10-02-2002 à 14:10:34    

ben ca définit les types mime gérés par le navigateur client.
C'est envoyé par le navigateur à chaque requête.
 
je n'es sais pas beaucoup plus et je n'ai jamais rencontré de cas où le serveur HTTP se servait de cette info ...


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 10-02-2002 à 14:18:50    

pour plus d'infos sur ce header : http://www.salemioche.com/http_rfc14.htm#14.1.
 
voila ce que je reçois quand lynx se connecte sur mon serveur:
 
"GET / HTTP/1.0
Host: marge:42000
Accept: text/html, text/plain, text/sgml, */*;q=0.01
Accept-Encoding: gzip, compress
Accept-Language: en
User-Agent: Lynx/2.8.3rel.1 libwww-FM/2.14 SSL-MM/1.4.1 OpenSSL/0.9.5a
"

Reply

Marsh Posté le 10-02-2002 à 14:23:16    

benou a écrit a écrit :

ben ca définit les types mime gérés par le navigateur client.
C'est envoyé par le navigateur à chaque requête.
 
je n'es sais pas beaucoup plus et je n'ai jamais rencontré de cas où le serveur HTTP se servait de cette info ...  




 
j'avais compris que ça définissait les types mimes
 
je souhaiterais avoir une explication sur le fonctionnement des préférences car je n'ai pas tout compris ce qui était dans la RFC:
 
si par exemple, le client (browser) prèfère le type MIME image/gif au image/jpeg et que l'image qu'il réclame est en jpeg:
dois-je convertir l'image en gif pour lui envoyer ce qu'il préfère? ou est-ce que je dois juste vérifier qu'il n'existe pas la même image (en me basant sur le nom de fichier) en format gif dans le répertoire de l'image jpeg?

Reply

Marsh Posté le 10-02-2002 à 16:40:15    

titoine42 a écrit a écrit :

 
si par exemple, le client (browser) prèfère le type MIME image/gif au image/jpeg et que l'image qu'il réclame est en jpeg:
dois-je convertir l'image en gif pour lui envoyer ce qu'il préfère? ou est-ce que je dois juste vérifier qu'il n'existe pas la même image (en me basant sur le nom de fichier) en format gif dans le répertoire de l'image jpeg?  




 
absolument pas !!!! Le browser déclare ce qu'il sait récupérer et si il ne sait pas récupérer le mime type que tu dois lui envoyer qu'il se démerde. Y a peut etre un code d'erreur pour ca. Sinon tu peux utiliser JigSaw qui est un serveur /proxy HTTP1.1 open source.  
 
Installe le sur ton pc (www.w3c.org/jigsaw) et lance le avec l'option -trace. Ensuite va chercher une anim flash que tu as mis sur ton serveur et arrange toi pour utiliser un navig qui a pas de plugin, tu vas voir ce que ca va faire. Ton serveur ne doit pas gérer ca. Si ton client fait un GET sur /images/img0.gif tu en as rien à caler. Un serveur web c'est très con. Il veut ca, bin tu le renvoie, point barre.

Reply

Marsh Posté le 10-02-2002 à 16:57:47    

ce sont juste des informations qui sont mise à disposition des applications web.
On pourrait imaginer que si l'appli détecte que le navigateur ne sait pas gérer le gif, il ne lui envoie que du jpeg.
 
Mais comme je disais, je ne connais pas de site qui gère ce genre de choses ...


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 10-02-2002 à 18:45:22    

benou a écrit a écrit :

ce sont juste des informations qui sont mise à disposition des applications web.
On pourrait imaginer que si l'appli détecte que le navigateur ne sait pas gérer le gif, il ne lui envoie que du jpeg.
 
Mais comme je disais, je ne connais pas de site qui gère ce genre de choses ...  




quand bien même ca ne servirait à rien. Comment veux tu que le browser s'y retrouve si il a un img src=/images/img0.gif" et qu'il récupère un HTTP reply 200 OK sur /images/img0.jpg :D


---------------
What is popular is not always right, what is right is not always popular :D
Reply

Marsh Posté le 10-02-2002 à 18:48:32    

je réitère mon conseil pour toi Titoine. Installe JigSaw et utilise le pour surfer un peu en mode trace. Tu vas voir les messages CLAIREMENT qui s'échange. Je peux te donner un example. Voici ce qu'il me jette lorque je me connecte au forum.
 

Code :
  1. Jigsaw[2.0.5]: serving at http://bettyboop:8001/
  2. *** Warning : JigAdmin[2.0.5]: no logger specified, not logging.
  3. JigAdmin[2.0.5]: serving at http://bettyboop:8009/
  4. GET / HTTP/1.0
  5. Proxy-Connection: Keep-Alive
  6. Date: Sun, 10 Feb 2002 17:47:15 GMT
  7. Cookie: user=darklord22; data=darklord22; passs=TUREVETROUDEBALLE; sign=1
  8. Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-
  9. powerpoint, application/vnd.ms-excel, application/msword, */*
  10. Accept-Language: fr-be
  11. Host: forum.hardware.fr
  12. User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)
  13. HTTP/1.1 200 OK
  14. Proxy-Connection: keep-alive
  15. Date: Sun, 10 Feb 2002 17:47:34 GMT
  16. Via: 1.1 bettyboop:8001 (Jigsaw/2.0.2)
  17. Content-Length: 99
  18. Content-Type: text/html
  19. Etag: "7846-63-3bac95a3"
  20. Last-Modified: Sat, 22 Sep 2001 13:44:03 GMT
  21. Accept-Ranges: bytes
  22. Server: Apache/1.3.22 (Unix) mod_gzip/1.3.19.1a PHP/4.1.1
  23. GET /forum.php3 HTTP/1.0
  24. Proxy-Connection: Keep-Alive
  25. Date: Sun, 10 Feb 2002 17:47:16 GMT
  26. Pragma: no-cache
  27. Cookie: user=darklord22; data=darklord22; passs=TUREVETROUDEBALLE; sign=1
  28. Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-
  29. powerpoint, application/vnd.ms-excel, application/msword, */*
  30. Accept-Language: fr-be
  31. Host: forum.hardware.fr
  32. User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)
  33. HTTP/1.1 200 OK
  34. Date: Sun, 10 Feb 2002 17:47:35 GMT
  35. Via: 1.1 bettyboop:8001 (Jigsaw/2.0.2)
  36. Content-Type: text/html
  37. Server: Apache/1.3.22 (Unix) mod_gzip/1.3.19.1a PHP/4.1.1
  38. X-Powered-By: PHP/4.1.1
  39. X-Accelerated-By: PHPA/1.2p1
  40. GET /logos/hardwarefr.jpg HTTP/1.0
  41. Proxy-Connection: Keep-Alive
  42. Date: Sun, 10 Feb 2002 17:47:16 GMT
  43. Pragma: no-cache
  44. Cookie: user=darklord22; data=darklord22; passs=TUREVETROUDEBALLE; sign=1
  45. Accept: */*
  46. Accept-Language: fr-be
  47. Host: forum.hardware.fr
  48. If-Modified-Since: Sat, 22 Sep 2001 13:44:03 GMT
  49. If-None-Match: "78aa-164f-3bac95a3"
  50. Referer: http://forum.hardware.fr/forum.php3
  51. User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)
  52. GET /images/start.gif HTTP/1.0
  53. Proxy-Connection: Keep-Alive
  54. Date: Sun, 10 Feb 2002 17:47:16 GMT
  55. Pragma: no-cache
  56. Cookie: user=darklord22; data=darklord22; passs=TUREVETROUDEBALLE; sign=1
  57. Accept: */*
  58. Accept-Language: fr-be
  59. Host: forum.hardware.fr
  60. If-Modified-Since: Sat, 22 Sep 2001 13:44:36 GMT
  61. If-None-Match: "76ff-c1-3bac95c4"
  62. Referer: http://forum.hardware.fr/forum.php3
  63. User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)
  64. HTTP/1.1 304 Not Modified
  65. Proxy-Connection: keep-alive
  66. Date: Sun, 10 Feb 2002 17:47:35 GMT
  67. Via: 1.1 bettyboop:8001 (Jigsaw/2.0.2)
  68. Etag: "78aa-164f-3bac95a3"
  69. Server: Apache/1.3.22 (Unix) mod_gzip/1.3.19.1a PHP/4.1.1
  70. GET /images/background.gif HTTP/1.0
  71. Proxy-Connection: Keep-Alive
  72. Date: Sun, 10 Feb 2002 17:47:16 GMT
  73. Pragma: no-cache
  74. Cookie: user=darklord22; data=darklord22; passs=TUREVETROUDEBALLE; sign=1
  75. Accept: */*
  76. Accept-Language: fr-be
  77. Host: forum.hardware.fr
  78. If-Modified-Since: Sat, 22 Sep 2001 13:44:34 GMT
  79. If-None-Match: "6c5e-3c-3bac95c2"
  80. Referer: http://forum.hardware.fr/forum.php3
  81. User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)
  82. HTTP/1.1 304 Not Modified
  83. Proxy-Connection: keep-alive
  84. Date: Sun, 10 Feb 2002 17:47:35 GMT
  85. Via: 1.1 bettyboop:8001 (Jigsaw/2.0.2)
  86. Etag: "76ff-c1-3bac95c4"
  87. Server: Apache/1.3.22 (Unix) mod_gzip/1.3.19.1a PHP/4.1.1
  88. GET /images/on.gif HTTP/1.0
  89. Proxy-Connection: Keep-Alive
  90. Date: Sun, 10 Feb 2002 17:47:16 GMT
  91. Pragma: no-cache
  92. Cookie: user=darklord22; data=darklord22; passs=TUREVETROUDEBALLE; sign=1
  93. Accept: */*
  94. Accept-Language: fr-be
  95. Host: forum.hardware.fr
  96. If-Modified-Since: Sat, 22 Sep 2001 13:44:34 GMT
  97. If-None-Match: "714d-3e5-3bac95c2"
  98. Referer: http://forum.hardware.fr/forum.php3
  99. User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)
  100. HTTP/1.1 304 Not Modified
  101. Proxy-Connection: keep-alive
  102. Date: Sun, 10 Feb 2002 17:47:35 GMT
  103. Via: 1.1 bettyboop:8001 (Jigsaw/2.0.2)
  104. Etag: "6c5e-3c-3bac95c2"
  105. Server: Apache/1.3.22 (Unix) mod_gzip/1.3.19.1a PHP/4.1.1
  106. GET /icones/sondage1.gif HTTP/1.0
  107. Proxy-Connection: Keep-Alive
  108. Date: Sun, 10 Feb 2002 17:47:16 GMT
  109. Pragma: no-cache
  110. Cookie: user=darklord22; data=darklord22; passs=TUREVETROUDEBALLE; sign=1
  111. Accept: */*
  112. Accept-Language: fr-be
  113. Host: forum.hardware.fr
  114. If-Modified-Since: Sat, 22 Sep 2001 13:44:03 GMT
  115. If-None-Match: "6a38-ba-3bac95a3"
  116. Referer: http://forum.hardware.fr/forum.php3
  117. User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)
  118. HTTP/1.1 304 Not Modified
  119. Proxy-Connection: keep-alive
  120. Date: Sun, 10 Feb 2002 17:47:35 GMT
  121. Via: 1.1 bettyboop:8001 (Jigsaw/2.0.2)
  122. Etag: "714d-3e5-3bac95c2"
  123. Server: Apache/1.3.22 (Unix) mod_gzip/1.3.19.1a PHP/4.1.1
  124. GET /images/off.gif HTTP/1.0
  125. Proxy-Connection: Keep-Alive
  126. Date: Sun, 10 Feb 2002 17:47:16 GMT
  127. Pragma: no-cache
  128. Cookie: user=darklord22; data=darklord22; passs=TUREVETROUDEBALLE; sign=1
  129. Accept: */*
  130. Accept-Language: fr-be
  131. Host: forum.hardware.fr
  132. If-Modified-Since: Sat, 22 Sep 2001 13:44:34 GMT
  133. If-None-Match: "713c-3a6-3bac95c2"
  134. Referer: http://forum.hardware.fr/forum.php3
  135. User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)
  136. HTTP/1.1 304 Not Modified
  137. Proxy-Connection: keep-alive
  138. Date: Sun, 10 Feb 2002 17:47:36 GMT
  139. Via: 1.1 bettyboop:8001 (Jigsaw/2.0.2)
  140. Etag: "6a38-ba-3bac95a3"
  141. Server: Apache/1.3.22 (Unix) mod_gzip/1.3.19.1a PHP/4.1.1
  142. GET /icones/email1.gif HTTP/1.0
  143. Proxy-Connection: Keep-Alive
  144. Date: Sun, 10 Feb 2002 17:47:16 GMT
  145. Pragma: no-cache
  146. Cookie: user=darklord22; data=darklord22; passspasss=TUREVETROUDEBALLE; sign=1
  147. Accept: */*
  148. Accept-Language: fr-be
  149. Host: forum.hardware.fr
  150. If-Modified-Since: Sat, 22 Sep 2001 13:44:03 GMT
  151. If-None-Match: "6a17-3bf-3bac95a3"
  152. Referer: http://forum.hardware.fr/forum.php3
  153. User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)
  154. HTTP/1.1 304 Not Modified
  155. Proxy-Connection: keep-alive
  156. Date: Sun, 10 Feb 2002 17:47:36 GMT
  157. Via: 1.1 bettyboop:8001 (Jigsaw/2.0.2)
  158. Etag: "713c-3a6-3bac95c2"
  159. Server: Apache/1.3.22 (Unix) mod_gzip/1.3.19.1a PHP/4.1.1
  160. GET /logohp1.gif?site=p576 HTTP/1.0
  161. Proxy-Connection: Keep-Alive
  162. Date: Sun, 10 Feb 2002 17:47:16 GMT
  163. Pragma: no-cache
  164. Accept: */*
  165. Accept-Language: fr-be
  166. Host: logp.hit-parade.com
  167. If-Modified-Since: Mon, 30 Apr 2001 09:10:12 GMT
  168. If-None-Match: "4635995c55d1c01:860b"
  169. Referer: http://forum.hardware.fr/forum.php3
  170. User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)
  171. HTTP/1.1 304 Not Modified
  172. Proxy-Connection: keep-alive
  173. Date: Sun, 10 Feb 2002 17:47:36 GMT
  174. Via: 1.1 bettyboop:8001 (Jigsaw/2.0.2)
  175. Etag: "6a17-3bf-3bac95a3"
  176. Server: Apache/1.3.22 (Unix) mod_gzip/1.3.19.1a PHP/4.1.1
  177. GET /gold.js HTTP/1.0
  178. Proxy-Connection: Keep-Alive
  179. Date: Sun, 10 Feb 2002 17:47:17 GMT
  180. Pragma: no-cache
  181. Cookie: AFFICHE_W=aVGoZe39N0e880
  182. Accept: */*
  183. Accept-Language: fr-be
  184. Host: script.weborama.fr
  185. If-Modified-Since: Mon, 28 May 2001 16:28:40 GMT
  186. If-None-Match: "8f842-57b-3b127cb8"
  187. Referer: http://forum.hardware.fr/forum.php3
  188. User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)
  189. HTTP/1.1 304 Not Modified
  190. Proxy-Connection: keep-alive
  191. Date: Sun, 10 Feb 2002 18:48:59 GMT
  192. Via: 1.1 bettyboop:8001 (Jigsaw/2.0.2)
  193. Content-Length: 0
  194. Etag: "4635995c55d1c01:8986"
  195. Server: Microsoft-IIS/4.0
  196. HTTP/1.1 200 OK
  197. Cache-Control: max-age=1209600
  198. Proxy-Connection: keep-alive
  199. Date: Sun, 10 Feb 2002 17:47:35 GMT
  200. Via: 1.1 bettyboop:8001 (Jigsaw/2.0.2)
  201. Content-Length: 1403
  202. Content-Type: application/x-javascript
  203. Etag: "af5b4-57b-3b127cb8"
  204. Expires: Sun, 24 Feb 2002 17:47:35 GMT
  205. Last-Modified: Mon, 28 May 2001 16:28:40 GMT
  206. Accept-Ranges: bytes
  207. Server: Apache/1.3.22 (Unix) mod_fastcgi/2.2.12
  208. GET /fcgi-bin/comptage.fcgi?ID=15069&ZONE=1&PAGE=1&ver=2&da2=1013366837&ta=1024x
  209. 768&co=32&ref= HTTP/1.0
  210. Proxy-Connection: Keep-Alive
  211. Date: Sun, 10 Feb 2002 17:47:17 GMT
  212. Pragma: no-cache
  213. Cookie: AFFICHE_W=aVGoZe39N0e880
  214. Accept: */*
  215. Accept-Language: fr-be
  216. HostGET /hit.xiti?s=28067&p=&hl=18x47x17&r=1024x768xundefinedx32&ref= HTTP/1.0
  217. : gold.weborama.fr
  218. Referer: http://forum.hardware.fr/forum.php3
  219. Proxy-Connection: Keep-Alive
  220. Date: Sun, 10 Feb 2002 17:47:17 GMTUser-Agent: Mozilla/4.0 (compatible; MSIE 6.0
  221. ; Windows NT 5.0)
  222. Pragma: no-cache
  223. Accept: */*
  224. Accept-Language: fr-be
  225. Host: logv5.xiti.com
  226. Referer: http://forum.hardware.fr/forum.php3
  227. User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)
  228. HTTP/1.1 302 Found
  229. Date: Sun, 10 Feb 2002 17:47:36 GMT
  230. Pragma: no-cache
  231. Via: 1.1 bettyboop:8001 (Jigsaw/2.0.2)
  232. Content-Type: text/plain
  233. Location: http://script.weborama.fr/images/b [...] _class.gif
  234. Server: Apache/1.3.22 (Unix) mod_fastcgi/2.2.12
  235. P3P: CP="NOI DSP COR CURa DEVa PSAa OUR STP UNI DEM",CP="NOI DSP COR CURa DEVa P
  236. SAa OUR STP UNI DEM"
  237. GET /images/bannieres/webo_stat_class.gif HTTP/1.0
  238. Proxy-Connection: Keep-Alive
  239. Date: Sun, 10 Feb 2002 17:47:17 GMT
  240. Pragma: no-cache
  241. Cookie: AFFICHE_W=aVGoZe39N0e880
  242. Accept: */*
  243. Accept-Language: fr-be
  244. Host: script.weborama.fr
  245. If-Modified-Since: Fri, 13 Jul 2001 12:35:07 GMT
  246. If-None-Match: "6bb15-bcd-3b4eeafb"
  247. Referer: http://forum.hardware.fr/forum.php3
  248. User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)
  249. HTTP/1.1 200 OK
  250. Proxy-Connection: keep-alive
  251. Date: Sun, 10 Feb 2002 18:48:26 GMT
  252. Via: 1.1 bettyboop:8001 (Jigsaw/2.0.2)
  253. Content-Length: 186
  254. Content-Type: image/GIF
  255. Etag: "f69a597d523cc11:661b"
  256. Last-Modified: Thu, 13 Sep 2001 12:49:13 GMT
  257. Accept-Ranges: bytes
  258. Server: Microsoft-IIS/4.0
  259. HTTP/1.1 200 OK
  260. Cache-Control: max-age=1209600
  261. Proxy-Connection: keep-alive
  262. Date: Sun, 10 Feb 2002 17:47:36 GMT
  263. Via: 1.1 bettyboop:8001 (Jigsaw/2.0.2)
  264. Content-Length: 3021
  265. Content-Type: image/gif
  266. Etag: "cb548-bcd-3b4eeafb"
  267. Expires: Sun, 24 Feb 2002 17:47:36 GMT
  268. Last-Modified: Fri, 13 Jul 2001 12:35:07 GMT
  269. Accept-Ranges: bytes
  270. Server: Apache/1.3.22 (Unix) mod_fastcgi/2.2.12


 
plus clair que ca, y a pas :) enfin du moins comme 1ere approche, pour voir comment fonctionnent les choses.

 

[jfdsdjhfuetppo]--Message édité par darklord22--[/jfdsdjhfuetppo]


---------------
What is popular is not always right, what is right is not always popular :D
Reply

Marsh Posté le 10-02-2002 à 18:51:19    

vous remarquerez avec quelle élégance, j'ai viré mon pass de la trace :D


---------------
What is popular is not always right, what is right is not always popular :D
Reply

Marsh Posté le 10-02-2002 à 19:18:13    

darklord22 a écrit a écrit :

 
quand bien même ca ne servirait à rien. Comment veux tu que le browser s'y retrouve si il a un img src=/images/img0.gif" et qu'il récupère un HTTP reply 200 OK sur /images/img0.jpg :D  




 
ben je vois pas le problème : le type mime est indiqué dans la réponse => il serait de quelle type d'image il s'agit et comment l'afficher.


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 10-02-2002 à 19:18:13   

Reply

Marsh Posté le 10-02-2002 à 19:24:23    

vi mais pour les dépendances au niveau code source ce serait pas top. ET puis ce serai contraire à la spec de toutes façons


---------------
What is popular is not always right, what is right is not always popular :D
Reply

Marsh Posté le 10-02-2002 à 19:38:25    

merci pour vos réponse :jap:
 
je vais examiner ton log Darklord
 
il semblerait que mozilla n'utilise pas le paramètre de préférence
 
sinon, avez-vous compris la signification de "accept-extension" dans la grammaire du request-header accept?

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed