Skip to content
This repository was archived by the owner on Apr 22, 2025. It is now read-only.

Commit 5e864cd

Browse files
Victor QuVictor Qu
authored andcommitted
headers
1 parent 9d4c0ef commit 5e864cd

16 files changed

+2751
-442
lines changed

NZOrz.sln

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "HTTP", "HTTP", "{1971E886-8
4343
EndProject
4444
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HttpDemo", "samples\ReverseProxy\HTTP\HttpDemo\HttpDemo.csproj", "{B4C2CD45-BB72-4531-854B-DB29A87270FE}"
4545
EndProject
46+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CodeGenerater", "test\CodeGenerater\CodeGenerater.csproj", "{E204A3EC-9578-42D3-891A-EF4804EEBC86}"
47+
EndProject
4648
Global
4749
GlobalSection(SolutionConfigurationPlatforms) = preSolution
4850
Debug|Any CPU = Debug|Any CPU
@@ -85,6 +87,10 @@ Global
8587
{B4C2CD45-BB72-4531-854B-DB29A87270FE}.Debug|Any CPU.Build.0 = Debug|Any CPU
8688
{B4C2CD45-BB72-4531-854B-DB29A87270FE}.Release|Any CPU.ActiveCfg = Release|Any CPU
8789
{B4C2CD45-BB72-4531-854B-DB29A87270FE}.Release|Any CPU.Build.0 = Release|Any CPU
90+
{E204A3EC-9578-42D3-891A-EF4804EEBC86}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
91+
{E204A3EC-9578-42D3-891A-EF4804EEBC86}.Debug|Any CPU.Build.0 = Debug|Any CPU
92+
{E204A3EC-9578-42D3-891A-EF4804EEBC86}.Release|Any CPU.ActiveCfg = Release|Any CPU
93+
{E204A3EC-9578-42D3-891A-EF4804EEBC86}.Release|Any CPU.Build.0 = Release|Any CPU
8894
EndGlobalSection
8995
GlobalSection(SolutionProperties) = preSolution
9096
HideSolutionNode = FALSE
@@ -104,5 +110,6 @@ Global
104110
{F9987BD2-46BD-4270-B595-4FA039F8B19C} = {9333ADD3-C5E2-4D25-A982-004ED4857884}
105111
{1971E886-835F-410A-BD04-23377118A393} = {D0316D4E-A76A-432A-8B72-743A2F9911B3}
106112
{B4C2CD45-BB72-4531-854B-DB29A87270FE} = {1971E886-835F-410A-BD04-23377118A393}
113+
{E204A3EC-9578-42D3-891A-EF4804EEBC86} = {0732FD6B-7A0F-4ED3-9CDD-7ED63EBEF07A}
107114
EndGlobalSection
108115
EndGlobal

src/NZ.Orz.Core/Http/Abstractions/HeaderNames.cs

Lines changed: 0 additions & 206 deletions
Original file line numberDiff line numberDiff line change
@@ -386,210 +386,4 @@ public static string GetInternedHeaderName(string name)
386386

387387
return name;
388388
}
389-
390-
private static readonly FrozenDictionary<string, KnownHeaderType> _internedHeaderType = new Dictionary<string, KnownHeaderType>(StringComparer.OrdinalIgnoreCase)
391-
{
392-
{ HeaderNames.Host, KnownHeaderType.Host },
393-
//{ HeaderNames.Accept, KnownHeaderType.Accept },
394-
//{ HeaderNames.AcceptCharset, KnownHeaderType.AcceptCharset },
395-
//{ HeaderNames.AcceptEncoding, KnownHeaderType.AcceptEncoding },
396-
//{ HeaderNames.AcceptLanguage, KnownHeaderType.AcceptLanguage },
397-
//{ HeaderNames.AcceptRanges, KnownHeaderType.AcceptRanges },
398-
//{ HeaderNames.AccessControlAllowCredentials, KnownHeaderType.AccessControlAllowCredentials },
399-
//{ HeaderNames.AccessControlAllowHeaders, KnownHeaderType.AccessControlAllowHeaders },
400-
//{ HeaderNames.AccessControlAllowMethods, KnownHeaderType.AccessControlAllowMethods },
401-
//{ HeaderNames.AccessControlAllowOrigin, KnownHeaderType.AccessControlAllowOrigin },
402-
//{ HeaderNames.AccessControlExposeHeaders, KnownHeaderType.AccessControlExposeHeaders },
403-
//{ HeaderNames.AccessControlMaxAge, KnownHeaderType.AccessControlMaxAge },
404-
//{ HeaderNames.AccessControlRequestHeaders, KnownHeaderType.AccessControlRequestHeaders },
405-
//{ HeaderNames.AccessControlRequestMethod, KnownHeaderType.AccessControlRequestMethod },
406-
//{ HeaderNames.Age, KnownHeaderType.Age },
407-
//{ HeaderNames.Allow, KnownHeaderType.Allow },
408-
//{ HeaderNames.AltSvc, KnownHeaderType.AltSvc },
409-
//{ HeaderNames.Authorization, KnownHeaderType.Authorization },
410-
//{ HeaderNames.Baggage, KnownHeaderType.Baggage },
411-
//{ HeaderNames.CacheControl, KnownHeaderType.CacheControl },
412-
//{ HeaderNames.Connection, KnownHeaderType.Connection },
413-
//{ HeaderNames.ContentDisposition, KnownHeaderType.ContentDisposition },
414-
//{ HeaderNames.ContentEncoding, KnownHeaderType.ContentEncoding },
415-
//{ HeaderNames.ContentLanguage, KnownHeaderType.ContentLanguage },
416-
//{ HeaderNames.ContentLength, KnownHeaderType.ContentLength },
417-
//{ HeaderNames.ContentLocation, KnownHeaderType.ContentLocation },
418-
//{ HeaderNames.ContentMD5, KnownHeaderType.ContentMD5 },
419-
//{ HeaderNames.ContentRange, KnownHeaderType.ContentRange },
420-
//{ HeaderNames.ContentSecurityPolicy, KnownHeaderType.ContentSecurityPolicy },
421-
//{ HeaderNames.ContentSecurityPolicyReportOnly, KnownHeaderType.ContentSecurityPolicyReportOnly },
422-
//{ HeaderNames.ContentType, KnownHeaderType.ContentType },
423-
//{ HeaderNames.CorrelationContext, KnownHeaderType.CorrelationContext },
424-
//{ HeaderNames.Cookie, KnownHeaderType.Cookie },
425-
//{ HeaderNames.Date, KnownHeaderType.Date },
426-
//{ HeaderNames.DNT, KnownHeaderType.DNT },
427-
//{ HeaderNames.ETag, KnownHeaderType.ETag },
428-
//{ HeaderNames.Expires, KnownHeaderType.Expires },
429-
//{ HeaderNames.Expect, KnownHeaderType.Expect },
430-
//{ HeaderNames.From, KnownHeaderType.From },
431-
//{ HeaderNames.GrpcAcceptEncoding, KnownHeaderType.GrpcAcceptEncoding },
432-
//{ HeaderNames.GrpcEncoding, KnownHeaderType.GrpcEncoding },
433-
//{ HeaderNames.GrpcMessage, KnownHeaderType.GrpcMessage },
434-
//{ HeaderNames.GrpcStatus, KnownHeaderType.GrpcStatus },
435-
//{ HeaderNames.GrpcTimeout, KnownHeaderType.GrpcTimeout },
436-
//{ HeaderNames.KeepAlive, KnownHeaderType.KeepAlive },
437-
//{ HeaderNames.IfMatch, KnownHeaderType.IfMatch },
438-
//{ HeaderNames.IfModifiedSince, KnownHeaderType.IfModifiedSince },
439-
//{ HeaderNames.IfNoneMatch, KnownHeaderType.IfNoneMatch },
440-
//{ HeaderNames.IfRange, KnownHeaderType.IfRange },
441-
//{ HeaderNames.IfUnmodifiedSince, KnownHeaderType.IfUnmodifiedSince },
442-
//{ HeaderNames.LastModified, KnownHeaderType.LastModified },
443-
//{ HeaderNames.Link, KnownHeaderType.Link },
444-
//{ HeaderNames.Location, KnownHeaderType.Location },
445-
//{ HeaderNames.MaxForwards, KnownHeaderType.MaxForwards },
446-
//{ HeaderNames.Origin, KnownHeaderType.Origin },
447-
//{ HeaderNames.Pragma, KnownHeaderType.Pragma },
448-
//{ HeaderNames.ProxyAuthenticate, KnownHeaderType.ProxyAuthenticate },
449-
//{ HeaderNames.ProxyAuthorization, KnownHeaderType.ProxyAuthorization },
450-
//{ HeaderNames.ProxyConnection, KnownHeaderType.ProxyConnection },
451-
//{ HeaderNames.Range, KnownHeaderType.Range },
452-
//{ HeaderNames.Referer, KnownHeaderType.Referer },
453-
//{ HeaderNames.RetryAfter, KnownHeaderType.RetryAfter },
454-
//{ HeaderNames.RequestId, KnownHeaderType.RequestId },
455-
//{ HeaderNames.SecWebSocketAccept, KnownHeaderType.SecWebSocketAccept },
456-
//{ HeaderNames.SecWebSocketKey, KnownHeaderType.SecWebSocketKey },
457-
//{ HeaderNames.SecWebSocketProtocol, KnownHeaderType.SecWebSocketProtocol },
458-
//{ HeaderNames.SecWebSocketVersion, KnownHeaderType.SecWebSocketVersion },
459-
//{ HeaderNames.SecWebSocketExtensions, KnownHeaderType.SecWebSocketExtensions },
460-
//{ HeaderNames.Server, KnownHeaderType.Server },
461-
//{ HeaderNames.SetCookie, KnownHeaderType.SetCookie },
462-
//{ HeaderNames.StrictTransportSecurity, KnownHeaderType.StrictTransportSecurity },
463-
//{ HeaderNames.TE, KnownHeaderType.TE },
464-
//{ HeaderNames.Trailer, KnownHeaderType.Trailer },
465-
//{ HeaderNames.TransferEncoding, KnownHeaderType.TransferEncoding },
466-
//{ HeaderNames.Translate, KnownHeaderType.Translate },
467-
//{ HeaderNames.TraceParent, KnownHeaderType.TraceParent },
468-
//{ HeaderNames.TraceState, KnownHeaderType.TraceState },
469-
//{ HeaderNames.Upgrade, KnownHeaderType.Upgrade },
470-
//{ HeaderNames.UpgradeInsecureRequests, KnownHeaderType.UpgradeInsecureRequests },
471-
//{ HeaderNames.UserAgent, KnownHeaderType.UserAgent },
472-
//{ HeaderNames.Vary, KnownHeaderType.Vary },
473-
//{ HeaderNames.Via, KnownHeaderType.Via },
474-
//{ HeaderNames.Warning, KnownHeaderType.Warning },
475-
//{ HeaderNames.WWWAuthenticate, KnownHeaderType.WWWAuthenticate },
476-
//{ HeaderNames.XContentTypeOptions, KnownHeaderType.XContentTypeOptions },
477-
//{ HeaderNames.XFrameOptions, KnownHeaderType.XFrameOptions },
478-
//{ HeaderNames.XPoweredBy, KnownHeaderType.XPoweredBy },
479-
//{ HeaderNames.XRequestedWith, KnownHeaderType.XRequestedWith },
480-
//{ HeaderNames.XUACompatible, KnownHeaderType.XUACompatible },
481-
//{ HeaderNames.XXSSProtection, KnownHeaderType.XXSSProtection }
482-
}.ToFrozenDictionary(StringComparer.OrdinalIgnoreCase);
483-
484-
[MethodImpl(MethodImplOptions.AggressiveInlining)]
485-
public static bool GetInternedHeaderType(string name, out KnownHeaderType type)
486-
{
487-
if (_internedHeaderType.TryGetValue(name, out type))
488-
{
489-
return true;
490-
}
491-
492-
return false;
493-
}
494-
}
495-
496-
public enum KnownHeaderType
497-
{
498-
Unknown = 0,
499-
Host,
500-
//Accept = 1,
501-
//AcceptCharset = 2,
502-
//AcceptEncoding = 3,
503-
//AcceptLanguage,
504-
//AcceptRanges,
505-
//AccessControlAllowCredentials,
506-
//AccessControlAllowHeaders,
507-
//AccessControlAllowMethods,
508-
//AccessControlAllowOrigin,
509-
//AccessControlExposeHeaders,
510-
//AccessControlMaxAge,
511-
//AccessControlRequestHeaders,
512-
//AccessControlRequestMethod,
513-
//Age,
514-
//Allow,
515-
//AltSvc,
516-
//AltUsed,
517-
//Authority,
518-
//Authorization,
519-
//Baggage,
520-
//CacheControl,
521-
//Connection,
522-
//ContentDisposition,
523-
//ContentEncoding,
524-
//ContentLanguage,
525-
//ContentLength,
526-
//ContentLocation,
527-
//ContentMD5,
528-
//ContentRange,
529-
//ContentSecurityPolicy,
530-
//ContentSecurityPolicyReportOnly,
531-
//ContentType,
532-
//Cookie,
533-
//CorrelationContext,
534-
//Date,
535-
//DNT,
536-
//ETag,
537-
//Expect,
538-
//Expires,
539-
//From,
540-
//GrpcAcceptEncoding,
541-
//GrpcEncoding,
542-
//GrpcMessage,
543-
//GrpcStatus,
544-
//GrpcTimeout,
545-
//IfMatch,
546-
//IfModifiedSince,
547-
//IfNoneMatch,
548-
//IfRange,
549-
//IfUnmodifiedSince,
550-
//KeepAlive,
551-
//LastModified,
552-
//Link,
553-
//Location,
554-
//MaxForwards,
555-
//Method,
556-
//Origin,
557-
//Path,
558-
//Pragma,
559-
//Protocol,
560-
//ProxyAuthenticate,
561-
//ProxyAuthorization,
562-
//ProxyConnection,
563-
//Range,
564-
//Referer,
565-
//RequestId,
566-
//SecWebSocketAccept,
567-
//SecWebSocketKey,
568-
//SecWebSocketProtocol,
569-
//SecWebSocketVersion,
570-
//SecWebSocketExtensions,
571-
//StrictTransportSecurity,
572-
//RetryAfter,
573-
//Scheme,
574-
//Server,
575-
//SetCookie,
576-
//TE,
577-
//TraceParent,
578-
//TraceState,
579-
//Trailer,
580-
//TransferEncoding,
581-
//Translate,
582-
//Upgrade,
583-
//UpgradeInsecureRequests,
584-
//UserAgent,
585-
//Vary,
586-
//Via,
587-
//Warning,
588-
//WWWAuthenticate,
589-
//XContentTypeOptions,
590-
//XFrameOptions,
591-
//XPoweredBy,
592-
//XRequestedWith,
593-
//XUACompatible,
594-
//XXSSProtection,
595389
}

src/NZ.Orz.Core/Http/Abstractions/HttpRequestHeaders.cs

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,16 @@
11
using Microsoft.Extensions.Primitives;
2+
using NZ.Orz.Http.Exceptions;
23
using System.Collections;
34
using System.Diagnostics.CodeAnalysis;
45
using System.Numerics;
5-
using System.Reflection.PortableExecutable;
66
using System.Runtime.CompilerServices;
77

88
namespace NZ.Orz.Http;
99

1010
public partial class HttpRequestHeaders : IHeaderDictionary
1111
{
12+
private ulong _bits;
13+
private HeaderReferences _r = new HeaderReferences();
1214
private Dictionary<string, StringValues> dict;
1315

1416
public int Count => BitOperations.PopCount(_bits) + (dict == null ? 0 : dict.Count);
@@ -24,7 +26,7 @@ public StringValues this[string key]
2426
}
2527
set
2628
{
27-
if (HeaderNames.GetInternedHeaderType(key, out var k))
29+
if (GetInternedHeaderType(key, out var k))
2830
{
2931
FastAdd(k, value);
3032
}
@@ -47,7 +49,7 @@ public void Clear()
4749

4850
public void Add(string key, StringValues value)
4951
{
50-
if (HeaderNames.GetInternedHeaderType(key, out var k))
52+
if (GetInternedHeaderType(key, out var k))
5153
{
5254
FastAdd(k, value);
5355
}
@@ -64,7 +66,7 @@ public bool ContainsKey(string key)
6466

6567
public bool Remove(string key)
6668
{
67-
if (HeaderNames.GetInternedHeaderType(key, out var k))
69+
if (GetInternedHeaderType(key, out var k))
6870
{
6971
return FastRemove(k);
7072
}
@@ -76,7 +78,7 @@ public bool Remove(string key)
7678

7779
public bool TryGetValue(string key, [MaybeNullWhen(false)] out StringValues value)
7880
{
79-
if (HeaderNames.GetInternedHeaderType(key, out var k))
81+
if (GetInternedHeaderType(key, out var k))
8082
{
8183
return FastTryGetValue(k, out value);
8284
}
@@ -150,4 +152,25 @@ private static int GetNext(ulong bits)
150152
: -1;
151153
}
152154
}
155+
156+
[MethodImpl(MethodImplOptions.AggressiveInlining)]
157+
private static bool GetInternedHeaderType(string name, out KnownHeaderType type)
158+
{
159+
if (_internedHeaderType.TryGetValue(name, out type))
160+
{
161+
return true;
162+
}
163+
164+
return false;
165+
}
166+
167+
private static long ParseContentLength(string value)
168+
{
169+
if (!HeaderUtilities.TryParseNonNegativeInt64(value, out var parsed))
170+
{
171+
throw BadHttpRequestException.GetException(RequestRejectionReason.InvalidContentLength, value);
172+
}
173+
174+
return parsed;
175+
}
153176
}

0 commit comments

Comments
 (0)