Http学习笔记(二)
接上节,上节总结http的一些原理,内容比较死板。这节我来总结一些常用的请求方法,配合代码可能会比较实用一些。
1.什么是http的请求方法
link:
http://wenku.baidu.com/view/a8293a6c7e21af45b307a877.html
http://baike.baidu.com/view/1628025.htm?fromId=9472#4
book:
《HTTP.The.Definitive.Guide》 David.Gourley
我就不展开了,大家自行学习
2.请求方法汇总
- GET
- POST
- PUT
- DELETE
- HEAD
- OPTIONS
- TRACE
- OTHER(扩展方法这里暂先不总结)
我们先来看看常用的7个方法,我用几句话总结:
PUT|POST|GET|DELETE 个人理解对应数据库的 CURD 操作,这样方便易记。HEAD返回响应报头,不返回主体BODY。OPTIONS请求服务器支持的功能。TRACE主要的应用就是调试。
下面贴段代码:
1 TcpClient client = new TcpClient(); 2 client.Connect(url, 80); 3 string requeststr = string.Empty; 4 if (client.Connected) 5 { 6 //requeststr = string.Format("{0} * HTTP/1.1\r\nHost:{1}\r\nAccept:*\r\n\r\n", "OPTIONS", url); 7 requeststr = string.Format("{0} {1} HTTP/1.1\r\nHost:{2}\r\nAccept:*.*\r\n\r\n", "GET", "/13/0407/10/8RRR4N8N00014JB6.html", url); 8 //requeststr = string.Format("{0} {1} HTTP/1.1\r\nHost:{2}\r\nContent-type: text/plain\r\nContent-length:5\r\n\r\nABCDE\r\n\r\n", "PUT","/product-list.txt", url); 9 try 10 { 11 Console.WriteLine(requeststr); 12 client.Client.Send(Encoding.UTF8.GetBytes(requeststr)); 13 using (NetworkStream stream = client.GetStream()) 14 { 15 using (StreamReader reading = new StreamReader(stream)) 16 { 17 string content = null; 18 while ((content = reading.ReadLine()) != null) 19 { 20 Console.WriteLine(content); 21 if (string.IsNullOrEmpty(content)) 22 { 23 break; 24 } 25 } 26 } 27 } 28 }catch(Exception ex){ 29 throw ex; 30 } 31 } 32 33 private const string url = @"news.163.com"; 34 //private const string url = @"www.joes-hardware.com"; 35 //private const string url = @"127.0.0.1"; 36 private const string file = @"d:/111.txt";
代码使用C#的TcpClient模拟http请求,并接收服务器响应。http请求报文由字符串组织,本段代码执行了HEAD、OPTIONS、PUT操作。输出结果如图1,2,3:
图1
GET方法和HEAD方法的不同就是GET返回BODY,上图我们可以看到news.163.com返回响应报头 200 Ok。
图2
通过OPTIONS方法访问本机IIs可以看到本机目前允许访问的方法。
图3
通过PUT方法,将ABCDE 5个字符增至服务器的product-list.txt文件中。如成功,返回响应200 Ok。(注:通过PUT方法可以覆盖一个同名文件,这为我们项目中传统的使用FTP的方式提供了另外一种解决方案,虽然它并不够好~)
从图3我们可以看到服务器返回 405 从allow里看到PUT方法是不允许的。这里引出了一个问题:即安全性的问题。
通过使用PUT、DELETE方法可以随意的更改远程服务器上的文件,这种做法显然是不安全的。所以一般公网服务器都会禁用此操作。
为了学习,大家可以在本机的IIS上开放PUT和DELETE方法。
关于PUT和DELETE方法可以引出:
1.请求方法权限设置: IIS中的映射设置(请求限制,谓词,访问) http 405错误
2.HTTP安全机制:基本访问、匿名访问、WINDOWS身份访问等(包括本地安全策略) http 401 错误
3.WebDEV扩展:作为http扩展协议,WebDEV扩展了一些操作,如Copy、Move、Lock、Unlock,并可使用Xml定义来操作一组文件[包括层次结构]的描述。
在IIS中启用WebDEV会限制PUT和DELETE方法的操作范围,以至通过1,2方法解决401,405错误后仍然无法响应PUT和DELETE操作。在IIS7及其以上版本中部署和配置了WCF,WebService,MVC都会改变PUT和DELETE方法和WebDEV的操作范围,可以通过web.config通过配置解决此类问题。(由于IIS6,7,7.5,8 几个版本和使用不同应用程序池对web.config的配置影响很大,将另外开篇讲述IIS的配置问题)
下节通过使用示例WebDEV上传一批带有层次结构的文件集合来讲述WebDEV的一些用法。
参考:
http://support.microsoft.com/kb/942051/en-us
http://forums.iis.net/t/1166025.aspx
关于WebDEV:
目前加入组织支持该协议的公司和组织有:Apache,MS,Apple,IBM,Oracle...知道这些就够了。总之了解到不管商业级的Weblogic,WebSphere,IIS还是开源项目Tomcat,JBoss都支持就Ok了。
转载时,请注明本文来源:www.cnblogs.com/tmywu
作者: 老鱼678
mail:tommywu23@126.com