From af09eb0218ebef61efb8a5ea101f4cde8973f181 Mon Sep 17 00:00:00 2001 From: Kent Friesen Date: Tue, 25 Sep 2018 15:36:54 -0400 Subject: [PATCH 1/5] Adds brotli compression support to the proxy. --- src/Titanium.Web.Proxy/Compression/DecompressionFactory.cs | 2 ++ src/Titanium.Web.Proxy/Http/KnownHeaders.cs | 1 + src/Titanium.Web.Proxy/Titanium.Web.Proxy.csproj | 1 + src/Titanium.Web.Proxy/Titanium.Web.Proxy.nuspec | 1 + 4 files changed, 5 insertions(+) diff --git a/src/Titanium.Web.Proxy/Compression/DecompressionFactory.cs b/src/Titanium.Web.Proxy/Compression/DecompressionFactory.cs index f8a0fc1dd..455918932 100644 --- a/src/Titanium.Web.Proxy/Compression/DecompressionFactory.cs +++ b/src/Titanium.Web.Proxy/Compression/DecompressionFactory.cs @@ -18,6 +18,8 @@ internal static Stream Create(string type, Stream stream, bool leaveOpen = true) return new GZipStream(stream, CompressionMode.Decompress, leaveOpen); case KnownHeaders.ContentEncodingDeflate: return new DeflateStream(stream, CompressionMode.Decompress, leaveOpen); + case KnownHeaders.ContentEncodingBrotli: + return new BrotliSharpLib.BrotliStream(stream, CompressionMode.Decompress, leaveOpen); default: throw new Exception($"Unsupported decompression mode: {type}"); } diff --git a/src/Titanium.Web.Proxy/Http/KnownHeaders.cs b/src/Titanium.Web.Proxy/Http/KnownHeaders.cs index d6e664242..9636a1fdd 100644 --- a/src/Titanium.Web.Proxy/Http/KnownHeaders.cs +++ b/src/Titanium.Web.Proxy/Http/KnownHeaders.cs @@ -39,6 +39,7 @@ public static class KnownHeaders public const string ContentEncoding = "content-encoding"; public const string ContentEncodingDeflate = "deflate"; public const string ContentEncodingGzip = "gzip"; + public const string ContentEncodingBrotli = "br"; public const string Location = "Location"; diff --git a/src/Titanium.Web.Proxy/Titanium.Web.Proxy.csproj b/src/Titanium.Web.Proxy/Titanium.Web.Proxy.csproj index e4ac9802b..6f4ed48d0 100644 --- a/src/Titanium.Web.Proxy/Titanium.Web.Proxy.csproj +++ b/src/Titanium.Web.Proxy/Titanium.Web.Proxy.csproj @@ -13,6 +13,7 @@ + diff --git a/src/Titanium.Web.Proxy/Titanium.Web.Proxy.nuspec b/src/Titanium.Web.Proxy/Titanium.Web.Proxy.nuspec index 0eccf8634..7a0c21d76 100644 --- a/src/Titanium.Web.Proxy/Titanium.Web.Proxy.nuspec +++ b/src/Titanium.Web.Proxy/Titanium.Web.Proxy.nuspec @@ -16,6 +16,7 @@ + From 51e29b6cd6f53568a292df55d11e99ccfb73f4f6 Mon Sep 17 00:00:00 2001 From: Kent Friesen Date: Tue, 25 Sep 2018 16:08:35 -0400 Subject: [PATCH 2/5] Forgot to add compression support for Brotli in last commit. --- src/Titanium.Web.Proxy/Compression/CompressionFactory.cs | 8 ++++++++ .../Compression/DecompressionFactory.cs | 6 ++++++ src/Titanium.Web.Proxy/Titanium.Web.Proxy.csproj | 2 +- 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/Titanium.Web.Proxy/Compression/CompressionFactory.cs b/src/Titanium.Web.Proxy/Compression/CompressionFactory.cs index fdae2ce3d..fd07687bf 100644 --- a/src/Titanium.Web.Proxy/Compression/CompressionFactory.cs +++ b/src/Titanium.Web.Proxy/Compression/CompressionFactory.cs @@ -1,6 +1,7 @@ using System; using System.IO; using System.IO.Compression; +using Titanium.Web.Proxy.Helpers; using Titanium.Web.Proxy.Http; namespace Titanium.Web.Proxy.Compression @@ -18,6 +19,13 @@ internal static Stream Create(string type, Stream stream, bool leaveOpen = true) return new GZipStream(stream, CompressionMode.Compress, leaveOpen); case KnownHeaders.ContentEncodingDeflate: return new DeflateStream(stream, CompressionMode.Compress, leaveOpen); + case KnownHeaders.ContentEncodingBrotli: + if (!RunTime.IsWindows) + { + throw new PlatformNotSupportedException("BrotliSharpLib currently supports only Windows."); + } + + return new BrotliSharpLib.BrotliStream(stream, CompressionMode.Compress, leaveOpen); default: throw new Exception($"Unsupported compression mode: {type}"); } diff --git a/src/Titanium.Web.Proxy/Compression/DecompressionFactory.cs b/src/Titanium.Web.Proxy/Compression/DecompressionFactory.cs index 455918932..07991ec82 100644 --- a/src/Titanium.Web.Proxy/Compression/DecompressionFactory.cs +++ b/src/Titanium.Web.Proxy/Compression/DecompressionFactory.cs @@ -1,6 +1,7 @@ using System; using System.IO; using System.IO.Compression; +using Titanium.Web.Proxy.Helpers; using Titanium.Web.Proxy.Http; namespace Titanium.Web.Proxy.Compression @@ -19,6 +20,11 @@ internal static Stream Create(string type, Stream stream, bool leaveOpen = true) case KnownHeaders.ContentEncodingDeflate: return new DeflateStream(stream, CompressionMode.Decompress, leaveOpen); case KnownHeaders.ContentEncodingBrotli: + if(!RunTime.IsWindows) + { + throw new PlatformNotSupportedException("BrotliSharpLib currently supports only Windows."); + } + return new BrotliSharpLib.BrotliStream(stream, CompressionMode.Decompress, leaveOpen); default: throw new Exception($"Unsupported decompression mode: {type}"); diff --git a/src/Titanium.Web.Proxy/Titanium.Web.Proxy.csproj b/src/Titanium.Web.Proxy/Titanium.Web.Proxy.csproj index 6f4ed48d0..996f3deca 100644 --- a/src/Titanium.Web.Proxy/Titanium.Web.Proxy.csproj +++ b/src/Titanium.Web.Proxy/Titanium.Web.Proxy.csproj @@ -13,7 +13,7 @@ - + From 158534b4e2edc76753be755874c6c127061bf04b Mon Sep 17 00:00:00 2001 From: Kent Friesen Date: Thu, 4 Oct 2018 13:16:55 -0400 Subject: [PATCH 3/5] Removed unneeded RunTime.IsWindows check. --- src/Titanium.Web.Proxy/Compression/CompressionFactory.cs | 5 ----- src/Titanium.Web.Proxy/Compression/DecompressionFactory.cs | 5 ----- 2 files changed, 10 deletions(-) diff --git a/src/Titanium.Web.Proxy/Compression/CompressionFactory.cs b/src/Titanium.Web.Proxy/Compression/CompressionFactory.cs index fd07687bf..fcfc86aaa 100644 --- a/src/Titanium.Web.Proxy/Compression/CompressionFactory.cs +++ b/src/Titanium.Web.Proxy/Compression/CompressionFactory.cs @@ -20,11 +20,6 @@ internal static Stream Create(string type, Stream stream, bool leaveOpen = true) case KnownHeaders.ContentEncodingDeflate: return new DeflateStream(stream, CompressionMode.Compress, leaveOpen); case KnownHeaders.ContentEncodingBrotli: - if (!RunTime.IsWindows) - { - throw new PlatformNotSupportedException("BrotliSharpLib currently supports only Windows."); - } - return new BrotliSharpLib.BrotliStream(stream, CompressionMode.Compress, leaveOpen); default: throw new Exception($"Unsupported compression mode: {type}"); diff --git a/src/Titanium.Web.Proxy/Compression/DecompressionFactory.cs b/src/Titanium.Web.Proxy/Compression/DecompressionFactory.cs index 07991ec82..713c678fb 100644 --- a/src/Titanium.Web.Proxy/Compression/DecompressionFactory.cs +++ b/src/Titanium.Web.Proxy/Compression/DecompressionFactory.cs @@ -20,11 +20,6 @@ internal static Stream Create(string type, Stream stream, bool leaveOpen = true) case KnownHeaders.ContentEncodingDeflate: return new DeflateStream(stream, CompressionMode.Decompress, leaveOpen); case KnownHeaders.ContentEncodingBrotli: - if(!RunTime.IsWindows) - { - throw new PlatformNotSupportedException("BrotliSharpLib currently supports only Windows."); - } - return new BrotliSharpLib.BrotliStream(stream, CompressionMode.Decompress, leaveOpen); default: throw new Exception($"Unsupported decompression mode: {type}"); From 6a82b6e2ccf3b703e840a3448accaec6f20f1889 Mon Sep 17 00:00:00 2001 From: buildbot121 Date: Fri, 5 Oct 2018 00:53:03 +0000 Subject: [PATCH 4/5] API documentation update by build server --- .../Titanium.Web.Proxy.Http.KnownHeaders.html | 24 +++++++++++++++++++ docs/index.json | 2 +- docs/xrefmap.yml | 6 +++++ 3 files changed, 31 insertions(+), 1 deletion(-) diff --git a/docs/api/Titanium.Web.Proxy.Http.KnownHeaders.html b/docs/api/Titanium.Web.Proxy.Http.KnownHeaders.html index 1848bee9e..f1eb19351 100644 --- a/docs/api/Titanium.Web.Proxy.Http.KnownHeaders.html +++ b/docs/api/Titanium.Web.Proxy.Http.KnownHeaders.html @@ -269,6 +269,30 @@
Field Value
+

