`
jishublog
  • 浏览: 862145 次
文章分类
社区版块
存档分类
最新评论

java程序员菜鸟进阶(六)《HTTP权威指南》之HTTP相关概念详解

 
阅读更多


Http:超文本传输协议,在我们如今的网络时代。我们每天浏览着万万千千的网页,图片,文字,这些都离不开Http,他是我们快速可靠访问世界各地的web服务器资源地基础。Http使用的是可靠地数据传输协议TCP协议。这样就是保证了我们所访问资源的万无一失,不会产生数据丢失或者损坏。这也可以使我们开发人员把更多的经历放在程序业务细节上得编写。避免了考虑一些数据传输途中的缺陷。下面我们就简单来看一下HTTP有关的基础知识。


一:web服务器和客户端

Web服务器所使用的是HTTP协议。所以经常被称为HTTP服务器,这些服务器存储了大量的网络资源。在我们平时的上网过程中。我们每一次点击的一个连接其实就是一个web请求。当我们点击连接时,web客户端,在这里也就是指的是浏览器会向web服务器发送一个请求。Web服务器根据请求的资源提供数据


二.资源

在我们平时上网中所看到的的大多数都是web资源。这些资源都寄存在web服务器上。当我们访问想要的资源时。Web服务器会给我们提供。最简单也是最常见的资源就是一些静态资源。如一些文档,静态页面、音频等。但资源不一定是静态文件,有些资源还可以是根据需要生产内容的软件程序

1.媒体类型

在众多的web资源中,它们有数千种不同的数据类型。HTTP会给每种要通过web传输的资源对象定义一个MIME类型的标签。MIME类型是一种文本标记。表示一种主要的对象类型和一个特定的子类型。中间由一条斜杠来分割。

常见的MIME类型(通用型)

超文本标记语言文本.htmltext/html

xml文档.xmltext/xml

XHTML文档.xhtmlapplication/xhtml+xml

普通文本.txttext/plain

AVI文件.avivideo/x-msvideo

GZIP文件.gzapplication/x-gzip

TAR文件.tarapplication/x-tar

任意的二进制数据application/octet-stream


2.URI

每一个web服务器资源都有一个名字,这个名字叫资源标识符。他就像一个邮政地址一样,在世界范围内唯一标识并定位信息资源。URI有两种形式。分别为URLURN.


3.URL

统一资源定位符(URL,英语UniformResourceLocator的缩写)也被称为网页地址,是因特网上标准的资源的地址。

URL的格式由下列三部分组成:

第一部分是协议(或称为服务方式);

第二部分是存有该资源的主机IP地址(有时也包括端口号);

第三部分是主机资源的具体地址。,如目录和文件名等。

第一部分和第二部分之间用//”符号隔开,第二部分和第三部分用“/”符号隔开。第一部分和第二部分是不可缺少的,第三部分有时可以省略。现在几乎所有的URI都是URL


4.URN

统一资源名称(UniformResourceName,URN),唯一标识一个实体的标识符,但是不能给出实体的位置。系统可以先在本地寻找一个实体,在它试着在Web上找到该实体之前。它也允许Web位置改变,然而这个实体却还是能够被找到。URN可以提供一种机制,用于查找和检索定义特定命名空间的架构文件。尽管普通的URL可以提供类似的功能,但是在这方面,URN更加强大并且更容易管理,因为URN可以引用多个URL。与URL不同,URN与地址无关。URNURL都属于URI。URNweb中主要应用是下拉菜单的制作。使用URN时下拉菜单的易扩展性将会得到很大的提高。

三.事务


一个HTTP事务是有一个web客户端的请求和得到一个web服务器端响应组成的。这种通信时通过一种叫http报文的数据块进行传输的。


1.方法

每一种HTTP请求报文都包含一种方法。这个方法指示了服务器要执行什么动作(获取页面、运行网关程序、删除文件等)。


四。种常见的Http方法


1.HEAD向服务器索要与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以在不必传输整个响应内容的情况下,就可以获取包含在响应消息头中的元信息。 

2.GET向特定的资源发出请求。注意:GET方法不应当被用于产生副作用的操作中,例如在webapp.中。其中一个原因是GET可能会被网络蜘蛛等随意访问。 

3.POST向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。 

4.PUT向指定资源位置上传其最新内容。 

5.DELETE请求服务器删除Request-URI所标识的资源。


2.状态码

每一个HTTP响应报文都会带回一个响应状态码。顾名思义,状态码就是反应此次请求的结果状态。反应请求是否成功,或者要执行其他动作。常见状态码有200,404,505

所有状态码详细信息:http://baike.baidu.com/view/1790469.htm


3.web页面中可以包含多个对象

应用程序完成一项任务时通常会发布多个HTTP事务。比如,Web浏览器会发布一系列HTTP事务来获取并显示一个包含了丰富图片的Web页面。浏览器会执行一个事务来获取描述页面布局的HTML“框架,然后发布另外的HTTP事务来获取每个嵌入式图片、图像面板、Java小程序等


五.报文


一个HTTP请求报文由请求行(requestline)、请求头部(header)和请求数据3个部分组成,HTTP有两类报文:请求报文和响应报文。请求和响应报文顾名思义,一个是web客户端发送请求时响应的HTTp报文,一个是web服务器响应式响应的Http报文。其实他们的格式都是相同的。

我们以一个实际的看一下请求报文:




是请求方法,GETPOST是最常见的HTTP方法,除此以外还包括DELETEHEADOPTIONSPUTTRACE。不过,当前的大多数浏览器只支持GETPOSTSpring3.0提供了一个HiddenHttpMethodFilter,允许你通过“_method”的表单参数指定这些特殊的HTTP方法(实际上还是通过POST提交表单)。服务端配置了HiddenHttpMethodFilter后,Spring会根据_method参数指定的值模拟出相应的HTTP方法,这样,就可以使用这些HTTP方法对处理方法进行映射了。
为请求对应的URL地址,它和报文头的Host属性组成完整的请求URL是协议名称及版本号。

①②③统称为请求行
HTTP的报文头,报文头包含若干个属性,格式为属性名:属性值,服务端据此获取客户端的信息。
是报文体,它将一个页面表单中的组件值通过param1=value1¶m2=value2的键值对形式编码成一个格式化串,它承载多个请求参数的数据。不但报文体可以传递请求参数,请求URL也可以通过类似于“/chapter15/user.html?param1=value1¶m2=value2”的方式传递请求参数。

六.连接

这里所说的连接其实就是TCP连接。HTTP报文就是通过TCP连接进行数据传输的。


1.TCP/IP

HTTP是应用层协议,他无需操心网络通信的具体细节,这些具体工作都交给了同用、可靠地因特网传输协议TCP/IP

从协议分层模型方面来讲,TCP/IP由四个层次组成:网络接口层、网络层、传输层、应用层。

因特网本身就是基于TCP/IP的。它隐藏了许多网络传输过程中的弱点和各种网络和硬件特点。使各种类型的计算机和网络都能进行可靠地通信。只要简历的TCP连接。客户端和服务器端就能进行安全可靠地数据传输。用网络术语来说,HTTP协议位于TCP的上层。HTTP使用TCP来传输其报文数据。与之类似,TCP则位于IP的上层。




2.连接、IP地址和端口号

HTTP客户端在向服务器发送报文之前首先要首先要用端口号和IP地址建立一个TCP/IP连接 。建立一个TCP连接就和一个小区的某户人家寄信是一个样的。小区的地址就相当于一个IP地址。我们知道他的地址在那个小区的哪个楼了。但我们不知道他的门牌号还是无法确定是哪一家的信。所以我们需要一个端口号即为门牌号去具体确定是哪一个服务

七.Web的结构部件

这里我们主要是先来了解几个基本的概念


1.代理:位于客户端和服务器之间的HTTP中间实体。他其实的作用就是接收HTTP请求。然后作为中间人在转发出去。它有可能对请求做一些改变也可能原封不动的转发出去。


2.缓存:HTTP的仓库,使常用页面的副本可以保存在离客户端更近的地方。有了缓存之后可以加快HTTP请求的访问速度。如果一个请求被请求过。再次请求的时候去缓存中找。这样大大减小了服务器的压力。


3.网关:连接其他应用程序的特殊Web服务器。其实说白了,他就是一个转换网络协议的中间变量。假如它收到一个HTTP请求。这个可能访问的资源可能需要用到FTP协议请求所需资源。这时就要用到网关


4隧道:对HTTP通信报文进行盲转发的特殊代理。隧道(tunnel)是建立起来之后,就会在两条连接之间对原始数据进行盲转发的HTTP应用程序。HTTP隧道通常用来在一条或多条HTTP连接上转发非HTTP数据,转发时不会窥探数据。隧道这个概念我没有理解很透彻,还有些疑惑。希望对这个理解透彻的朋友讲解一下


5.Agent代理:发起自动HTTP请求的半智能Web客户端。我们目前大多数发起HTTP请求的web客服端都是基于浏览器。Agent代理就是一个自动发送HTTP请求的工具


到目前为止,一些关于HTTP协议的基本概念简单介绍完毕,在以后的文章中我还会细写有关概念。敬请期待。




昨晚读《http权威指南》疑问,在将相对url转为绝对url时,如果相对url没有方案,主机,端口,参数,查询字符串等组件,那么它将继承基础的的相关组件……那么在我们平时的web开发中,在第一个页面点击一个链接传的参数(查询字符串),在链接页面的request中,可以得到参数值那如果在链接的页面中有一个相对url链接,点击这个链接之后,是不是在这个链接页面的request中也可以得到刚才传的参数值?求各位大神帮忙解答。




分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics