HTTP基础实用教程

Silver的博客

掌声背后

日志

 
 

HTTP基础实用教程 ‎(BBTX 原创空间)‎  

2009-04-17 10:04:54|  分类: 默认分类 |字号 订阅

HTTP基础实用教程

本教程更倾向于实际应用,但事实上并不全面,学习时要求您广泛地查阅相关资料(单击文章中连接即可 ^_^),故本文 主要起引导作用 ,引导您一步一步学习HTTP协议。
  本文主要以客户端的角度来讲解HTTP协议,那些HTTP历史、优点什么的就不介绍了,要看的话网上多的得很。仅供有兴趣者者参考使用,如有不足错误之处,请于下栏“评论”处指出。
  注意,你应该要会一门编程语言,用于操作练习。如不会,建议下载文末的 小工具

  好,进入正题。HTTP协议基于 TCP连接(也就是一个 客户端,一个 服务器,客户端主动连接服务器):先有客户端(浏览器)连接上服务器(网站),然后客户端会发送一个 数据包(即 HTTP请求包),告诉服务器想要什么。服务器接收到这个数据包后对其进行分析或,将 相应的数据HTTP应答包,通常为网页内容)回发给客户端。最后,客户端或服务器断开连接,这就完事了。很简单吧?

一、连接服务器

  刚刚说了,如果你要获取某个网站的某个网页,就要先连接该网站服务器 (废话... -_-||)。例如要访问 http://www.google.cn/language_tools,那只要连接到 www.google.cn 即可,端口号默认为80。如遇到类似这样格式的网址:http://xxx.cn:10728/,那就要连接 xxx.cn,端口10728(冒号“:”后的数字即为端口号)。

二、发送HTTP请求包

HTTP请求包

GET /language_tools HTTP/1.1[换行符]
Host: www.google.com [换行符]
Accept-Language: zh-cn [换行符]
[换行符]
  连接后,就是发送请求包了。还是刚才那个例子,要访问 http://www.google.cn/language_tools 。右边是最简单的一个例子:

  第一行为请求行,由三部分组成:
  第一个单词(“ GET”),叫做“ 请求方法”,GET的中文意思是“获取,获得”,即获取网页。(除GET外,还有 POST、HEAD、OPTIONS、PUT、DELETE、TRACE,共七种方法。GET和POST最为常用。)注意,必须大写!
  第二个“ /language_tools”,即要取得的网页。如是首页,则为“/”即可。
  第三个“ HTTP/1.1”是协议名称(HTTP)和 协议版本(1.1),这些是固定的。

  请求行后就是“ 请求头”。从例子里就可以看出,请求头的结构为“名称: 内容”。这些请求头每个之间用换行隔开,不分顺序。
  例子中第一个是“ HOST”(中文意思“主机”),内容为服务器域名(或IP),因为许多服务器通常有绑定多个域名,这样就必须告诉服务器你访问的是那个域名。
  第二个“Accept-Language”(中文意思“接受的语言”),当这个网页可能有很多个语言版本时,用此告诉服务器,用什么语言(zh-cn 为简体中文的 语言代码)。
  除此之外,常用的还有Cookie、 Connection、 Content-Length等等,这里不再累述,请 自行Google
  最后,别忘了带上一个空行。空行何用?事实上,这个请求包是可以分几次发送的(如果比较长的话),这个空行可以让服务器知道这个请求包已经结束。

三、解读HTTP应答包

HTTP答应包

HTTP/1.1 200 OK [换行符]
Cache-Control: private, max-age=0 [换行符]
Date: Wed, 21 Jan 2009 08:17:40 GMT [换行符]
Content-Type: text/html; charset=GB2312 [换行符]
Set-Cookie: PREF=ID=ae1601bed998d1b2…… [换行符]
Server: gws [换行符]
Transfer-Encoding: chunked [换行符]
[换行符]
<html><head><title>语言工具</title><meta http-equiv="content-type" content="text/html;charset=GB2312"><style>…… [换行符]
[换行符]
  发完请求包,Google服务器马上就把网页返回回来了:

  在答应包中,第一行叫“ 状态行”,第一个协议名和版本,没啥好讲的。
  第二个是 状态码,由三个数字组成, 200代表“成功、一切正常”。常见的还有 500(服务器内部错误)、 404(文件未找到)等等,详请见 维基百科。附: 漫画图解4xx错误
  状态码后是文字描述,与状态码对应。没问题就“ok”,有问题就写上问题的简单描述。

  接下来就是“ 应答头”了,与请求头类似,介绍几个常用的。Data是服务器时间、Set-Cookie设置小甜饼,下次发送请求包时应带上它。其他的请自行Google

  最后就是最重要的“
请求正文 ”了,也就是网页的内容。
例子中为Google语言工具的HTML代码。和答应头之间用一个空行隔开,以一个空行结束。
需要注意的是,由于网页内容较多,应答包通常要分N次发送,客户端分析时需将其自行整合。

四、PSOT请求

  刚刚一路讲的都是GET,其实还有一个非常常用的请求方法——POST。POST用于提交表单,若有学过ASP、PHP之类的,就一定知道“ 表单”为何物。也就是我们登录网站、注册用户、投票、发帖子等填写的那些项目。当你单击“登录”、“注册”、“提交”等按钮时,这些表单中的内容就被提交到了服务器。提交这些数据,通常采用的就是POST!

POST请求包

POST /test/test.asp HTTP/1.1 [换行符]
From: local [换行符]
Content-Length: 26 [换行符]
[换行符]
user=bbtx&password=qqq1243 [换行符]
  使用说起来也很简单,例子见右侧。
  与刚才的GET包相比,请求方法由“GET”变成了“POST” (又是废话...)

  请求头方面,“Content-Length”是必须的,表示数据的长度,也就是末尾黄色部分的长度。因为服务器如果不知道长度,怎么知道你(客户端)什么时候发送完了所有数据呢?如果没有带上此头,服务器通常会返回错误码 411

  那黄色部分也就是实际的数据内容了,假设这是一个登录页面的POST。这个登录页面 就像这样,有两个文本域,名称分别为user(用户名)和password(密码)。
  当输入用户名为“ bbtx”,密码为“ qqq1243”,提交的数据即为“ user=bbtx&password=qqq1243”。也就是“ 名称=内容&名称=内容&……”的形式。

  要注意的是,中文通常会编码为类似“ %B0%E6%C8%A8%CB%F9%D3%D0+%D0%BB%B6%FB%B3%C0”的形式,这是中文被转换成了十六进制值。服务器需要对其进行解码后方可阅读。



引文来源   HTTP基础实用教程 ?(BBTX 原创空间)?

猜你喜欢

转载自blog.csdn.net/coolfishbone_joey/article/details/6665624
今日推荐