zoukankan      html  css  js  c++  java
  • 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

      http://goneale.com/2009/10/22/wcf-the-http-request-is-unauthorized-with-client-authentication-scheme-anonymous

    关于WebDEV:

      目前加入组织支持该协议的公司和组织有:Apache,MS,Apple,IBM,Oracle...知道这些就够了。总之了解到不管商业级的Weblogic,WebSphere,IIS还是开源项目Tomcat,JBoss都支持就Ok了。

     

    转载时,请注明本文来源:www.cnblogs.com/tmywu  

    作者: 老鱼678

    mail:tommywu23@126.com

        

  • 相关阅读:
    分布式跟踪工具pinpoint
    python调用阿里云产品接口实现自动发现异常访问ip并禁用2小时
    centos病毒
    Google Earth API开发者指南
    在vs中使用ZedGraph控件的一些记录
    A flexible charting library for .NET
    ZedGraph.dll
    WPF 动态模拟CPU 使用率曲线图
    C#调用GoogleEarth COM API开发
    使用WeifenLuo.WinFormsUI.Docking界面布局中的保存配置
  • 原文地址:https://www.cnblogs.com/tmywu/p/3006458.html
Copyright © 2011-2022 走看看