HTTP基础实用教程

来源:互联网 发布:关于来电软件 编辑:程序博客网 时间:2024/06/05 17:28

Silver的博客

掌声背后

  • 首页
  • 日志
  • 相册
  • 音乐
  • 收藏
  • 博友
  • 关于我
 
 

日志

 
 
  阿Ben
  加博友   关注他

最新日志

  • Word“样式与格式”在排版中
  • 什么是DVS\DVR_船泊万里_百
  • OCX控件(组件)的相关知识 
  • 什么是ActiveX控件和插件?_
  • JasperReport+iReport高级报
  • java动态代理 - 困难户 - Ja

首页推荐

  • 请铁道部如实回答总理
  • 陈光标与张尚武演绎的“慈善文化”
  • 女记者为何惨死闹市街头 ?
  • 教育发展需多一些邵曳戎式“抗命”
  • 为北京信号研究设计院鸣不平
  • 实拍:2011纽约华裔小姐才艺比赛
更多>>



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.1200 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 原创空间)?

原创粉丝点击