ContentEncodingBrotli

+
+
+
Declaration
+
+
public const string ContentEncodingBrotli = "br"
+
+
Field Value
+ + + + + + + + + + + + + +
TypeDescription
String
+ +

ContentEncodingDeflate

diff --git a/docs/index.json b/docs/index.json index cb0102390..2ccafa949 100644 --- a/docs/index.json +++ b/docs/index.json @@ -117,7 +117,7 @@ "api/Titanium.Web.Proxy.Http.KnownHeaders.html": { "href": "api/Titanium.Web.Proxy.Http.KnownHeaders.html", "title": "Class KnownHeaders | Titanium Web Proxy", - "keywords": "Class KnownHeaders Well known http headers. Inheritance Object KnownHeaders Inherited Members Object.ToString() Object.Equals(Object) Object.Equals(Object, Object) Object.ReferenceEquals(Object, Object) Object.GetHashCode() Object.GetType() Object.MemberwiseClone() Namespace : Titanium.Web.Proxy.Http Assembly : Titanium.Web.Proxy.dll Syntax public static class KnownHeaders Fields AcceptEncoding Declaration public const string AcceptEncoding = \"accept-encoding\" Field Value Type Description String Authorization Declaration public const string Authorization = \"Authorization\" Field Value Type Description String Connection Declaration public const string Connection = \"connection\" Field Value Type Description String ConnectionClose Declaration public const string ConnectionClose = \"close\" Field Value Type Description String ConnectionKeepAlive Declaration public const string ConnectionKeepAlive = \"keep-alive\" Field Value Type Description String ContentEncoding Declaration public const string ContentEncoding = \"content-encoding\" Field Value Type Description String ContentEncodingDeflate Declaration public const string ContentEncodingDeflate = \"deflate\" Field Value Type Description String ContentEncodingGzip Declaration public const string ContentEncodingGzip = \"gzip\" Field Value Type Description String ContentLength Declaration public const string ContentLength = \"content-length\" Field Value Type Description String ContentType Declaration public const string ContentType = \"content-type\" Field Value Type Description String ContentTypeBoundary Declaration public const string ContentTypeBoundary = \"boundary\" Field Value Type Description String ContentTypeCharset Declaration public const string ContentTypeCharset = \"charset\" Field Value Type Description String Expect Declaration public const string Expect = \"expect\" Field Value Type Description String Expect100Continue Declaration public const string Expect100Continue = \"100-continue\" Field Value Type Description String Host Declaration public const string Host = \"host\" Field Value Type Description String Location Declaration public const string Location = \"Location\" Field Value Type Description String ProxyAuthenticate Declaration public const string ProxyAuthenticate = \"Proxy-Authenticate\" Field Value Type Description String ProxyAuthorization Declaration public const string ProxyAuthorization = \"Proxy-Authorization\" Field Value Type Description String ProxyAuthorizationBasic Declaration public const string ProxyAuthorizationBasic = \"basic\" Field Value Type Description String ProxyConnection Declaration public const string ProxyConnection = \"Proxy-Connection\" Field Value Type Description String ProxyConnectionClose Declaration public const string ProxyConnectionClose = \"close\" Field Value Type Description String TransferEncoding Declaration public const string TransferEncoding = \"transfer-encoding\" Field Value Type Description String TransferEncodingChunked Declaration public const string TransferEncodingChunked = \"chunked\" Field Value Type Description String Upgrade Declaration public const string Upgrade = \"upgrade\" Field Value Type Description String UpgradeWebsocket Declaration public const string UpgradeWebsocket = \"websocket\" Field Value Type Description String" + "keywords": "Class KnownHeaders Well known http headers. Inheritance Object KnownHeaders Inherited Members Object.ToString() Object.Equals(Object) Object.Equals(Object, Object) Object.ReferenceEquals(Object, Object) Object.GetHashCode() Object.GetType() Object.MemberwiseClone() Namespace : Titanium.Web.Proxy.Http Assembly : Titanium.Web.Proxy.dll Syntax public static class KnownHeaders Fields AcceptEncoding Declaration public const string AcceptEncoding = \"accept-encoding\" Field Value Type Description String Authorization Declaration public const string Authorization = \"Authorization\" Field Value Type Description String Connection Declaration public const string Connection = \"connection\" Field Value Type Description String ConnectionClose Declaration public const string ConnectionClose = \"close\" Field Value Type Description String ConnectionKeepAlive Declaration public const string ConnectionKeepAlive = \"keep-alive\" Field Value Type Description String ContentEncoding Declaration public const string ContentEncoding = \"content-encoding\" Field Value Type Description String ContentEncodingBrotli Declaration public const string ContentEncodingBrotli = \"br\" Field Value Type Description String ContentEncodingDeflate Declaration public const string ContentEncodingDeflate = \"deflate\" Field Value Type Description String ContentEncodingGzip Declaration public const string ContentEncodingGzip = \"gzip\" Field Value Type Description String ContentLength Declaration public const string ContentLength = \"content-length\" Field Value Type Description String ContentType Declaration public const string ContentType = \"content-type\" Field Value Type Description String ContentTypeBoundary Declaration public const string ContentTypeBoundary = \"boundary\" Field Value Type Description String ContentTypeCharset Declaration public const string ContentTypeCharset = \"charset\" Field Value Type Description String Expect Declaration public const string Expect = \"expect\" Field Value Type Description String Expect100Continue Declaration public const string Expect100Continue = \"100-continue\" Field Value Type Description String Host Declaration public const string Host = \"host\" Field Value Type Description String Location Declaration public const string Location = \"Location\" Field Value Type Description String ProxyAuthenticate Declaration public const string ProxyAuthenticate = \"Proxy-Authenticate\" Field Value Type Description String ProxyAuthorization Declaration public const string ProxyAuthorization = \"Proxy-Authorization\" Field Value Type Description String ProxyAuthorizationBasic Declaration public const string ProxyAuthorizationBasic = \"basic\" Field Value Type Description String ProxyConnection Declaration public const string ProxyConnection = \"Proxy-Connection\" Field Value Type Description String ProxyConnectionClose Declaration public const string ProxyConnectionClose = \"close\" Field Value Type Description String TransferEncoding Declaration public const string TransferEncoding = \"transfer-encoding\" Field Value Type Description String TransferEncodingChunked Declaration public const string TransferEncodingChunked = \"chunked\" Field Value Type Description String Upgrade Declaration public const string Upgrade = \"upgrade\" Field Value Type Description String UpgradeWebsocket Declaration public const string UpgradeWebsocket = \"websocket\" Field Value Type Description String" }, "api/Titanium.Web.Proxy.Http.Request.html": { "href": "api/Titanium.Web.Proxy.Http.Request.html", diff --git a/docs/xrefmap.yml b/docs/xrefmap.yml index 8edb4db78..648782f34 100644 --- a/docs/xrefmap.yml +++ b/docs/xrefmap.yml @@ -1281,6 +1281,12 @@ references: commentId: F:Titanium.Web.Proxy.Http.KnownHeaders.ContentEncoding fullName: Titanium.Web.Proxy.Http.KnownHeaders.ContentEncoding nameWithType: KnownHeaders.ContentEncoding +- uid: Titanium.Web.Proxy.Http.KnownHeaders.ContentEncodingBrotli + name: ContentEncodingBrotli + href: api/Titanium.Web.Proxy.Http.KnownHeaders.html#Titanium_Web_Proxy_Http_KnownHeaders_ContentEncodingBrotli + commentId: F:Titanium.Web.Proxy.Http.KnownHeaders.ContentEncodingBrotli + fullName: Titanium.Web.Proxy.Http.KnownHeaders.ContentEncodingBrotli + nameWithType: KnownHeaders.ContentEncodingBrotli - uid: Titanium.Web.Proxy.Http.KnownHeaders.ContentEncodingDeflate name: ContentEncodingDeflate href: api/Titanium.Web.Proxy.Http.KnownHeaders.html#Titanium_Web_Proxy_Http_KnownHeaders_ContentEncodingDeflate From 9a5bdca3d715e0181a7dfc603360d6b40828576f Mon Sep 17 00:00:00 2001 From: justcoding121 Date: Thu, 4 Oct 2018 21:04:27 -0400 Subject: [PATCH 5/5] add brotli to list of supported compressions --- src/Titanium.Web.Proxy/Shared/ProxyConstants.cs | 6 ++++-- src/Titanium.Web.Proxy/packages.config | 6 ------ 2 files changed, 4 insertions(+), 8 deletions(-) delete mode 100644 src/Titanium.Web.Proxy/packages.config diff --git a/src/Titanium.Web.Proxy/Shared/ProxyConstants.cs b/src/Titanium.Web.Proxy/Shared/ProxyConstants.cs index f55bc74db..605ae00e4 100644 --- a/src/Titanium.Web.Proxy/Shared/ProxyConstants.cs +++ b/src/Titanium.Web.Proxy/Shared/ProxyConstants.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Text.RegularExpressions; +using Titanium.Web.Proxy.Http; namespace Titanium.Web.Proxy.Shared { @@ -25,8 +26,9 @@ internal class ProxyConstants internal static readonly HashSet ProxySupportedCompressions = new HashSet(StringComparer.OrdinalIgnoreCase) { - "gzip", - "deflate" + KnownHeaders.ContentEncodingGzip, + KnownHeaders.ContentEncodingDeflate, + KnownHeaders.ContentEncodingBrotli }; internal static readonly Regex CNRemoverRegex = diff --git a/src/Titanium.Web.Proxy/packages.config b/src/Titanium.Web.Proxy/packages.config deleted file mode 100644 index ecae7955b..000000000 --- a/src/Titanium.Web.Proxy/packages.config +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file