Pregunta

Necesito construir un servidor HTTP simple en C. ¿Alguna orientación? ¿Campo de golf? Muestras?

¿Fue útil?

Solución

Le sugiero que eche un vistazo a pequeño httpd . Si desea escribirlo desde cero, entonces querrá a fondo leer RFC 2616 . Utilice sockets BSD para acceder a la red a un nivel realmente bajo.

Otros consejos

Le recomiendo que eche un vistazo a: Guía práctica para escribir clientes y servidores

Lo que tienes que implementar en pasos incrementales es:

  1. Haga que su capa de sockets TCP básica se ejecute (escuche en puertos / puertos, acepte conexiones de clientes y envíe / reciba datos).
  2. Implemente un lector de búfer para que pueda leer las solicitudes de una línea (delimitada por CRLF) a la vez.
  3. Lee la primera línea. Analice el método, la versión de solicitud y la ruta.
  4. Implemente el análisis del encabezado para el " Encabezado: valor " sintaxis. No olvide desplegar los encabezados plegados.
  5. Verifique el método de solicitud, el tipo de contenido y el tamaño del contenido para determinar cómo / si se leerá el cuerpo.
  6. Implemente la decodificación de contenido según el tipo de contenido.
  7. Si vas a admitir HTTP 1.1, implementa cosas como " 100 Continuar " ;, mantener vivo, transferencia fragmentada.
  8. Agregue medidas de robustez / seguridad como detectar solicitudes incompletas, limitar el número máximo de clientes, etc.
  9. Reduzca el tamaño de su código y ábralo en código abierto :)

Un servidor HTTP es conceptualmente simple:

  • Abra el puerto 80 para escuchar
  • Cuando se establezca el contacto, reúna un poco de información (obtenga principalmente - puede ignorar el resto por ahora)
  • Convierta la solicitud en una solicitud de archivo
  • Abra el archivo y escúpalo de nuevo en el cliente

Se vuelve más difícil según la cantidad de HTTP que quiera admitir: POST es un poco más complicado, scripts, manejo de múltiples solicitudes, etc.

Pero la base es muy simple.

Mongoose (Anteriormente Simple Daemon HTTP) es bastante bueno. En particular, se puede incrustar y compilar en Windows, Windows CE y UNIX.

Abra un socket TCP en el puerto 80, comience a escuchar nuevas conexiones, implemente esto . Dependiendo de tus propósitos, puedes ignorar casi todo. De la forma más sencilla, puede enviar la misma respuesta para cada solicitud, lo que implica simplemente escribir texto en el socket.

Mire en nweb (el servidor web de Nigel), " un servidor web pequeño y seguro [...] con solo 200 líneas de código fuente en C " ;:

https://drive.google.com/file/d/ 0B3msld7qnNOhN1NXaFIwSFU2Mjg / view? Usp = compartir http://www.ibm.com/developerworks/systems/library / es-nweb /

El artículo incluye pseudocódigo, explicaciones y comentarios.

EDITAR: el enlace de IBM ha muerto. He guardado un PDF de la página web en Google Drive. Aquí está la descarga del código:

https://drive.google.com/file/d/ 0B3msld7qnNOhSGZGdDJJMmY0VHM / view? Usp = sharing

@ ankushagarwal ha realizado algunos cambios y ha subido su versión en GitHub: https://github.com/ankushagarwal/nweb

He escrito el mío que puedes usar. Éste funciona con sqlite, es seguro para subprocesos y está en C ++ para UNIX.

Debería poder separarlo y usar el código compatible con C.

http://code.google.com/p/mountain-cms/

La especificación de HTTP y Firebug fueron muy útiles para mí cuando tuve que hacerlo para mi tarea.

Buena suerte con la tuya. :)

Sugeriría buscar en la fuente algo como lighthttpd .

http://www.manning.com/hethmon/ - " Guía ilustrada a HTTP por Paul S. Hethmon " Manning es un muy buen libro para aprender el protocolo HTTP y será muy útil para alguien que lo implemente / extienda.

Use las funciones de socket específicas de la plataforma para encapsular el protocolo HTTP, al igual que los chicos detrás de Apache hizo .

Hay un duplicado con más respuestas .

Un candidato que aún no se menciona es spserver .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top