`
chanshui
  • 浏览: 82913 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

http协议基本原理

阅读更多

http协议基本原理
xml web service 开发
第1章 xml web service
第2章 xml web service 体系结构
第3章 xml web service 基础技术
第4章 使用 xml web service
第5章 实现一个简单的 xml web service
第6章 部署和发布 xml web service
第7章 xml web service 的安全
第8章 xml web service 设计
第9章 全局 xml web service 体系结构
第3章 xml web service 基础技术
http 协议基本原理
在 .net framework 中使用http协议
xml 基本要点
soap 协议的基本原理
在 .net framework 中运用 soap协议
http 协议基本原理
http 协议概述
http 请求与http响应的结构
http 的 get 与 post 方法
3.1http协议基本原理
url,uri 和 urn
uri,uniform resource identifier
统一资源标识符,用字符串惟一标识信息资源
url,uniform resource locator
统一资源定位符,通过"通讯协议+网络地址"字符串惟一标识信息位置和资源访问途径
urn,uniform resource name
统一资源命名符,用于惟一标识全球范围内由专门机构负责的稳定的信息资源
3.1http协议基本原理
http 协议概述
url 结构
无状态协议
在客户端发出 http 请求并收到服务器端响应后,连接就会断开,下次的访问与前一次的访问无关,因此如果需要维护客户端的信息,必须在服务器端维持状态数据
实例
http://host[:port][path[ querystring]]
http://www.woodgrovebank.com/accts.asp accno=23
主机
路径
查询字符串
3.1.1 http 协议概述
http 请求的结构
请求的结构
例子
post /thestockexchange/trading/getstockprice.asp http/1.1
host: localhost
content-type: application/x-www-form-urlencoded
content-length: 11
symbol=msft
注意空行
method url version
headers
message body
注意空行
3.1.2 http 请求与http响应的结构
响应的结构
例子
http/1.1 200 ok
content-type: text/xml; charset=utf-8
content-length: 75
http 响应的结构
注意空行
version status-code description
headers
message body
注意空行
3.1.2 http 请求与http响应的结构
http 的 get 和 post 方法
http-get
http-post
例子
例子
get /trading/getstockprice.asp symbol=msft http/1.1
host: localhost
post /trading/getstockprice.asp http/1.1
host: localhost
content-type: application/x-www-form-urlencoded
content-length: 11
symbol=msft
3.1.3 http 的 get 与 post 方法
get 和 post 方法的区别
get 方法通常没有消息主体
get 方法支持最大1024个字节的查询字符串,post 方法没有限制
post 方法把查询字符串放在消息主体中传输,因此比 get 方法支持更多的数据类型
3.1.3 http 的 get 与 post 方法
第3章 xml web service 基础技术
http 协议基本原理
在 .net framework 中使用http协议
xml 基本要点
soap 协议的基本原理
在 .net framework 中运用 soap协议
在 .net framework 中使用http协议
使用http协议的.net类
代码演练 发送 http 同步请求
代码演练 发送 http 异步请求
.net 中与 http 相关的类
httpwebrequest 由 webrequest 派生,封装了对http 协议的支持
httpwebresponse 由 webresponse 派生,封装了对 http 协议的支持
支持同步和异步操作
httpwebrequest
httpwebresponse
system.web
system.io
streamreader
streamwriter
3.2.1 使用 http 协议的.net 类
httpwebrequest 类
httpwebrequest不使用构造函数来进行初始化,而是调用 webrequest 的 create 方法
getresponse 方法向 requesturi 属性中指定的 internet 资源发出同步请求并返回包含该响应的 httpwebresponse 实例,可以使用 begingetresponse 和 endgetresponse 方法向 internet 资源发出异步请求
向 internet 资源发送数据时,getrequeststream 方法返回用于发送数据的 stream 实例,begingetrequeststream 和 endgetrequeststream 方法提供对发送数据流的异步访问
3.2.1 使用 http 协议的.net 类
同步调用与异步调用
在 .net framework 指定的异步调用方法的设计模式中,每个同步方法都有两个对应的异步方法,即一个 begin 异步方法和一个 end 异步方法
客户端调用 begin 方法启动该方法的异步调用,实质是指示开始进行方法调用,但立即返回,不需要等待结果
客户端调用 end 方法获取 xml web service 方法执行的结果
3.2.1 使用 http 协议的.net 类
代码示例 发送同步 http 请求
使用 httpwebrequest 和httpwebresponse 类向 web 服务器发送同步 http 请求
3.2.2 代码演练 发送 http 同步请求
同步请求
//根据url发送http请求
1. httpwebrequest req = (httpwebrequest ) webrequest.create(url);
2. req.contenttype=contenttype;
//确定请求方式为post或get
3. req.method = method;
4. req.contentlength=content.length;
5. stream s;
获取请求流,将请求的内容写入流中
6. s = req.getrequeststream();
7. streamwriter sw = new streamwriter(s,encoding.ascii);
8. sw.write(content);
9. sw.close();
同步请求
10. //获取响应
11. httpwebresponse res = (httpwebresponse) req.getresponse();
12. s = res.getresponsestream();
13. //读出响应流
14. streamreader sr = new streamreader(s,encoding.ascii);
15. stringbuilder sb = new stringbuilder();
16. char [] data = new char[1024];
17. int nbytes;
18. do {
19. nbytes = sr.read(data,0,(int)1024);
20. sb.append(data);
21. } while (nbytes == 1024);
代码示例 发送异步 http 请求
使用 httpwebrequest 和 httpwebresponse 类向web 服务器发送异步 http 请求
3.2.3 代码演练 发送 http 异步请求
异步请求
1. stream s;
2. httpwebrequest req = (httpwebrequest )webrequest.create(url);
3. req.contenttype=contenttype;
4. req.method = method;
5. req.contentlength=content.length;
6. s = req.getrequeststream();
7. streamwriter sw = new streamwriter(s);
8. sw.write(content);
9. sw.close();
异步请求
10. //创建时间处理程序
11. handler h = new handler();
12. asynccallback callback = new asynccallback(h.callback)
13. // 将请求对象作为状态对象进行传递
14. req.begingetresponse(callback, req);
15.
16. ...
17.
异步请求
//处理程序
18. public class handler
19. {
20. public void callback(iasyncresult ar)
21. {
22. // 从请求状态中获取处理对象
23. httpwebrequest req = (httpwebrequest)ar.asyncstate;
24. // 获取响应对象
26. httpwebresponse res = (httpwebresponse)req.endgetresponse(ar);
异步请求
27. // 开示读取响应流
28. stream s = res.getresponsestream();
29.
30. streamreader sr = new streamreader(s,encoding.ascii);
31. stringbuilder sb = new stringbuilder();
32. char [] data = new char[1024];
33. int nbytes;
34. do
35. {
36. nbytes = sr.read(data,0,(int)1024);
37. sb.append(data);
38. } while (nbytes == 1024);
39. …
具体的http-get请求
class tester
{
static void main(string[] args)
{
trace.listeners.add(new textwritertracelistener(console.out));
trace.autoflush = true;
console.writeline("----------------- http get ------------------");
string urlget = "http://localhost/woodgrove/bank.asmx/getaccount acctid=1";
getdata(urlget, "", "get", "");
public static void getdata(string url,string contenttype,string method,string content,params string[] headers)
{
stream s;
httpwebrequest req = (httpwebrequest )webrequest.create(url);
foreach (string header in headers)
req.headers.add(header);
if (method.length ] 0)
req.method = method;
if (contenttype.length ] 0)
req.contenttype=contenttype;
if (content.length ] 0)
{
req.contentlength=content.length;
s = req.getrequeststream();
streamwriter sw = new streamwriter(s);
sw.write(content);
sw.close();
}
displayrequest(req);
httpwebresponse res = (httpwebresponse)req.getresponse();
displayresponse(res);
}
public static void displayrequest(httpwebrequest req)
{
trace.writeline("*** request start ***");
trace.writeline(req.requesturi.tostring());
displayheaders(req.headers);
trace.writeline("*** request end ***");
}

public static void displayresponse(httpwebresponse hresp)
{
trace.writeline(null);
trace.writeline("*** response start ***");
trace.writeline(hresp.statuscode);
trace.writeline(hresp.statusdescription);
displayheaders(hresp.headers);
displaycontent(hresp);
trace.writeline("*** response end ***");
trace.writeline(null);
}
public static void displaycontent(httpwebresponse response)
{
stream stream = response.getresponsestream();
if (stream != null)
{
streamreader sr = new streamreader(stream, encoding.ascii);
trace.writeline(sr.readtoend());
}
}
小结 & 问题讨论
孔子说:"学而不思则罔,思而不学则殆."
*
*
本章概述:
xml web service是建立在web技术之上的.http协议,xml语言和soap协议是web服务的三种核心技术,这三种技术构成了web服务的基础.开发人员在使用这三种技术开发web服务时,有必要理解这三种技术是如何工作的,同时也需了解.net framework对这三种技术提供的具体支持.
教学目标:
理解http请求和响应的结构,http协议是internet上广泛应用的协议,理解它的原理对提高程序效率有很大帮助
掌握使用.net framework发送http get和post请求并处理响应的方法
掌握使用xsd描述数据类型,这是.net中关系数据(sql server)和层次数据结构(xml)转换的基础
理解soap请求和响应的结构
掌握使用.net framework发送soap请求并处理响应的方法
教学重点:
掌握http,xml和soap在xml web service中起的作用
掌握发送http请求并处理响应的方法
掌握发送soap请求并处理响应的方法
教学难点:
理解各个协议的作用以及他们互相间的交互原理
注意:
本章的推荐教学课时为 4 课时;
加下划线为即将学到的内容;
课堂提问:
http 协议,xml和 soap 协议有什么共同的特点
这三种技术都是在 internet 中被广泛采用的标准,而不是某一厂商制定的标准,因此使用这三种技术开发的 web 服务使分布式应用程序的应用领域更加广泛.
*
要点:
本节主要达到一个目的:
掌握http协议的基本原理,包括http头的作用,get与post方法.http协议是internet上广泛应用的协议,理解它的原理对提高程序效率有很大帮助.(略讲)
注意:
加下划线为即将学到的内容.
*
重点:
xml web service 的数据传输使用 http 协议,因此掌握一些 http 的工作原理对于掌握 xml web service 非常重要;
介绍 http 协议的请求和响应的结构以及常用的请求方法;
课堂提问:
什么是 http 协议,它有哪些特点
http 协议就是超文本传输协议(hypertext transfer protocol),是由 w3c 组织制定的标准协议,用于在 internet 中传输 html 文件,已被业界广泛使用.
*
重点:
uri,url 和 urn 是 internet 中经常使用的一系列术语,要求学生掌握这些技术的名称;
在 http 协议中通常使用 url 来定位资源;
难点:
uri 中包括了 url 和 urn,是二者的超集;
url 最大的缺点在于:一旦信息资源的存放地点发生变化, url 也必须进行相应的改变;
参考:
url,uri 和 urn 的定义分别摘自 msdn 的相关章节;
课堂提问:
xml 技术如何使用 url,uri 和 urn
xml 中使用 uri,url 和 urn 引用标识元素的命名空间.
*
重点:
掌握 url 的书写语法;
协议的状态是指下次传输可以"记住"前次传输信息的能力;
难点:
要求学生注意书写 url 时斜线的方向;
课堂提问:
为什么在实例中没有指定端口号
如果在 url 中没有指定端口号,系统会根据使用的协议确定缺省端口号,对于 http 协议而言,缺省的端口号是80;
参考:
常用协议的端口号可以参考系统文件夹" \system32\drivers\etc\ "中的" services "文件,该文件可以使用文本编辑工具打开.
*
重点:
幻灯片中的例子是向服务器发送的一个查询请求,条件是消息主体中的 "symbol=msft";
http 查询支持的方法包括:
options;
get;
head;
post;
delete;
trace;
connect;
扩展方法;
注意:
在讲解时注意使用幻灯片中的箭头动画将结构和例子相对应,这样可以方便学生理解,不要忘记在 http 标头和消息主体之间需要保留一个空行.
*
重点:
本例是对上一张幻灯片中 http 请求的响应信息;
注意:
在讲解时注意使用幻灯片中的箭头动画将结构和例子相对应,这样可以方便学生理解,不要忘记在 http 标头和消息主体之间需要保留一个空行;
课堂讨论:
http 响应消息主体的格式是什么 描述幻灯片例子中响应消息的的组成部分;
访问 web 服务时, http 响应消息的主体采用 xml 的格式,幻灯片中首先是关于 xml 的操作指令,然后包含了一个名为 stock 的元素,该元素中有两个属性,分别为 msft 和 price.
*
重点:
http 的 get 和 post 是比较常用的两个向服务器发送请求的方法,适合在 web 服务中使用,因为两种方法与程序中函数的调用过程非常相似:传递参数给方法,执行后返回结果;
注意:
要求学生掌握两种方法的调用格式.
*
重点:
相比之下,get 方法比较简单但功能较弱,post 方法比较复杂但功能较强.
*
要点:
本节主要达到两个目的:
掌握使用.net framework发送http请求的方法(精讲+演示)
掌握使用.net framework处理http响应的方法(精讲+演示)
注意:
加下划线为即将学到的内容.
*
重点:
主要介绍 .net framework 中与 http 有关的类,以及如何使用这些类编写,发送 http 访问请求的应用程序;
注意:
本章重点介绍 xml web service 使用的底层技术,但应当告诉学生实际开发 web 服务时,可以使用更高层的技术,不过了解些底层技术对于掌握 xml web service 的整体工作原理有很大帮助.
*
重点:
.net 中与 http 相关的类主要有两种:一种用于封装具体的 http 请求和响应,另一种用于读写具体的 http 数据流;
难点:
webrequest 和 webresponse 是两个抽象类,定义了与网络访问相关的一些公共行为, httpwebrequest 和httpwebresponse 是他们的派生类,负责处理和 http 相关的访问请求和响应,应当向学生说明这些类之间的关系;
注意:
可以提示学生使用 msdn 查找这些类的具体声明信息,或者在编程过程中使用 msdn 寻求帮助.
*
重点:
如果 webrequest 的 create 方法包含参数 "http://" 或 "https://",则返回 httpwebrequest 实例;
难点:
.net framework 中的许多类都预先定义了同步和异步两种调用手段,异步调用实际上利用了系统提供的多线程机制,使得客户端在等待响应结果的同时还可以进行其他操作;
注意:
会在下一张幻灯片中详细介绍同步调用和异步调用.
*
重点:
结合前张幻灯片中的 begin 和 end 方法对(如 begingetrequeststream 和 endgetrequeststream 方法对)解释具体的调用形式;
注意:
提示学生使用" wincv "查看相关类的方法声明原型.
*
注意:
参考教材上的代码示例讲解.
*
*
*
注意:
参考教材上的代码示例讲解.
*
*
*
*
*
*
*
*
*

以上内容来源:http://computer.cdu.edu.cn:8080/ad/1252641366515/Chapter_03.ppt
63档(www.63da.com)提供索引并缓存,与来源页面无关
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics