标签: http-compression

使用GZIP或deflate在objective-c(iphone)中压缩/解压缩NSString

我有一个在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表示的复杂对象的压缩字符串.

这在服务器上很容易实现,但是对于我的生活,我无法弄清楚如何将压缩的NSS​​tring解压缩为未压缩的NSS​​tring,我可以为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)

iphone gzip objective-c http-compression deflate

8
推荐指数
1
解决办法
2万
查看次数

如何在Asp.Net 4.0/IIS7中支持压缩的HTTP请求?

对于ASP.NET 4.0/IIS7 Web应用程序,我想支持压缩的HTTP 请求.基本上,我想支持将添加Content-Encoding: gzip到请求标头中的客户端,并相应地压缩主体.

有谁知道我是如何实现这种行为的?

Ps:关于,我有多个端点REST和SOAP,它感觉更好的解决方案来支持HTTP级别的压缩,而不是每个端点的自定义编码器.

asp.net iis gzip request http-compression

8
推荐指数
1
解决办法
3419
查看次数

web.config ASP.NET IIS7.5中的httpCompression覆盖

我在我的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 http-compression iis-7.5 asp.net-4.5

8
推荐指数
0
解决办法
3658
查看次数

IIS 7.5静态内容压缩(不一致)

我有以下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出了什么问题.

谢谢

iis gzip http-compression iis-7.5

8
推荐指数
1
解决办法
5740
查看次数

为什么 POST 方法期间请求正文的 GZIP 压缩不常见?

我最近在玩 GZIP 压缩以及我理解以下内容的方式:

  1. 客户端从 Web 服务器请求一些文件或数据。客户端还会发送一个标头,上面写着“Accept-Encoding,gzip”
  2. Web Server 检索文件或数据,对其进行压缩,然后将它们以 GZIP 压缩格式发送回客户端。Web 服务器还发送一个标题为“Content-Encoded,gzip”,以通知客户端数据已被压缩。
  3. 客户端然后解压缩数据/文件并为用户加载它们。

我知道这是一种常见的做法,当您需要加载需要大量 HTML、CSS 和 JavaScript 的页面时,这很有意义,这些页面可能相对较大,并且会增加浏览器的加载时间。

但是,我试图进一步研究这一点,为什么在进行 POST 调用时 GZIP 压缩请求正文并不常见?是不是因为通常请求主体很小,所以在 Web 服务器上解压缩文件所需的时间比简单地发送请求所需的时间长?是否有关于此的某种文件或参考资料?

谢谢!

post gzip http-compression

8
推荐指数
2
解决办法
6896
查看次数

如何以编程方式打开IIS的DynamicCompression功能?

我正在为我的Web应用程序制作安装程序.我的Web应用程序大量使用CSS和JS,因此我想为IIS7/7.5启用静态和动态HttpCompression.

它需要两个步骤:

  1. 我可以修改web.config,put <httpcompression>标签,没关系.
  2. 必须在Windows功能中打开DynamicContentCompression才能使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

7
推荐指数
3
解决办法
5106
查看次数

机架rack.input变量被截断?

我写了一段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)

ruby rack middleware ruby-on-rails http-compression

7
推荐指数
1
解决办法
3836
查看次数

HTTP标头压缩

HTTP标头效率不高.在最小方法和响应头之间使用了超过必要的几十个字节.

是否有任何建议标准化HTTP的二进制或压缩格式?

除HTTP之外是否有类似的标准更适合交互式移动应用程序?

http http-compression http-headers

7
推荐指数
3
解决办法
5884
查看次数

Azure CDN - 使用ETag启用HTTP 304缓存 - 托管Web角色

我们正尝试在Azure CDN上通过ETag 启用HTTP压缩(gzip)和HTTP 304缓存.我们已经发现启用Azure CDN压缩的问题,但现在我们无法同时使用压缩和ETag缓存(304s).此问题已在此处发布到Azure论坛.

以下是压缩但不可缓存的HTTP(304)链接的示例:

https://xxxx.vo.msecnd.net/resourceManager.axd?token=HL80vX5hf3lIAAA&group=core.js

以下是可缓存(304)但不可压缩(gzip)链接的示例:

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

7
推荐指数
1
解决办法
1942
查看次数

在IIS7/8/8.5中指定多个(gzip + brotli)httpCompression方案并确定brotli的优先级

我试图通过iisspeed.com使用" 用于Microsoft IIS的Brotli压缩模块 "在IIS中使用新的Brotli压缩方案.

如果我将<httpCompression>配置部分更改applicationHost.config具有Brotli模块,则Brotli压缩模块本身可以正常工作.

问题是,我想有两个 gzip和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

有什么我能为IIS7 +做告诉IIS喜欢brgzip,如果客户接受呢?

iis gzip http-compression http-headers brotli

7
推荐指数
1
解决办法
2441
查看次数