无论如何控制Windows Azure网站中的压缩设置.
我想启用动态json压缩,并且可以通过相应地配置applicationHosts.config文件,成功地在内部部署站点上执行此操作.
在Windows Azure网站上有这样的选择吗?(不是网络角色)
我想为使用IIS7.5在ASP.NET4.5上运行的站点启用gzip压缩,但是无法让它压缩.
我在共享主机上,所以我不能直接在IIS中设置它.
的applicationHost.config
我将其更改Deny为Allow(我在此处读到我不应该更改allowDefinition设置:如何在IIS 7中使用appcmd更改allowDefinition节属性?)
<section name="httpCompression" allowDefinition="AppHostOnly" overrideModeDefault="Allow" />
Run Code Online (Sandbox Code Playgroud)
我的网站的web.config
<httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files">
<scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll"/>
<dynamicTypes>
<add mimeType="text/*" enabled="true"/>
<add mimeType="message/*" enabled="true"/>
<add mimeType="application/javascript" enabled="true"/>
<add mimeType="application/x-javascript" enabled="true"/>
<add mimeType="application/javascript; charset=utf-8" 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="application/x-javascript" enabled="true"/>
<add mimeType="application/javascript; charset=utf-8" enabled="true"/>
<add mimeType="*/*" enabled="false"/>
</staticTypes>
</httpCompression>
Run Code Online (Sandbox Code Playgroud)
作为上述的替代,我也尝试将其添加到我的web.config:
<configuration>
<system.webServer>
<urlCompression doStaticCompression="true" doDynamicCompression="false" />
</system.webServer>
</configuration>
Run Code Online (Sandbox Code Playgroud)
我在Windows …
我一直试图调试这几周.我家网络上所有客户端上的所有浏览器都在发送'Accept-Encoding:gzip,deflate'.但是,该标题以某种方式,在请求进入Web服务器之前被丢弃.例如,http://www.whatsmyip.org/http_compression/说"不,您的浏览器没有请求压缩内容".
我使用Fiddler来确保我的所有浏览器确实都在发送标题.我换掉了我的路由器.我已经关闭了所有的防病毒软件.
Brighthouse/Roadrunner(当地有线电视ISP)表示他们没有进行任何过滤(在这种情况下我无法理解他们为什么会这样做).
任何建议都是最受欢迎的!
YSlow建议我使用HTTP压缩来提高网站的性能.但是,正如雅虎所指出的那样,存在一些问题.
浏览器和代理存在已知问题,这些问题可能导致浏览器期望的内容与压缩内容相关的内容不匹配.幸运的是,随着旧浏览器的使用逐渐减少,这些边缘情况正在减少.Apache模块通过自动添加适当的Vary响应头来帮助解决问题.
我知道最常见的问题出现在代理后面的IE6.但今天这些问题有多常见?为了量化它,大约有多少百分比的网络用户遇到HTTP压缩的错误?
我有一个带有IIS 7的Windows Server 2008 R2.
默认情况下,在IIS中创建站点时,将启用"压缩".我检查了压缩模块,并检查了两个复选框.
现在,我正在使用fiddler检查页面是否正在被压缩,但似乎它们不是因为选择了No Compression并且页面大小超过100 KB.
为什么即使在IIS 7中启用了压缩,页面也不会压缩?
任何建议将受到高度赞赏.
谢谢.
无论静态文件的访问频率如何,我如何强制IIS 7.X进行静态压缩?如果我在禁用缓存的Firefox中刷新页面,这是静态压缩的唯一方法,因为某些"非常常命中"条件拒绝进行静态压缩,除非经常访问文件.....
我有这个自定义过滤器来压缩我的页面输出:
public class EnableCompressionAttribute : ActionFilterAttribute
{
const CompressionMode compress = CompressionMode.Compress;
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
HttpRequestBase request = filterContext.HttpContext.Request;
HttpResponseBase response = filterContext.HttpContext.Response;
string acceptEncoding = request.Headers["Accept-Encoding"];
if (acceptEncoding == null)
return;
if (acceptEncoding.ToLower().Contains("gzip"))
{
response.Filter = new GZipStream(response.Filter, compress);
response.AppendHeader("Content-Encoding", "gzip");
}
else if (acceptEncoding.ToLower().Contains("deflate"))
{
response.Filter = new DeflateStream(response.Filter, compress);
response.AppendHeader("Content-Encoding", "deflate");
}
}
}
Run Code Online (Sandbox Code Playgroud)
我从本书获得了代码:Pro ASP.NET MVC V2 Framework(.NET中的专家语音).
现在我有一个这样的动作方法:
[OutputCache(Order=1, Duration=300,VaryByParam="*", VaryByContentEncoding="gzip; deflate")]
[EnableCompression(Order=0)]
public ActionResult About()
{
return View();
}
Run Code Online (Sandbox Code Playgroud)
如何确保OutputCache过滤器缓存压缩内容?使用像这个例子中的"Order"参数就足够了吗?
我怎样才能看到缓存中发生了什么? …
使用httpCompression我重新认识到IIS将MVC中的静态文件理解为动态内容,因此即使勾选" 启用静态内容压缩 ",但不勾选" 启用动态内容压缩 ",IIS也会返回没有压缩的文件.css和.js文件:
GET /MVCX/Content/Site.css HTTP/1.1
Host: localhost
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.121 Safari/535.2
Accept: text/css,*/*;
Referer: http://localhost/mvcx/
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-GB,en-US;q=0.8,en;q=0.6
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
HTTP/1.1 200 OK
Content-Type: text/css
Last-Modified: Mon, 05 Dec 2011 12:42:37 GMT
Accept-Ranges: bytes
ETag: "c79895e4bb3cc1:0"
Server: Microsoft-IIS/7.5
X-Powered-By: ASP.NET
Date: Mon, 05 Dec 2011 12:44:43 GMT
Content-Length: 1005
Run Code Online (Sandbox Code Playgroud)
但是,如果我勾选" 启用动态内容压缩 ",文件将被压缩:
GET /MVCX/Content/Site.css HTTP/1.1
Host: localhost
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows …Run Code Online (Sandbox Code Playgroud) 我有一个自定义的HttpHandler,我在其中手动启用输出压缩,如下所示:
context.Response.AppendHeader("Content-encoding", "gzip");
context.Response.Filter = new GZipStream(context.Response.Filter, CompressionMode.Compress);
Run Code Online (Sandbox Code Playgroud)
这适用于大多数请求,但遇到异常时,"Content-encoding"标头会从响应中消失,而压缩过滤器仍保留在原位.结果是错误页面被gzip压缩,但是浏览器没有收到表示该事实的标题.然后浏览器尝试将仍然压缩的数据显示为文本,即gobbledygook.
完整的测试用例代码如下所示.尝试交替禁用压缩或不抛出异常.
有人可以解释为什么"内容编码"标题消失了吗?
我想我可以简单地启用压缩作为处理程序的最后一件事,因此如果遇到异常,它永远不会到达添加压缩过滤器的点; 但我看到的行为让我感到害怕.谁能确认一下?
public class TestHandler : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
CompressResponse(context);
context.Response.Write("Hello world");
// Throw an exception for testing purposes
throw new Exception("Just testing...");
}
private void CompressResponse(HttpContext context)
{
string acceptEncoding = context.Request.Headers["Accept-Encoding"];
if (String.IsNullOrEmpty(acceptEncoding))
{
return;
}
// gzip or wildcard
if (acceptEncoding.ToLower().Contains("gzip") || acceptEncoding.Contains("*"))
{
context.Response.AppendHeader("Content-encoding", "gzip");
context.Response.Filter = new GZipStream(context.Response.Filter, CompressionMode.Compress);
return;
}
// Also handles deflate (not …Run Code Online (Sandbox Code Playgroud) 我有一个程序化的Undertow服务器设置.静态内容也由Undertow提供,没有反向代理.Undertow启动的Java代码如下所示:
ResourceManager resourceManager =
new FileResourceManager(new File("deploymentDir"), 100);
DeploymentInfo servletBuilder = Servlets.deployment()
.setResourceManager(resourceManager)
.setDeploymentName("testDeployment")
.setContextPath("/");
DeploymentManager manager = Servlets.defaultContainer()
.addDeployment(servletBuilder);
manager.deploy();
Undertow.Builder builder = Undertow.builder();
builder.addHttpListener(8080, domainName);
PathHandler path = Handlers.path(Handlers.redirect("/"))
.addPrefixPath("/", manager.start());
Undertow server = builder.setHandler(path).build();
server.start();
Run Code Online (Sandbox Code Playgroud)
我想知道一个gzip服务器如何在Undertow中响应?
谢谢,Vitaliy.
http-compression ×10
gzip ×3
asp.net ×2
http-headers ×2
iis-7 ×2
iis-7.5 ×2
asp.net-mvc ×1
azure ×1
c# ×1
http ×1
httphandler ×1
iis ×1
java ×1
outputcache ×1
undertow ×1
web-config ×1
yslow ×1