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, no importa qué lenguaje use (p. ej., C, C ++, Java, etc.) la respuesta debe ser la misma. Tengo una idea general de cómo se supone que esto funciona:
- Abra un zócalo en el puerto 80.
- Espere a que un cliente haga una solicitud.
- Lea la solicitud (es decir, esta persona quiere la página "contact-us.html").
- Busque y lea "contact-us.html".
- Envíe un encabezado html, luego envíe el contenido de "contact-us.html"
- 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 encuentra una persona esta información?
¿Qué sucede 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 que funcione?
Un compañero de trabajo me habló del encabezado html, por lo que NUNCA habría sabido esto sin él. También dijo algo sobre entregar cada solicitud a un nuevo hilo. ¿Hay algún gran libro sobre cómo funcionan las cosas? ¿Hay algún manual de lo que se necesita para ser un servidor HTTP?
Traté de buscar en Google "cómo funciona un servidor HTTP", pero las únicas respuestas que pude encontrar estaban orientadas a su Joe promedio, y no a una persona que desea programar un servidor HTTP.
fuente
Respuestas:
¡Usa el RFC2616 , Luke!
Usted lee el RFC 2616 en HTTP / 1.1 , y lo hace.
Ese fue en realidad un proyecto en mi tercer año en la escuela de ingeniería, y esa es más o menos la descripción del proyecto.
Herramientas
Tus herramientas son:
Consideraciones divertidas
Cosas a considerar para la diversión extra:
Que te diviertas. Es algo muy bueno de ver.
Otras sugerencias (más simples)
Primero son mucho más fáciles de abordar, 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 implementación dependerán en gran medida del idioma y la pila que use para implementarlo. Abordé todo eso en C, pero estoy seguro de que puede ser divertido igual de bien en otros idiomas (bueno, tal vez no sea tan divertido, pero aún así es divertido).
fuente
You still have lots of room for your architecture design, but it's a pretty good and directive spec.
usted:yes and no
. Creo que ya nos redujimos, ya que el RFC no lo era todo. Y creo que depende del OP descubrir estas cosas en lugar de señalarlas directamente más de lo que ya he hecho en las secciones de "consideraciones adicionales" y otras cosas. Es parte de la diversión.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 http://www.rfc-editor.org/ , 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 el protocolo FTP se especifica en RFC959 .
Según las especificaciones, los RFC son, en mi opinión, muy legibles.
fuente
In 2014, RFC2616 was replaced by multiple RFCs (7230-7237).
. Entonces, ¿cómo encontrar los RFC actualizados si están presentes? ¿Debo verificar laObsoleted by
lista?