2008-12-26 13 views
22

Ayer, tengo una conversación con mis colegas sobre HTTP. Se pregunta por qué HTTP está diseñado en forma de texto plano. Sin duda, se puede diseñar de forma binaria al igual que el protocolo TCP, utilizando indicadores para representar diferentes tipos de métodos (POST, GET) y variables (encabezados HTTP). Entonces, ¿por qué HTTP está diseñado de esa manera? ¿Hay alguna razón técnica o histórica?¿Por qué el protocolo HTTP está diseñado en forma de texto plano?

Respuesta

46

A El motivo que es tanto técnico como histórico es que los protocolos de texto son casi siempre preferidos en el mundo de Unix.

Bueno, esto no es realmente una razón, sino un patrón. La razón detrás de esto es que los protocolos de texto le permiten a ver lo que está sucediendo en la red al dejar todo lo que pasa. No necesita un analizador especializado como lo necesita para TCP/IP. Esto hace que sea más fácil de depurar y más fácil de mantener.

No solo HTTP, sino muchos protocolos basados ​​en texto (por ejemplo, FTP, POP3, SMTP, IMAP).

Es posible que desee echar un vistazo a The Art of Unix Programming para una explicación mucho más detallada de esta cosa de Unix.

+1

La discusión en TAOUP sobre por qué los protocolos de texto son buenos es muy, muy relevante. Además, observe el número de errores en implementaciones de protocolos descritos en cosas como ASN.1. (¡Y a menudo son más fáciles que los protocolos binarios que no se describen en ASN.1!) –

+0

Enlace al libro mencionado. http://www.faqs.org/docs/artu/ –

8

Muchos protocolos de aplicaciones de Internet usan texto más o menos simple para el protocolo (vea FTP, POP, SMTP, etc.).

Facilita la interoperabilidad y la resolución de problemas.

+2

Especialmente cuando se puede abrir una sesión de telnet y falsa uno o ambos lados de la conversación para la depuración. –

2

¿Es más fácil "leer" el tráfico o crear un cliente o servidor?

Puede debatir si realmente lo hace más fácil, pero seguro que ese fue el intento.

+0

Claro que sí; miras el tráfico crudo y ves lo que está pasando. La mayoría de los humanos son mejores para interpretar cadenas que los bytes binarios en bruto, mientras que las computadoras son bastante rápidas para que el rendimiento sea insignificante. – Piskvor

6

HTTP significa "Protocolo de transferencia de hipertexto".

Inicialmente se diseñó como una forma de servir documentos de texto, de ahí el protocolo basado en texto.

Lo que hacemos con HTTP ahora va más allá de su intención original.

+1

Así que hay muchos otros protocolos de Internet que no son "hipertexto" – icelava

4

Al igual que con RFC 2616 section 3.7.1 for HTTP 1.1, el identificador de la clave de una línea de comando o encabezado es el salto de línea de texto CRLF; los protocolos de aplicación basados ​​en texto hacen que sea más fácil llevar a cabo una conversación (para la solución de problemas) puramente con un cliente Telnet. También hace que sea más fácil programar con ReadLine() llamadas y cadenas de texto coincidentes.

La ruptura del parámetro CRLF también proporciona extensiones de encabezado abitrary casi ilimitadas a diferencia de un encabezado de TCP o IP de tamaño fijo donde se realiza una compensación de código duro por bit.

16

Con HTTP, el contenido de una solicitud es casi siempre órdenes de magnitud mayor que la sobrecarga de protocolo. Convertir el protocolo en uno binario ahorraría muy poco ancho de banda, y la fácil capacidad de búsqueda que un protocolo de texto ofrece fácilmente supera el ahorro menor de ancho de banda de un protocolo binario.

1

Históricamente, todo comienza a partir de RFC822 (ESTÁNDAR PARA EL FORMATO DE LOS MENSAJES DE INTERNET DE ARPA), cuya última versión es RFC5322 (Formato de mensaje de Internet). SMTP (RFC 821) fue uno de los protocolos más populares basado en RFC822. Y HTTP nació de SMTP (su protocolo de correo).

1

me gusta el:

... preferido en el mundo de Unix.

razón, pero no tiene ninguna explicación de por qué.

Con el fin de entender por qué tiene que colocarse en los zapatos de un diseñador que quiere hacer un producto utilizable.

A) Puede documentar la mierda de un galimatías sin sentido (binario).

b) Elaborar o esperanza a otros a desarrollar instrumentos pedagógicos que su galimatías sin sentido de una manera significativa.

o

A) Se puede documentar la mierda de texto significativo que se aprovecha de la lengua como instrumento para un protocolo de auto-documentado.

B) No hay necesidad inmediata de herramientas adicionales y herramientas adicionales será mucho más fácil de escribir y depurar.

crea por etapas de entrega y crea algo que es más fácil de comprender & memoria cuando se hace el desarrollo futuro. También crea una situación donde una abstracción de nivel superior ya no es necesaria.

imaginar un mundo en el que el establecimiento de un valor de encabezado no es tan simple como diccionario/Mapa algún lugar de su marco. Cuando tenga errores, tendrá que preguntarse constantemente si su marco es correcto o no, porque no podría ver fácilmente que está haciendo lo correcto sin herramientas adicionales. Ese sería el mundo de HTTP si cada marco necesitara inventar/implementar su propia abstracción de mayor nivel (los navegadores vienen a la mente).

eficiencia falta Muchos de diseñador de protocolo, este diseño se centra en la facilidad de uso, lo cual es de suma importancia en la industria de desarrollo de software. Las herramientas inutilizables que se optimizan prematuramente crean una carga innecesaria para los desarrolladores de software, y esta carga se manifiesta en todos los ámbitos.

Cuestiones relacionadas