Http 协议历史 - Go语言中文社区

Http 协议历史


HTTP 协议是互联网的基础协议,也是网页开发的必备知识,最新版本 HTTP/2 更是让它成为技术热点。


本文介绍 HTTP 协议的历史演变和设计思路。



一、HTTP/0.9


HTTP 是基于 TCP/IP 协议的应用层协议。它不涉及数据包(packet)传输,主要规定了客户端和服务器之间的通信格式,默认使用80端口。


最早版本是1991年发布的0.9版。该版本极其简单,只有一个命令GET。


GET /index.html


上面命令表示,TCP 连接(connection)建立后,客户端向服务器请求(request)网页index.html。


协议规定,服务器只能回应HTML格式的字符串,不能回应别的格式。


<html>

  <body>Hello World</body>

</html>


服务器发送完毕,就关闭TCP连接。


二、HTTP/1.0


2.1 简介


1996年5月,HTTP/1.0 版本发布,内容大大增加。


首先,任何格式的内容都可以发送。这使得互联网不仅可以传输文字,还能传输图像、视频、二进制文件。这为互联网的大发展奠定了基础。


其次,除了GET命令,还引入了POST命令和HEAD命令,丰富了浏览器与服务器的互动手段。


再次,HTTP请求和回应的格式也变了。除了数据部分,每次通信都必须包括头信息(HTTP header),用来描述一些元数据。


其他的新增功能还包括状态码(status code)、多字符集支持、多部分发送(multi-part type)、权限(authorization)、缓存(cache)、内容编码(content encoding)等。


2.2 请求格式


下面是一个1.0版的HTTP请求的例子。


GET / HTTP/1.0

User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5)

Accept: */*


可以看到,这个格式与0.9版有很大变化。


第一行是请求命令,必须在尾部添加协议版本(HTTP/1.0)。后面就是多行头信息,描述客户端的情况。


2.3 回应格式


服务器的回应如下。


HTTP/1.0 200 OK

Content-Type: text/plain

Content-Length: 137582

Expires: Thu, 05 Dec 1997 16:00:00 GMT

Last-Modified: Wed, 5 August 1996 15:55:28 GMT

Server: Apache 0.84

 

<html>

  <body>Hello World</body>

</html>


回应的格式是”头信息 + 一个空行(rn) + 数据”。其中,第一行是”协议版本 + 状态码(status code) + 状态描述”。


2.4 Content-Type 字段


关于字符的编码,1.0版规定,头信息必须是 ASCII 码,后面的数据可以是任何格式。因此,服务器回应的时候,必须告诉客户端,数据是什么格式,这就是Content-Type字段的作用。


下面是一些常见的Content-Type字段的值。


  • text/plain

  • text/html

  • text/css

  • image/jpeg

  • image/png

  • image/svg+xml

  • audio/mp4

  • video/mp4

  • application/javascript

  • application/pdf

  • application/zip

  • application/atom+xml


这些数据类型总称为MIME type,每个值包括一级类型和二级类型,之间用斜杠分隔。


除了预定义的类型,厂商也可以自定义类型。


application/vnd.debian.binary-package


上面的类型表明,发送的是Debian系统的二进制数据包。


MIME type还可以在尾部使用分号,添加参数。


Content-Type: text/html; charset=utf-8


上面的类型表明,发送的是网页,而且编码是UTF-8。


客户端请求的时候,可以使用Accept字段声明自己可以接受哪些数据格式。


Accept: */*


上面代码中,客户端声明自己可以接受任何格式的数据。


MIME type不仅用在HTTP协议,还可以用在其他地方,比如HTML网页。


<meta http-equiv="Content-Type" 版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/zjilvufe/article/details/52345024
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。

  • 发表于 2020-03-01 19:56:40
  • 阅读 ( 916 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