我有一个在Windows Azure上运行的Web服务,它返回我在iPhone应用程序中使用的JSON.
不幸的是,Windows Azure似乎还不支持动态响应的压缩(长篇故事)所以我决定通过返回一个未压缩的JSON包来解决它,它包含一个压缩的(使用GZIP)字符串.
例如
{"Error":null,"IsCompressed":true,"Success":true,"Value":"vWsAAB+LCAAAAAAAB..etc.."}
Run Code Online (Sandbox Code Playgroud)
...其中value是以JSON表示的复杂对象的压缩字符串.
这在服务器上很容易实现,但是对于我的生活,我无法弄清楚如何将压缩的NSString解压缩为未压缩的NSString,我可以为zlib等找到的所有示例都处理文件等.
谁能给我任何关于如何做到这一点的线索?(我也很乐意使用deflate的解决方案,因为我可以更改服务器端实现以使用deflate).
谢谢!!
史蒂芬
编辑1: Aaah,我看到ASIHTTPRequest在它的源代码中使用了以下函数:
//uncompress gzipped data with zlib
+ (NSData *)uncompressZippedData:(NSData*)compressedData;
Run Code Online (Sandbox Code Playgroud)
...而且我知道我可以将NSString转换为NSData,所以我会看到这是否会引导我到任何地方!
编辑2:不幸的是,编辑1中描述的方法并没有引导我到任何地方.
编辑3:按照下面关于base64编码/解码的建议,我想出了以下代码.您可以猜测编码的GzippedString是一个字符串"Hello,我的名字是Steven Elliott",它被gzip压缩然后转换为base64字符串.不幸的是,使用NSLog打印的结果只是空白.
NSString *encodedGzippedString = @"GgAAAB+LCAAAAAAABADtvQdgHEmWJSYvbcp7f0r1StfgdKEIgGATJNiQQBDswYjN5pLsHWlHIymrKoHKZVZlXWYWQMztnbz33nvvvffee++997o7nU4n99//P1xmZAFs9s5K2smeIYCqyB8/fnwfPyK+uE6X2SJPiyZ93eaX+TI9Lcuiatvx/wOwYc0HGgAAAA==";
NSData *decodedGzippedData = [NSData dataFromBase64String:encodedGzippedString];
NSData* unGzippedJsonData = [ASIHTTPRequest uncompressZippedData:decodedGzippedData];
NSString* unGzippedJsonString = [[NSString alloc] initWithData:unGzippedJsonData encoding:NSASCIIStringEncoding];
NSLog(@"Result: %@", unGzippedJsonString);
Run Code Online (Sandbox Code Playgroud) 对于ASP.NET 4.0/IIS7 Web应用程序,我想支持压缩的HTTP 请求.基本上,我想支持将添加Content-Encoding: gzip到请求标头中的客户端,并相应地压缩主体.
有谁知道我是如何实现这种行为的?
Ps:关于,我有多个端点REST和SOAP,它感觉更好的解决方案来支持HTTP级别的压缩,而不是每个端点的自定义编码器.
我在我的web.config中有这个代码,用于在IIS 7.5中运行的ASP.NET 4.5网站
<system.webServer>
<urlCompression doStaticCompression="true" doDynamicCompression="true"
dynamicCompressionBeforeCache="true" />
<httpCompression>
<scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll"
staticCompressionLevel="9" dynamicCompressionLevel="4" />
</httpCompression>
</system.webServer>
Run Code Online (Sandbox Code Playgroud)
(为了更好的阅读,我强行换了一条新线)
我想知道是否有空(没有directory ="..."和其他类似的内部元素)会导致问题,或者从IIS applicationHost.config中正确读取此部分的默认属性/元素
我在这里尝试做的只是在web.config中设置压缩和压缩比,而不覆盖或清除其他默认值.我可以从web.config中的方案中删除name ="gzip"dll ="%Windir%\ system32\inetsrv\gzip.dll",只需在scheme标签中保留staticCompressionLevel和dynamicCompressionLevel吗?是否可以从applicationHost.config中读取这些属性
我有以下web.config:
<urlCompression doStaticCompression="true" />
<httpCompression>
<dynamicTypes>
<add mimeType="text/*" enabled="true" />
<add mimeType="message/*" enabled="true" />
<add mimeType="application/javascript" enabled="true" />
<add mimeType="*/*" enabled="false" />
</dynamicTypes>
<staticTypes>
<add mimeType="text/*" enabled="true" />
<add mimeType="message/*" enabled="true" />
<add mimeType="application/javascript" enabled="true" />
<add mimeType="*/*" enabled="false" />
</staticTypes>
</httpCompression>
Run Code Online (Sandbox Code Playgroud)
可能计划不允许动态压缩
问题是,当我请求css或js时,IIS用GZIP响应并添加vary:accept-encoding有时和其他时间不压缩CSS也没有JS,我找不到它是某种随机的模式.
我总是尝试CTRL F5,即使你访问www.mysite.com css和js是随机压缩的.
NB:托管在NetworkSolution上.
我的配置或IIS出了什么问题.
谢谢
我最近在玩 GZIP 压缩以及我理解以下内容的方式:
我知道这是一种常见的做法,当您需要加载需要大量 HTML、CSS 和 JavaScript 的页面时,这很有意义,这些页面可能相对较大,并且会增加浏览器的加载时间。
但是,我试图进一步研究这一点,为什么在进行 POST 调用时 GZIP 压缩请求正文并不常见?是不是因为通常请求主体很小,所以在 Web 服务器上解压缩文件所需的时间比简单地发送请求所需的时间长?是否有关于此的某种文件或参考资料?
谢谢!
我正在为我的Web应用程序制作安装程序.我的Web应用程序大量使用CSS和JS,因此我想为IIS7/7.5启用静态和动态HttpCompression.
它需要两个步骤:
web.config,put <httpcompression>标签,没关系.静态HttpCompression在IIS7和IIS7.5中默认启用,但默认情况下不启用Dynamic HttpCompression(尽管它可用).我可以通过打开手动:Start/ControlPanel/ProgramsAndFeatures/TurnWindowsFeatures on or Off/IIS/WWW Service/Performance features/Dynamic Content Compression但是如何以编程方式将其打开?
我可以在安装程序中使用PowerShell,C#.
知道我怎么能这样做吗?谢谢.
iis-7 server-configuration http-compression windows-7 iis-7.5
我写了一段Rack Middleware来自动解压缩压缩的请求体.代码似乎工作正常,但是当我将它插入我的rails应用程序时,我从ActionController :: ParamsParser获得了"Invalid JSON"失败.
作为一种调试机制,我正在将压缩内容和解压缩的内容写入文件(以确保代码正常工作),并且我确实收到了原始的JSON文档(在客户端将其拉出之前).
我发布的数据是 JSON数据,解压缩的内容被检测为来自http://jsonlint.com的有效JSON .
我有什么想法我做错了吗?
class CompressedRequests
def initialize(app)
@app = app
end
def call(env)
input = env['rack.input'].read
#output the zipped data we received
File.open('/Users/ben/Desktop/data.gz', 'w+') do |f|
f.write input
end
if env['REQUEST_METHOD'] =~ /(POST|PUT)/
if env.keys.include? 'HTTP_CONTENT_ENCODING'
new_input = decode(input, env['HTTP_CONTENT_ENCODING'])
env['rack.input'] = StringIO.new(new_input)
#output our decoded data (for debugging)
File.open('/Users/ben/Desktop/data.txt', 'w+') do |f|
f.write env['rack.input'].read
end
env.delete('HTTP_CONTENT_ENCODING')
end
end
env['rack.input'].rewind
status, headers, response = @app.call(env)
return [status, headers, response]
end …Run Code Online (Sandbox Code Playgroud) HTTP标头效率不高.在最小方法和响应头之间使用了超过必要的几十个字节.
是否有任何建议标准化HTTP的二进制或压缩格式?
除HTTP之外是否有类似的标准更适合交互式移动应用程序?
我们正尝试在Azure CDN上通过ETag 启用HTTP压缩(gzip)和HTTP 304缓存.我们已经发现启用Azure CDN压缩的问题,但现在我们无法同时使用压缩和ETag缓存(304s).此问题已在此处发布到Azure论坛.
https://xxxx.vo.msecnd.net/resourceManager.axd?token=HL80vX5hf3lIAAA&group=core.js
https://xxxx.vo.msecnd.net/resourceManager.axd?token=HL80vX5hf3lIAAA&group=core.png
有谁知道如何在Azure CDN上一起使用HTTP缓存(304s)和HTTP压缩?
http-compression azure http-caching azure-web-roles azure-cdn
我试图通过iisspeed.com使用" 用于Microsoft IIS的Brotli压缩模块 "在IIS中使用新的Brotli压缩方案.
如果我将<httpCompression>配置部分更改applicationHost.config为仅具有Brotli模块,则Brotli压缩模块本身可以正常工作.
iisspeed.com上的文档说这样做:
<httpCompression directory="path\to\temp\folder" minFileSizeForComp="50">
<scheme name="br" dll="path\to\iisbrotli.dll" />
<scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll" />
...
</httpCompression>
Run Code Online (Sandbox Code Playgroud)
但是我发现这不起作用.
浏览器(本例中为Chrome)发送以下accept-encoding标头:
accept-encoding: gzip, deflate, sdch, br
这意味着浏览器可以接受Brotli编码br以及gzip.我希望IIS更喜欢br,gzip但似乎没有办法优先<scheme>配置配置中的每个元素.我已经尝试更改.config文件中的顺序,但它没有任何效果.
IIS总是使用gzip即使br受支持也是首选,因为它的文件较小.
我已经搜索谷歌,发现IIS 6中的每个压缩方案都有一个优先级设置,但似乎已经在IIS7 +中删除了.
它被调用HcPriority并进入IIS6配置数据库XML文件.
请参阅以下链接:
https://msdn.microsoft.com/en-us/library/ms525366(v=vs.90).aspx
https://blogs.iis.net/ksingla/changes-to-compression-in-iis7
https://forums.iis.net/t/1150520.aspx
br了gzip,如果客户接受呢?http-compression ×10
gzip ×5
iis ×3
iis-7.5 ×3
http-headers ×2
asp.net ×1
asp.net-4.5 ×1
azure ×1
azure-cdn ×1
brotli ×1
deflate ×1
http ×1
http-caching ×1
iis-7 ×1
iphone ×1
middleware ×1
objective-c ×1
post ×1
rack ×1
request ×1
ruby ×1
web-config ×1
windows-7 ×1