Author: markt
Date: Fri Apr 17 08:43:34 2009
New Revision: 765902
URL: http://svn.apache.org/viewvc?rev=765902&view=rev
Log:
Revert r765727 (fix for
https://issues.apache.org/bugzilla/show_bug.cgi?id=46538) - it fixes the
reported issue but introduces other issues.
Modified:
tomcat/trunk/java/org/apache/coyote/http11/Constants.java
tomcat/trunk/java/org/apache/coyote/http11/Http11AprProcessor.java
tomcat/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java
tomcat/trunk/java/org/apache/coyote/http11/Http11Processor.java
Modified: tomcat/trunk/java/org/apache/coyote/http11/Constants.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/Constants.java?rev=765902&r1=765901&r2=765902&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/Constants.java (original)
+++ tomcat/trunk/java/org/apache/coyote/http11/Constants.java Fri Apr 17
08:43:34 2009
@@ -148,10 +148,7 @@
ByteChunk.convertToBytes("400");
public static final byte[] _404_BYTES =
ByteChunk.convertToBytes("404");
- public static final String VARY = "Vary";
- public static final String VARY_UNSPECIFIED = "*";
- public static final String ACCEPT_ENCODING = "Accept-Encoding";
- public static final String ETAG = "ETag";
+
/**
* Identity filters (input and output).
Modified: tomcat/trunk/java/org/apache/coyote/http11/Http11AprProcessor.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/Http11AprProcessor.java?rev=765902&r1=765901&r2=765902&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/Http11AprProcessor.java
(original)
+++ tomcat/trunk/java/org/apache/coyote/http11/Http11AprProcessor.java Fri Apr
17 08:43:34 2009
@@ -1486,9 +1486,16 @@
/**
- * Check if browser allows compression
+ * Check for compression
*/
- private boolean isCompressableBrowser() {
+ private boolean isCompressable() {
+
+ // Nope Compression could works in HTTP 1.0 also
+ // cf: mod_deflate
+
+ // Compression only since HTTP 1.1
+ // if (! http11)
+ // return false;
// Check if browser support gzip encoding
MessageBytes acceptEncodingMB =
@@ -1498,7 +1505,15 @@
|| (acceptEncodingMB.indexOf("gzip") == -1))
return false;
- // If force mode, always compress (test purposes only)
+ // Check if content is not allready gzipped
+ MessageBytes contentEncodingMB =
+ response.getMimeHeaders().getValue("Content-Encoding");
+
+ if ((contentEncodingMB != null)
+ && (contentEncodingMB.indexOf("gzip") != -1))
+ return false;
+
+ // If force mode, allways compress (test purposes only)
if (compressionLevel == 2)
return true;
@@ -1515,23 +1530,8 @@
return false;
}
}
- return true;
- }
-
- /*
- * Check if response allows compression
- */
- private boolean isCompressableResponse() {
-
- // Check if content is not already gzipped
- MessageBytes contentEncodingMB =
- response.getMimeHeaders().getValue("Content-Encoding");
- if ((contentEncodingMB != null)
- && (contentEncodingMB.indexOf("gzip") != -1))
- return false;
-
- // Check if sufficient length to trigger the compression
+ // Check if suffisant len to trig the compression
long contentLength = response.getContentLengthLong();
if ((contentLength == -1)
|| (contentLength > compressionMinSize)) {
@@ -1598,35 +1598,18 @@
((Long)
request.getAttribute("org.apache.tomcat.sendfile.end")).longValue();
}
}
-
- MimeHeaders headers = response.getMimeHeaders();
-
+
// Check for compression
boolean useCompression = false;
if (entityBody && (compressionLevel > 0) && (sendfileData == null)) {
- if (isCompressableResponse()) {
- // Always send the Vary header when response could be
compressed
- MessageBytes varyHeader = headers.getValue(Constants.VARY);
- if (varyHeader == null) {
- headers.addValue(Constants.VARY).setString(
- Constants.ACCEPT_ENCODING);
- } else {
- if (varyHeader.indexOf(Constants.ACCEPT_ENCODING) == -1 &&
- !varyHeader.equals(Constants.VARY_UNSPECIFIED)) {
- varyHeader.setString(varyHeader.toString() + "," +
- Constants.ACCEPT_ENCODING);
- }
- }
- }
-
- useCompression = isCompressableBrowser();
-
+ useCompression = isCompressable();
// Change content-length to -1 to force chunking
if (useCompression) {
response.setContentLength(-1);
}
}
+ MimeHeaders headers = response.getMimeHeaders();
if (!entityBody) {
response.setContentLength(-1);
} else {
@@ -1662,22 +1645,8 @@
if (useCompression) {
outputBuffer.addActiveFilter(outputFilters[Constants.GZIP_FILTER]);
headers.setValue("Content-Encoding").setString("gzip");
-
- // Ensure eTag for compressed content is different to eTag for
- // uncompressed content
- MessageBytes eTagHeader = headers.getValue(Constants.ETAG);
- if (eTagHeader != null) {
- String eTag = eTagHeader.toString();
- int len = eTag.length();
- if (len > 1 && eTag.charAt(len - 1) == '"') {
- // Add compression marker before closing quote
- eTag = eTag.substring(0, len -1) + "-gz\"";
- } else {
- // Unquoted ETag - shouldn't happen - TODO complain
- eTag = eTag + "-gz";
- }
- eTagHeader.setString(eTag);
- }
+ // Make Proxies happy via Vary (from mod_deflate)
+ headers.setValue("Vary").setString("Accept-Encoding");
}
// Add date header
Modified: tomcat/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java?rev=765902&r1=765901&r2=765902&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java
(original)
+++ tomcat/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java Fri Apr
17 08:43:34 2009
@@ -1529,9 +1529,16 @@
/**
- * Check if browser allows compression
+ * Check for compression
*/
- private boolean isCompressableBrowser() {
+ private boolean isCompressable() {
+
+ // Nope Compression could works in HTTP 1.0 also
+ // cf: mod_deflate
+
+ // Compression only since HTTP 1.1
+ // if (! http11)
+ // return false;
// Check if browser support gzip encoding
MessageBytes acceptEncodingMB =
@@ -1541,7 +1548,15 @@
|| (acceptEncodingMB.indexOf("gzip") == -1))
return false;
- // If force mode, always compress (test purposes only)
+ // Check if content is not allready gzipped
+ MessageBytes contentEncodingMB =
+ response.getMimeHeaders().getValue("Content-Encoding");
+
+ if ((contentEncodingMB != null)
+ && (contentEncodingMB.indexOf("gzip") != -1))
+ return false;
+
+ // If force mode, allways compress (test purposes only)
if (compressionLevel == 2)
return true;
@@ -1558,23 +1573,8 @@
return false;
}
}
- return true;
- }
-
- /*
- * Check if response allows compression
- */
- private boolean isCompressableResponse() {
-
- // Check if content is not already gzipped
- MessageBytes contentEncodingMB =
- response.getMimeHeaders().getValue("Content-Encoding");
- if ((contentEncodingMB != null)
- && (contentEncodingMB.indexOf("gzip") != -1))
- return false;
-
- // Check if sufficient length to trigger the compression
+ // Check if suffisant len to trig the compression
long contentLength = response.getContentLengthLong();
if ((contentLength == -1)
|| (contentLength > compressionMinSize)) {
@@ -1639,33 +1639,19 @@
}
}
- MimeHeaders headers = response.getMimeHeaders();
+
// Check for compression
boolean useCompression = false;
if (entityBody && (compressionLevel > 0) && (sendfileData == null)) {
- if (isCompressableResponse()) {
- // Always send the Vary header when response could be
compressed
- MessageBytes varyHeader = headers.getValue(Constants.VARY);
- if (varyHeader == null) {
- headers.addValue(Constants.VARY).setString(
- Constants.ACCEPT_ENCODING);
- } else {
- if (varyHeader.indexOf(Constants.ACCEPT_ENCODING) == -1 &&
- !varyHeader.equals(Constants.VARY_UNSPECIFIED)) {
- varyHeader.setString(varyHeader.toString() + "," +
- Constants.ACCEPT_ENCODING);
- }
- }
- }
- useCompression = isCompressableBrowser();
-
+ useCompression = isCompressable();
// Change content-length to -1 to force chunking
if (useCompression) {
response.setContentLength(-1);
}
}
+ MimeHeaders headers = response.getMimeHeaders();
if (!entityBody) {
response.setContentLength(-1);
} else {
@@ -1701,22 +1687,8 @@
if (useCompression) {
outputBuffer.addActiveFilter(outputFilters[Constants.GZIP_FILTER]);
headers.setValue("Content-Encoding").setString("gzip");
-
- // Ensure eTag for compressed content is different to eTag for
- // uncompressed content
- MessageBytes eTagHeader = headers.getValue(Constants.ETAG);
- if (eTagHeader != null) {
- String eTag = eTagHeader.toString();
- int len = eTag.length();
- if (len > 1 && eTag.charAt(len - 1) == '"') {
- // Add compression marker before closing quote
- eTag = eTag.substring(0, len -1) + "-gz\"";
- } else {
- // Unquoted ETag - shouldn't happen - TODO complain
- eTag = eTag + "-gz";
- }
- eTagHeader.setString(eTag);
- }
+ // Make Proxies happy via Vary (from mod_deflate)
+ headers.setValue("Vary").setString("Accept-Encoding");
}
// Add date header
Modified: tomcat/trunk/java/org/apache/coyote/http11/Http11Processor.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/Http11Processor.java?rev=765902&r1=765901&r2=765902&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/Http11Processor.java (original)
+++ tomcat/trunk/java/org/apache/coyote/http11/Http11Processor.java Fri Apr 17
08:43:34 2009
@@ -1399,9 +1399,16 @@
/**
- * Check if browser allows compression
+ * Check for compression
*/
- private boolean isCompressableBrowser() {
+ private boolean isCompressable() {
+
+ // Nope Compression could works in HTTP 1.0 also
+ // cf: mod_deflate
+
+ // Compression only since HTTP 1.1
+ // if (! http11)
+ // return false;
// Check if browser support gzip encoding
MessageBytes acceptEncodingMB =
@@ -1411,7 +1418,15 @@
|| (acceptEncodingMB.indexOf("gzip") == -1))
return false;
- // If force mode, always compress (test purposes only)
+ // Check if content is not allready gzipped
+ MessageBytes contentEncodingMB =
+ response.getMimeHeaders().getValue("Content-Encoding");
+
+ if ((contentEncodingMB != null)
+ && (contentEncodingMB.indexOf("gzip") != -1))
+ return false;
+
+ // If force mode, allways compress (test purposes only)
if (compressionLevel == 2)
return true;
@@ -1428,23 +1443,8 @@
return false;
}
}
- return true;
- }
-
- /*
- * Check if response allows compression
- */
- private boolean isCompressableResponse() {
-
- // Check if content is not already gzipped
- MessageBytes contentEncodingMB =
- response.getMimeHeaders().getValue("Content-Encoding");
- if ((contentEncodingMB != null)
- && (contentEncodingMB.indexOf("gzip") != -1))
- return false;
-
- // Check if sufficient length to trigger the compression
+ // Check if suffisant len to trig the compression
long contentLength = response.getContentLengthLong();
if ((contentLength == -1)
|| (contentLength > compressionMinSize)) {
@@ -1495,34 +1495,18 @@
contentDelimitation = true;
}
- MimeHeaders headers = response.getMimeHeaders();
-
// Check for compression
boolean useCompression = false;
if (entityBody && (compressionLevel > 0)) {
- if (isCompressableResponse()) {
- // Always send the Vary header when response could be
compressed
- MessageBytes varyHeader = headers.getValue(Constants.VARY);
- if (varyHeader == null) {
- headers.addValue(Constants.VARY).setString(
- Constants.ACCEPT_ENCODING);
- } else {
- if (varyHeader.indexOf(Constants.ACCEPT_ENCODING) == -1 &&
- !varyHeader.equals(Constants.VARY_UNSPECIFIED)) {
- varyHeader.setString(varyHeader.toString() + "," +
- Constants.ACCEPT_ENCODING);
- }
- }
- }
-
- useCompression = isCompressableBrowser();
-
+ useCompression = isCompressable();
+
// Change content-length to -1 to force chunking
if (useCompression) {
response.setContentLength(-1);
}
}
+ MimeHeaders headers = response.getMimeHeaders();
if (!entityBody) {
response.setContentLength(-1);
} else {
@@ -1558,22 +1542,8 @@
if (useCompression) {
outputBuffer.addActiveFilter(outputFilters[Constants.GZIP_FILTER]);
headers.setValue("Content-Encoding").setString("gzip");
-
- // Ensure eTag for compressed content is different to eTag for
- // uncompressed content
- MessageBytes eTagHeader = headers.getValue(Constants.ETAG);
- if (eTagHeader != null) {
- String eTag = eTagHeader.toString();
- int len = eTag.length();
- if (len > 1 && eTag.charAt(len - 1) == '"') {
- // Add compression marker before closing quote
- eTag = eTag.substring(0, len -1) + "-gz\"";
- } else {
- // Unquoted ETag - shouldn't happen - TODO complain
- eTag = eTag + "-gz";
- }
- eTagHeader.setString(eTag);
- }
+ // Make Proxies happy via Vary (from mod_deflate)
+ headers.setValue("Vary").setString("Accept-Encoding");
}
// Add date header
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]