¿Cómo escribir un servidor HTTP?

13

Como dice el título, me gustaría escribir un servidor HTTP. Mi pregunta es esta, ¿cómo hago esto? Sé que esto suena MUY general y demasiado "alto nivel", pero hay un método para mi locura. Una respuesta a esta pregunta debería ser, creo, agnóstico del lenguaje; es decir, independientemente del idioma que use (por ejemplo, C, C ++, Java, etc.), la respuesta debería ser la misma. Tengo una idea general de cómo se supone que funciona esto:

  1. Abre un socket en el puerto 80.
  2. Espere a que un cliente realice una solicitud.
  3. Lea la solicitud (es decir, esta persona quiere la página "contact-us.html").
  4. Busque y lea "contact-us.html".
  5. Envíe un encabezado html, luego envíe el contenido de "contact-us.html"
  6. Hecho

Como dije, creo que este es el proceso, pero no estoy 100% seguro. Esto me lleva al corazón de mi pregunta. ¿Cómo o dónde una persona encuentra esta información?

¿Qué pasa si no quisiera escribir solo un servidor HTTP, y si quisiera escribir un servidor FTP, un servidor de chat, un visor de imágenes, etc.? ¿Cómo descubre una persona los pasos / procesos exactos necesarios para crear un servidor HTTP funcional?

Un compañero de trabajo me habló sobre el encabezado html, por lo que NUNCA lo sabría sin él. También dijo algo sobre la entrega de cada solicitud a un nuevo hilo. ¿Hay algún libro grande de cómo funcionan las cosas? ¿Hay algún manual de lo que se necesita para ser un servidor HTTP?

Intenté buscar en Google "cómo funciona un servidor HTTP", pero las únicas respuestas que pude encontrar fueron dirigidas a tu Joe promedio, y no a una persona que desea programar un servidor HTTP.

    
pregunta Brian 07.06.2013 - 16:48

2 respuestas

16

Utilice RFC2616 , ¡Luke!

Leíste RFC 2616 en HTTP / 1.1 , y listo.

En realidad, fue un proyecto en mi tercer año en la escuela de ingeniería, y esa es prácticamente la descripción del proyecto.

Herramientas

Sus herramientas son:

  • cosas básicas de red (administración de socket, enlace, comprensión de direcciones),
  • buena comprensión de los flujos de E / S,
  • mucha paciencia para obtener algunas partes turbias del RFC (los tipos mimo son divertidos).

Consideraciones divertidas

Cosas a considerar para una diversión extra:

  • arquitectura de plug-in para agregar compatibilidad con CGI / mod,
  • archivos de configuración para, bueno, muchas cosas,
  • mucha experimentación sobre cómo optimizar transferencias,
  • mucha experimentación para ver cómo administrar la carga en términos de CPU y memoria, y elegir un modelo de despacho (gran bucle parejo, despacho de aceptación única, multiproceso, multiproceso, etc.).

Diviértete. Es una cosa muy buena de ver.

Otras sugerencias (más simples)

  • FTP cliente / servidor (en su mayoría RFC959 pero hay versiones anteriores y también algunas extensiones)
  • IRC cliente / servidor (en su mayoría RFC1459 , pero hay extensiones)

Son mucho más fáciles de abordar primero, y sus RFC son mucho más fáciles de digerir (bueno, el IRC tiene algunas partes extrañas, pero el FTP es bastante claro).

Elección de idioma

Por supuesto, algunos detalles de la implementación dependerán en gran medida del idioma y la pila que utilice para implementarlo. Me acerqué a todo eso en C, pero estoy seguro de que también puede ser divertido en otros idiomas (está bien, quizás no sea tan divertido, pero sigue siendo divertido).

    
respondido por el haylem 07.06.2013 - 18:01
2

Cada uno de los protocolos utilizados en Internet se especifica en uno o más documentos públicos llamados RFC. Todos los RFC actuales se pueden encontrar en enlace , que también tiene una función de búsqueda decente.

El protocolo HTTP (versión 1.1), por ejemplo, se especifica en RFC2616 y se especifica el protocolo FTP en RFC959 .

Según las especificaciones, las RFC son, en mi opinión, muy legibles.

    
respondido por el Bart van Ingen Schenau 07.06.2013 - 18:10

Lea otras preguntas en las etiquetas