gsweb —— 理解HTTP协议
为了实现gsweb,理解HTTP协议是我们一步需要做的事情:
按字面理解HTTP是用于超文本的传输协议它的最常用版本由RFC2616定义,这里有它的中文版翻译。那什么是超文本了?下面是收录的必应网典的解释:
超文本(Hypertext)是用超链接的方法,将各种不同空间的文字信息组织在一起的网状文本。超文本更是一种用户介面范式,用以显示文本及与文本之间相关的内容。现时超文本普遍以电子文档的方式存在,其中的文字包含有可以链接到其他字段或者文档的超文本链接,允许从当前阅读位置直接切换到超文本链接所指向的文字。超文本的格式有很多,目前最常使用的是超文本标记语言(Hyper Text Markup Language,HTML)及富文本格式 (Rich Text Format,RTF)。我们日常浏览的网页上的链结都属于超文本
现代的HTTP协议已经超越了它最初的定义,特别是RESTful流行起来以后。它越来越被当做一种网关协议来使用。不仅浏览器使用它来获取WEB页面,很多移动互联网应用也将它做为首选通讯协议;现在让我们带上WEB服务器设计师的帽子,从这个角度来考虑一下问题:
- 需要实现哪些HTTP方法?
- 根据Request-URI如何分发请求?
- HTTP协议头的哪些信息是需要重点关注的,哪些是可以忽略的?
- gsweb应该是一个无状态服务,还是有状态服务?
这篇文章,我们首先来关注前两个问题:
HTTP方法
根据经典的RESTful架构风格的描述,看来只要实现下面几种方法就OK了:
- GET
- POST
- PUT
- DELETE
顺带说一句根据RESTful字面意思,我们知道这是处理资源状态转换的架构,另一方面HTTP协议又是一个无状态协议。纠结的地方来了——绝大部分的RESTful的实践都是通过HTTP协议来完成的oz。后面准备开单章吐槽下这部分内容。另外这里有篇文章对RESTful风格的架构有比较好的描述
URI
统一资源定位符,它的使用范围并不局限于HTTP协议。在HTTP协议中,它最初应该是被直接映射成远程服务上的磁盘文件路径。经过这么多年HTTP的发展,HTTP协议中的URI已经回归了它的本来含义:统一资源定位符。这里的资源可以是文本、HTML页面、MP3更或者是一个网络服务。
Request-URI的路径信息只对静态文件类型资源有意义。对于服务类资源它最多只是一个站点内提供的
所有服务集合的主键。
资源类型分类
今天先写到这里,后面在MIME章节详细描述这部分内容