这是很老很老的一篇文章了,基本上是我的第一篇博客文章了,估摸着应该是9年前的事了,当时用的是CSDN + 博客园的博客系统,通过百度搜索找到的当时的文章,发现CSDN把我的图3,图4搞掉了,正想着为了所谓的
情怀
要再次抓图补全来着,然后发现博客园完整的保留了我的图。
Http协议是一个基于TCP/IP 的协议,使用的是一种请求/响应模型
目前的版本为1。1,但有一些网站仍然使用1。0的版本,在待会的实验中,我们可以看到,网易的主页163.com仍旧使用的1.0的标准。
在这一种机制中,总是客户端请求服务器,服务器接受响应后根据请求端的请求信息,请求实体的权限,进行响应。常用的请求方式主要有GET,HEAD,POST
下面是对这三种方法的详细解释:
首先说说什么是GET请求: GET方法就是以实体方式得到由请求URI所指定资源的信息。如果请求URI只是一个数据产生过程,那么最终要在回应实体中返回的是由该处理过程的结果所指向的资源,而不是返回该处理过程的描述文字,除非那段文字恰好是处理的输出。 如果请求消息包含If-Modified-Since标题域,GET方法的语法就变成“条件GET”,即“(conditional GET)”。 条件GET方法可以对指定资源进行判断,如果它在If-Modified-Since标题域(见10.9节)中的指定日期后发生了更新,才启动传输,否则不传输。这种条件GET允许被缓存的实体在不必经过多次请求或不必要的数据传输就能进行刷新,从而有助于降低网络负载。
然后再来说说HEAD请求吧: HEAD方法与GET几乎一样,区别在于,HEAD方法不让服务器在回应中返回任何实体。对HEAD请求的回应部分来说,它的HTTP标题中包含的元信息与通过GET请求所得到的是相同的。通过使用这种方法,不必传输整个实体主体,就可以得到请求URI所指定资源的元信息。该方法通常用来测试超链接的合法性、可访问性及最近更新。 与条件GET不同,不存在所谓的“条件HEAD”,即"conditional HEAD"。即使在HEAD请求中指定If-Modified-Since标题域,它也会被忽略。
最后是POST请求: POST方法用来向目的服务器发出请求,要求它接受被附在请求后的实体,并把它当作请求队列(Request-Line)中请求URI所指定资源的附加新子项。POST被设计成用统一的方法实现下列功能:
a. 对现有资源的注释(Annotation of existing resources);
b. 向电子公告栏、新闻组,邮件列表或类似讨论组发送消息;
c. 提交数据块,如将表格(form [3])的结果提交给数据处理过程;
d. 通过附加操作来扩展数据库。
下面以具体的例子来说明一次请求过程,以期待有一个良好的感性认识,顺便介绍一下如何利作windows自带的工具进行请求。
在请求时,我们使用的是telnet命令。打开Windows命令提示框(开始---运行----输入CMD-----回车)然后打开远程终端,其命令提示为telnet,如下图所示:
进行终端程序以后,当连接到某一个服务器后,默认的设置是关闭回显,这个时候,我们需要打开回显才可以在连接服务器后看见我们输入的文字:
使用SET LOCAL-ECHO打开回显
使用HEAD命令请求163.COM服务器下面的index.htm页面。如图所示,可以看见已经成功请求到了这一个页面。关于返回的页面头的详细信息,会在以后的内容做更加详细的讲解。还是先将上一个内容讨论完整,即请求命令。
在请求命令中,必须指明请求的类型,请示的URI,请求的HTTP协议的版本号,及服务器和端口号。如上例所示,其中,HEAD是主求的类型,/index.html是请求的URI,HTTP/1.1是HTTP协议的版本号。服务器由第二行的数据指定,写完命令后连续按两个回车即可以看到内容。 请求信息除了包含这些必须的信息外,还可以包含更多的信息,比如自身的一些信息:操作系统,浏览器等内容。 用更加专业的话说,就是一个请求消息应包含一个起始行,一个或者多个头域,一个头域结束符,即一个空行,最后一部份是可选的消息体。每个头域由一个域名,冒号,域值组成。 请求头域的域名可以为以下几种: A:Cache-Control,用于指明是否缓存页面,对于一些安全性较好的页面,往往不缓存,而对于安全性,实时性不太好的页面,则可以缓存,比如天气预报的服务等。 B:Host,指写请求Internet的主机名和端口号,必须表示请求的URI的原始服务器或默认的网关地址。HTTP/1.1必须包括Host头域。 C:Referer,它允许客户端指定请求URI 源资源的地址,还可以允许服务器生成回退链,可用来登陆,优化等。他也允许错误或弃的链接由于维护的目的被追踪。如果请求的URI没有自己的URI地址,则这个域不会被发送。 D:User-Agent,这个头域允许客户瑞发送自己的一些信息,比如前面提到的操作系统。 关于请求头域的更多信息,可以参考W3C的官方资料,在这里就不一一列举了。
关于响应消息,其实我们在前面已经有所了解了。比如最前面提到的请求网易主页的那个页面。 其信息如下所示:
先从第一行讲起:HTTP/1.1 200 OK 很显然,最开始描述了HTTP的协议版本。200是一个状态值,而OK是对这个状态值的简单描述。 关于返回的状态值,这里做一个简单的介绍: 目前的状态值其有近40个,一一记住有点困难,在使用的过程中我们可以参考资料,不过可以分类记忆,其规律如下 凡是以1开头是信息响应类,表示服务器正在处理。 凡是以2开头是成功响应类,表示请求的消息被成功的理解,接受。 凡是以3开头的是重定向响应类,为了完成指定的动作,必须接受进一步的处 理。 凡是以4开头的是客户端错误,表示客户瑞包含语法错误,不能被正确的处理。 凡是以5开头的表示服务端不能正确的执行一个正确的响应。 第二行指明了响应的时间,在DATE域名中指定。 第三行是由Server域名指定的服务器的信息。 第四行是指长度是字节为单位定义。 第五行是指客房机可以生成生命周期不大于300秒的响应。 最后一行指定了文档类型 ,编码方式。 除此之外,还有很多域名,这里不一一详细说大,可以参考W3C的文档。
Copyright© 2013-2020
All Rights Reserved 京ICP备2023019179号-8