其实开始学技术也好久了,一直想好好写博客,写读书笔记,可是一直没有开始,可能是因为自己太懒了吧。终于到了大四了,有时间真正静下心来好好的沉淀学习,希望这是一个好的开始,要坚持下去!
关于http的种种
http是什么?http这个协议与我们每天的网络生活都息息相关,那么http协议究竟是个神马东西呢,之前一直在做web开发,可以说一直在和网络打交道。可以从来没认真的研究过http的概念。
首先,http使用的是可靠地数据传输协议,因此它能够确保数据在传输过程中不发生混乱。所以我们在web开发过程中不需要担心网络本身存在的一些问题,专心的进行程序开发。
那么http是如何工作的呢,简单的来说就是客户端(最常见的也就是我们现在用的浏览器)向服务器发送http请求,服务器接收到http服务器请求后会在http响应中回送所请求的数据。在这个简单的过程中,有几点引起我的思考,http的内容请求结构如何,请求如何找到发送目标,请求如何被解析等等。
下面写介绍一些基本的概念:
资源:web服务器是web资源的宿主。web资源就是服务器系统中的文件,当然文件的形式多种多样,如html,txt等等。但是资源也可以不是静态的,还可以是动态生成的,如生成的动态天气,实时股票情况等。
媒体类型:网络上数千种不同的媒体类型,那么当数据传送过来的时候,接收端如何识别这个数据是html还是txt呢?这就需要MIME类型标记了,MIME这个东西在开发的时候不太容易见得到,但是遇到了就可能比较麻烦,记得又一次一个网站要做一个TXT的下载功能,使用的是直接点击超链接,但是这样做的话就变成客户端直接打开TXT文件的形式了,结果纠结了好久才发现是MIME和浏览器支持类型在做怪。回到正题,先让我们讲讲MIME的历史(我比较喜欢看历史 (¯﹃¯))。
(MIME(multipurpose internet mail extension,多用途因特网邮件扩展)看名字就知道这东西原来是给email用的,后来http协议借过来发现“嗯!非常好用!”,结果就一直沿用下来了,他最初的目标是为了解决在不同的电子邮件系统间搬移报文时存在的问题)
web服务器会为所有的http对象数据加一个MIME类型,例如这个,当浏览器从服务器取回一个对象时候,回去查看这个对象的MIME类型,以此来作为决定如何处理该对象的参考,即如果是html我就显示网页,如果是音频,我就播放音频等等。MIME种类很多,需要的时候可以去查一下。
URI(uniform resource identifier,统一资源标示符):要找到一个人就要知道他的名字,网络资源也是如此,每个web服务器资源都会有个名字,就是URI。
http://www.baidu.com/img/baidu_sylogo1.gif 这是百度首页的logo的URI,给定了URI,http就可以解析出对象了。URI有两种形式,分别为URL和URN,我们分别来看这两种形式:
URL(统一资源定位符):是最常见的资源标识符形式,URL描述了一台特定服务器上的某资源的特定位置。它可以用来从一个精确,固定的位置获取资源。
大部分URL都遵循一种标准格式,这个格式包含三个部分:
- URL的第一部分被称为方案(scheme),这表明了访问资源所使用的资源类型,这部分通常就是http(http://)。
- 第二部分给出服务器的因特网地址(如www.baidu.com)。
- 其余部分制定了服务器上的某个资源(如/img/baidu_sylogo1.gif)
URN(统一资源名):URN作为特定内容唯一名称使用的,与目前的资源所在无关(这个厉害)。使用这些与位置无关的URN,就可以将资源四处搬移。这个
仍处于试验阶段。
事务:让我们来看看HTTP的过程。一个http事务由一条从客户端发往服务器的请求命令和一个从服务器发回客户端的响应结果组成。这种通信是通过名为 http报文的格式化数据块进行的。
方法:支持几种不同的请求命令,这些命令被称为http方法,每个http报文都包含一个方法,这个告诉服务器要做什么(是否只有发送报文才会有方法?根据观察貌似是这样)。常见的五种方法:GET,PUT,DELETE,POST,HEAD。
状态码:这个对于我们来说可以说是做熟悉的了,例如404等等。每条HTTP响应报文成功返回时都会携带一个状态码。状态码是一个三位数字的代码,告知服务器的响应结果状态,或者需要采取其他的行动。具体要查看有哪些状态码随时去网上查找,有很多相关的资料。
web页面中可以包含多个对象,完成一项任务时候通常会发布多个http事务。
报文:是由一行一行的简单字符串构成的。http报文都是纯文本,不是二进制代码。
从web客户端发往服务器的http报文为请求报文(request message)。
从服务器发往客户端的报文为响应报文(response message)
请求报文:
响应报文:
HTTP报文包括一下三个部分:
- 起始行 :就是报文的第一行,在请求报文中说明要做什么,在响应报文中说明返回的情况。
- 首部字段:起始行后面有零到多个首部字段,为key-value值,key:value 的形式,以一个空行结束首部。
- 主体:空行之后就是报文主体,包含了所有的数据。
代理:它处于客户端与服务器中间,他是干什么的呢?首先他接收所有客户端的http请求,然后把这些请求转发给服务器,当然代理有可能会对这些请求进行修改。
缓存:是一种特殊的HTTP代理服务器,他可以将经过代理传送的常用文档复制保存起来。下个请求就可以直接利用这个缓存中的副本咯。他的好处就是,客户端从比 较近的缓存下载比从服务器下载速度提高很多,同时也降低了服务器负载。
网关:是一种特殊的服务器,作为其他服务器的中间实体使用。作用是协议的转换。
隧道:隧道是建立起来后,就会在两条连接之间对原始数据进行盲转发的HTTP程序。
HTTP隧道的一种常见的用途是通过HTTP连接承载加密的安全套接字层(SSL,secure socket layer)流量,这样SSL流量就可以穿过只允许web流量通过的防火墙 了。
Agent代理
是代表用户发起HTTP请求的客户端程序。所有发布web请求的应用程序都是HTTP Agent代理,我们接触最多的就是web浏览器了。
第一章的笔记就先这些了,在2012的最后几分钟写完了第一篇博客,希望明年也好加油学习,大家2013新年快乐~