http协议(1)概括
“如果你在路上遇到岔路口,走小路(岔路)” --Linux Journal
HTTP(超文本传输协议)是在万维网上进行通信时所使用的协议方案。常用于web浏览器,web服务器之间的双工通信。
每天都有数以万计的用户在互联网上发送数据,接收数据,http可以从遍布全世界的web服务器上将这些信息块迅速,便捷,可靠地移到人们面前的web浏览器上去。
http使用的是安全可靠的数据传输协议,即使你从月球往地球发送数据,它也能确保数据在传输过程中不会被损坏或产生混乱。
web内容都是存储在web服务器上的。web服务器使用的http协议。因此经常被称为http服务器。
客户端向服务器发送http请求,服务器会在http响应中回送所请求的数据。
浏览一个页面时,浏览器会向服务器发送一条HTTP请求。服务器去寻找查找的数据,如果成功,就将数据,数据类型,数据长度,以及其他一些信息放在http响应中发送给客户端。
web服务器是web资源的宿主。web资源是web内容的源头。web服务器不仅可以提供静态文件(文本文件,word文件,图片文件,电影文件…),也可以根据需要生成内容的软件程序(股票交易,房产数据,在线商店购买商品…)。所有的类型来源都属于一种资源。(公司销售的电子表格,因特网搜索引擎…)
因特网上有数千种不同的数据类型,http认真的给每种要通过web传输的资源都打上名为MIME类型(MIME type)的数据格式标签。
当web浏览器从服务器取出一个对象时,会去查看相关的MIME类型,判断是否知道该如何处理这个对象。
常见的MIME类型有数百个,实验性或用途有限的MIME类型则更多。(下面仅简单的列出几条)
- HTML格式的文本文档由 text/html 来标记。
- 普通的ASCII文本文档由 text/plain 标记。
- JEPG版本的图片为 image/jepg 类型。
- GIF格式的图片未 image/gif 类型。
资源标识符:URL(统一资源定位符)。URL描述了一台特定服务器上某资源的特定位置。
URN:URI的第二种形式。urn作为特定内容的唯一名称使用的,与目前所在资源地无关,使用这些与位置无关的urn,可以将资源四处搬移。(urn扔处于实验阶段,还未大范围使用)
HTTP事务:一个HTTP事务是由一条(从客户端发往服务器的)请求命令和一个(从服务器发往客户端的)响应结果组成。这种通信是通过名为HTTP报文的格式化数据块进行的。
下图为一些常见的http方法。
HTTP状态码:没条http报文返回时都会携带一个状态码,状态码是一个三位数字的代码,告知客户端请求是否成功,或者是否采取其他动作。
伴随着每个数字状态码,HTTP还会发送一条解释性的"原因语句"文本。
web页面中可以包含多个对象:应用程序完成一项任务时通常会发布多个HTTP事务。(浏览器执行一个事务来获取描述页面布局的html"框架",然后发布另外的http事务来获取每个嵌入式照片,图像等)
HTTP报文:
HTTP报文包括以下三部分:
- 起始行 : 报文的第一行就是起始行,在请求报文中用来说明要做些什么,在响应报文中说明出现了什么情况。
- 首部字段 : 起始行后面有一个或多个首部字段。每个首部字段都包含一个名字和一个值,为了便于解析,两者之间用冒号(:)来分隔。首部以一个空行结束。添加一个首部字段和添加新行一样简单。
- 主体 : 空行之后就是可选的报文主体了,其中包含了所有类型的数据。请求主体中包括了要发送给web服务器的数据,响应主体中装载了要返回给客户端的数据。起始行和首部都是文本形式且都是结构化的,而主体则不同,主体可以包含任意的二进制数据(如图片,音乐,视频,软件程序等),当前,主体也可以包含文本。
后续会详解,先做个了解。
- HTTP连接
- TCP/IP
HTTP是一个应用层协议,HTTP无需操心网络通信的具体细节,它把所有的细节都交给了通用,可靠的因特网传输协议TCP/IP。
- TCP提供了:
- 无差错的数据传输
- 按序传输(数据总是按照发送的顺序到达)
- 未分段的数据流(可以在任意时刻以任意尺寸将数据发出去)
只要建立了TCP连接,客户端和服务器之间的报文交换就不会丢失,不会被破坏,也不会在接收时出现错序。
HTTP协议位于TCP的上层。HTTP使用TCP来传输其报文数据。
在HTTP客户端向服务器发送报文之前,需要用网络协议地址和端口号在客户端和服务器之间建立一条TCP/IP连接。
怎么获取端口号和ip地址呢? 答案:通过URL
Telnet程序:
Telnet程序可以键盘连接到某个目标TCP端口,并将此TCP端口的输出回送到显示屏上,Telnet常用于远程终端会话,但他几乎可以连接所有的TCP服务器,包括HTTP服务器。
HTTP协议版本简单的了解下。(知道有这么回事就行)
- Web的结构组件
- 代理:位于客户端和服务器之间的HTTP中间实体。
- 缓存:HTTP的仓库,使常用页面的副本可以保存在离客户端更近的地方。
- 网关:连接其他应用程序的特殊web服务器。
- 隧道:对HTTP报文进行盲转发的特殊代理。
- Agent代理:发起自动HTTP请求的半智能Web客户端。
代理:web安全,应用集成以及性能优化的重要组成模块。(后面将详解)
缓存:web缓存或代理缓存是一种特殊的HTTP代理服务器。
网关:一种特殊的服务器,作为其他服务器中间实体使用。
隧道:隧道是建立连接之后,就会在两条连接之间对原始数据进行盲转发的HTTP应用程序。
HTTP隧道通常用来在一条或多条http连接上转发非http数据,转发时并不会窥探数据。
常见用途是通过http连接承载加密的安全套接字层流量,这样SSL流量就可以穿过只允许web流量通过的防火墙了。
Agent代理:代表用户发起http请求的客户端程序。(比如web浏览器)
而且还有很多自动代理,可以在无人监视的情况下发布http事务并获取内容。(如"网络蜘蛛",“web机器人等;后续会有详解”)
HTTP基本概括到这里就结束了,后续将讲解更多的HTTP相关协议内容。