HTTP基础实用教程
来源:互联网 发布:关于来电软件 编辑:程序博客网 时间:2024/06/05 17:28
Silver的博客
掌声背后
- 首页
- 日志
- 相册
- 音乐
- 收藏
- 博友
- 关于我
日志
阿Ben
加博友 关注他
最新日志
- Word“样式与格式”在排版中
- 什么是DVS\DVR_船泊万里_百
- OCX控件(组件)的相关知识
- 什么是ActiveX控件和插件?_
- JasperReport+iReport高级报
- java动态代理 - 困难户 - Ja
首页推荐
- 请铁道部如实回答总理
- 陈光标与张尚武演绎的“慈善文化”
- 女记者为何惨死闹市街头 ?
- 教育发展需多一些邵曳戎式“抗命”
- 为北京信号研究设计院鸣不平
- 实拍:2011纽约华裔小姐才艺比赛
更多>>
谁能告诉我Http协议的具体内容_百度知道
计算机端口_陈科宇_新浪博客
HTTP基础实用教程 ‎(BBTX 原创空间)‎
2009-04-17 10:04:54| 分类:默认分类 |字号 订阅
HTTP基础实用教程
本教程更倾向于实际应用,但事实上并不全面,学习时要求您广泛地查阅相关资料(单击文章中连接即可 ^_^),故本文主要起引导作用,引导您一步一步学习HTTP协议。
本文主要以客户端的角度来讲解HTTP协议,那些HTTP历史、优点什么的就不介绍了,要看的话网上多的得很。仅供有兴趣者者参考使用,如有不足错误之处,请于下栏“评论”处指出。
注意,你应该要会一门编程语言,用于操作练习。如不会,建议下载文末的小工具。
好,进入正题。HTTP协议基于TCP连接(也就是一个客户端,一个服务器,客户端主动连接服务器):先有客户端(浏览器)连接上服务器(网站),然后客户端会发送一个数据包(即HTTP请求包),告诉服务器想要什么。服务器接收到这个数据包后对其进行分析或,将相应的数据(HTTP应答包,通常为网页内容)回发给客户端。最后,客户端或服务器断开连接,这就完事了。很简单吧?
二、发送HTTP请求包
连接后,就是发送请求包了。还是刚才那个例子,要访问 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。
最后,别忘了带上一个空行。空行何用?事实上,这个请求包是可以分几次发送的(如果比较长的话),这个空行可以让服务器知道这个请求包已经结束。
发完请求包,Google服务器马上就把网页返回回来了:
在答应包中,第一行叫“状态行”,第一个协议名和版本,没啥好讲的。
第二个是状态码,由三个数字组成,200代表“成功、一切正常”。常见的还有500(服务器内部错误)、404(文件未找到)等等,详请见维基百科。附:漫画图解4xx错误
状态码后是文字描述,与状态码对应。没问题就“ok”,有问题就写上问题的简单描述。
接下来就是“应答头”了,与请求头类似,介绍几个常用的。Data是服务器时间、Set-Cookie设置小甜饼,下次发送请求包时应带上它。其他的请自行Google。
最后就是最重要的“请求正文”了,也就是网页的内容。
例子中为Google语言工具的HTML代码。和答应头之间用一个空行隔开,以一个空行结束。
需要注意的是,由于网页内容较多,应答包通常要分N次发送,客户端分析时需将其自行整合。
使用说起来也很简单,例子见右侧。
与刚才的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协议,那些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 。右边是最简单的一个例子:HTTP请求包
GET/language_tools HTTP/1.1[换行符]
Host: www.google.com[换行符]
Accept-Language: zh-cn[换行符]
[换行符]
Host: www.google.com[换行符]
Accept-Language: zh-cn[换行符]
[换行符]
第一行为请求行,由三部分组成:
第一个单词(“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服务器马上就把网页返回回来了: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>……[换行符]
[换行符]
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>……[换行符]
[换行符]
在答应包中,第一行叫“状态行”,第一个协议名和版本,没啥好讲的。
第二个是状态码,由三个数字组成,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[换行符]
使用说起来也很简单,例子见右侧。POST请求包
POST/test/test.asp HTTP/1.1[换行符]
From: local[换行符]
Content-Length: 26[换行符]
[换行符]
user=bbtx&password=qqq1243[换行符]
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 原创空间)?
- HTTP基础实用教程
- 从基础开始:CSS实用教程
- 实用教程
- 从基础开始:CSS实用教程(三)
- 从基础开始:CSS实用教程(三)
- 从基础开始:CSS实用教程(二)
- 从基础开始:CSS实用教程(一)
- Python2.5/2.6实用教程:基础篇
- 实用教程——Java基础数据
- HTTP 基础
- Http 基础
- http基础
- http 基础
- HTTP基础
- http基础
- HTTP基础
- http基础
- HTTP基础
- multiprocessing 进程池 pool
- 2011-8-6 18:04:28
- 2011-8-6 18:05:30
- Webkit创建Smart TV应用的几个问题
- [Android]read file examples
- HTTP基础实用教程
- Jrebel的实现方法
- 编写第一个Android程序遇到异常退出
- java 插入排序
- 血战上海滩必看
- 控制台菜单
- 《程序员的思维修炼--开发认知潜能》读书笔记
- 资料-zlib-数据压缩和加压资料
- Sending and receiving broadcast message in Android