[Mono-dev] HttpWebRequest method patch

Robert Jordan robertj at gmx.net
Mon Jan 29 06:46:46 EST 2007


Hi Atsushi,

Atsushi Eno wrote:
> Well, it is very good idea to report this BUG to Microsoft and
> let them fix it. I will do that unless someone points out that
> our (a couple of lingr users') interpretation is wrong.
> 
> I rather want judgement of the spec situation: whether HTTP methods
> like "posT" must retrieve request/response stream like POST.

Since Apache & IIS are both accepting case-insensitive method names
it's a good idea to switch to POST-like behavior in HttpWebRequest,
as implied by your patch.

Robert

> 
> (As usual I'm not interested in making silly changes to our code.)
> 
> Atsushi Eno
> 
> Gert Driesen wrote:
>> Hi Atushi,
>>
>> I noticed something similar for FileWebRequest, where methods are handled 
>> case-insensitive too.
>>
>> I'd suggest adding unit tests which verify the MS behavior, and modify our 
>> HttpWebRequest accordingly.
>>
>> We could then still report it as an issue to MS (using 
>> connect.microsoft.com), and the unit test would alert us if/when MS changes 
>> their (broken) behavior (but this is unlikely to happen, as it could break 
>> existing code).
>>
>> I'll take care of the unit tests (later), if you want to.
>>
>> Gert
>>
>> ----- Original Message ----- 
>> From: "Atsushi Eno" <atsushi at ximian.com>
>> To: <mono-devel-list at lists.ximian.com>
>> Sent: Monday, January 29, 2007 12:46 AM
>> Subject: [Mono-dev] HttpWebRequest method patch
>>
>>
>>> Hi,
>>>
>>> I have a patch for HttpWebRequest.cs which might be problematic.
>>>
>>> HttpWebRequest differentiates request/response stream processing
>>> based on the method (POST/PUT etc.). .NET actually handles things
>>> like "post" as POST and thus with such methods it uses POST-style
>>> processing.
>>>
>>> The attached patch makes HttpWebRequest to work along that way,
>>> but to me it looks like HTTP RFC (2616) violation.
>>>
>>> (I noticed this issue when trying to get Lingr API .NET wrapper ==
>>> http://www.legendes.jp/lingr/api.net/ . The source will be fixed
>>> anyways.)
>>>
>>> Atsushi Eno
>>>
>>
>> --------------------------------------------------------------------------------
>>
>>
>>> Index: System.Net/HttpWebRequest.cs
>>> ===================================================================
>>> --- System.Net/HttpWebRequest.cs (revision 71778)
>>> +++ System.Net/HttpWebRequest.cs (working copy)
>>> @@ -372,7 +372,23 @@
>>>  if (value == null || value.Trim () == "")
>>>  throw new ArgumentException ("not a valid method");
>>>
>>> - method = value;
>>> + // LAMESPEC: This class is not really case
>>> + // sensitive for those methods here, which
>>> + // would violate RFC 2616 (5.1.1).
>>> + string upper = value.ToUpperInvariant ();
>>> + switch (value.ToUpperInvariant ()) {
>>> + case "GET":
>>> + case "POST":
>>> + case "PUT":
>>> + case "HEAD":
>>> + case "CONNECT":
>>> + case "MKCOL":
>>> + method = upper; // case sensitive
>>> + break;
>>> + default:
>>> + method = value; // case insensitive
>>> + break;
>>> + }
>>>  }
>>>  }
>>>
>>>
>>
>> --------------------------------------------------------------------------------
>>
>>
>>> _______________________________________________
>>> Mono-devel-list mailing list
>>> Mono-devel-list at lists.ximian.com
>>> http://lists.ximian.com/mailman/listinfo/mono-devel-list
>>>
>> _______________________________________________
>> Mono-devel-list mailing list
>> Mono-devel-list at lists.ximian.com
>> http://lists.ximian.com/mailman/listinfo/mono-devel-list
>>




More information about the Mono-devel-list mailing list