Chinaunix首页 | 论坛 | 博客
  • 博客访问: 642945
  • 博文数量: 133
  • 博客积分: 1566
  • 博客等级: 上尉
  • 技术积分: 1230
  • 用 户 组: 普通用户
  • 注册时间: 2010-12-01 09:31
文章分类

全部博文(133)

文章存档

2019年(1)

2018年(1)

2017年(8)

2016年(9)

2015年(17)

2014年(4)

2013年(31)

2012年(25)

2011年(36)

2010年(1)

我的朋友

分类: Html/Css

2013-08-05 09:31:55

写在前面:

第一次想写系列文章,学习了一些web知识后,发现自己还有很大的不足,但又不知道该学习些什么来完善自己的知识体系,偶然在网上看到了一篇介绍http的文章,觉得对自己有一些帮助,于是想要开始学习http,我担心自己不能够坚持下去,所以希望能通过这种方式督促自己学习。

 

http概览

  HTTP协议(HyperText Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传送协议。它可以使浏览器更加高效,使网络传输减少。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等。

——百度百科

  首先,http一种可靠的数据传输协议,因为它必须是可靠的,假设http是不可靠的,传输的数据总是丢三落四,这样不是很糟糕,你想上网看一篇新闻,结果只显示了第一段和第三段,那不是很崩溃。关于可靠性,在后面的文章再介绍。,即使数据来自很遥远的地方,依旧可以完整的传输过来,不会丢失。

 

         

http又是无状态的,也就是每次发出的请求都是独立的,和上次的请求是没有关系的。这样的好处是服务器响应的速度会很快,但是很难保持用户的状态,现在一般都是通过cookiesession来保持用户上网时的状态的。关于这个问题,以后的笔记中还会再谈。

Web服务器

   接下来说说web谈到http,必须要说到web了,因为http协议最广泛的应用就是web了。Web服务器使用的基本都是http协议,所以web服务器也被称为是http服务器,在RedHat中apacheservice中使用名字就是httpd。它们在http传输过程中为客户端提供内容,让我们可以看到精彩的内容。

 

 

报文初探

 

我们每天都会用chrome等浏览器向web服务器发送http请求,然后服务器给我们返回一个http响应信息。以上的这个过程被称为事务,也就是一个http请求命令和一个http响应命令组成的一个完整的响应过程。

  这样的解释可能还是不够直观,我们可以使用telnet工具(关于telnet linux用户可以通过yum或者apt-get安装,win用户可以在控制面板中的添加telnet功能)来看看http到底长得是怎么样的吧。

  假设这里有一个web服务器的IP地址是192.168.170.171 端口是默认的80端口,我尝试用telnet去访问它。


点击(此处)折叠或打开

  1. telnet> open 192.168.170.171 80
  2. Trying 192.168.170.171...
  3. Connected to 192.168.170.171.
  4. Escape character is '^]'.
  5. Get /index.html HTTP/1.1
  6. Host: 192.168.170.171
  7. Accept: *
以上信息中,GET开始到最后就是一次简单的http请求。

我发送完http消息后,立即得到了以下响应:

点击(此处)折叠或打开

  1. HTTP/1.1 200 OK
  2. Date: Thu, 13 Jun 2013 07:14:43 GMT
  3. Server: Apache/2.2.15 (CentOS)
  4. Last-Modified: Thu, 13 Jun 2013 07:06:06 GMT
  5. ETag: "c01c3-3f-4df03c3a2d5c3"
  6. Accept-Ranges: bytes
  7. Content-Length: 63
  8. Connection: close
  9. Content-Type: text/html; charset=UTF-8
  10. <html>
  11.     <body>
  12.         <h1>
  13.             hello world!
  14.         </h1>
  15.     </body>
  16. </html>

Html标签前面的就是http响应信息了。

这就是一次简单的http事务了。

它们长得貌似有点吓人。这里面到底有什么东西呢?

                

 现在让我们看下请求中有什么信息

	

点击(此处)折叠或打开

  1. 1 GET /index.html HTTP/1.1
  2. 2 Host: 192.168.170.171
  3. 3 Accept: *

首先是GET /index.html HTTP/1.1

这句话定义了客户端是通过GET方法 发送一个获取index.html的页面,在传输中使用的是http1.1协议。

第二句定义了目标主机的地址,当然如果有dns服务器的话,这里写域名地址也是可以的。

第三句话写了客户端期待接受的MINE类型,也就是客户端希望得到的资源是什么类型。*在这里表示接受任何类型。

 

接下来我们看响应信息。

点击(此处)折叠或打开

  1. HTTP/1.1 200 OK
  2. Date: Thu, 13 Jun 2013 07:14:43 GMT
  3. Server: Apache/2.2.15 (CentOS)
  4. Last-Modified: Thu, 13 Jun 2013 07:06:06 GMT
  5. ETag: "c01c3-3f-4df03c3a2d5c3"
  6. Accept-Ranges: bytes
  7. Content-Length: 63
  8. Connection: close
  9. Content-Type: text/html; charset=UTF-8
  10. <html>
  11.     <body>
  12.         <h1>
  13.             hello world!
  14.         </h1>
  15.     </body>
  16. </html>

首句HTTP/1.1 200 OK表示服务器采用http1.1协议传输这段响应报文,状态码200表示响应成功。OK是给管理员看的,也是表示响应成功。

第二句中Date: Thu, 13 Jun 2013 07:14:43 GMT显示了响应发生的时间。

第三句给出了服务器的一些信息。

第四句中Last-Modified: Thu, 13 Jun 2013 07:06:06 GMT,给出了页面上次修改的时间。

第五句中ETag: "c01c3-3f-4df03c3a2d5c3" 这相当于一个版本号,这个和web缓存机制有关。

第六句Accept-Ranges: bytes表示对这个页面资源而言,服务器可以接受的范围类型

第七句Content-Length: 63表示了这个页面的长度

第八句Connection: close表示连接被关闭。

第九句Content-Type: text/html; charset=UTF-8这里表示页面的文本格式,和字符编码。

 

到这里为止,我对http事务有一个大概的了解,上面的一些信息也许暂时还看不明白,我会在后面的学习中逐步完善。今天就到这里。休息!

阅读(2054) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~