Fixed bugs in web server that ignored when the web app sets a header that overrides anything that would normally be generated (for forwarded content).
This commit is contained in:
@@ -104,7 +104,7 @@ public class WebServerApplication extends Application implements IWebServer {
|
||||
public void log(int type, String note, Throwable exception) {
|
||||
log(note, exception, type, true);
|
||||
}//log()//
|
||||
/*
|
||||
/* TODO: Fix this code - it should be changed from using Framework Models to using a queue of plain objects that can be listened on for changes.
|
||||
private boolean suspend = false;
|
||||
|
||||
public void log(int type, String note, Throwable exception) {
|
||||
|
||||
@@ -815,93 +815,104 @@ public class WebServer {
|
||||
}//else//
|
||||
}//if//
|
||||
|
||||
if(response.isError()) {
|
||||
if(response.getHeader() != null) {
|
||||
pout.print(response.getHeader());
|
||||
}//if//
|
||||
else {
|
||||
pout.print("HTTP/1.1 404 Resource Not Found\r\n");
|
||||
}//else//
|
||||
if(!response.isError() && response.getHeader() != null) {
|
||||
//Include all but the last end of line.//
|
||||
pout.print(response.getHeader().substring(0, response.getHeader().length() - 2));
|
||||
writeSessionCookies(pout);
|
||||
//Add a final terminating end of line.//
|
||||
pout.print("\r\n");
|
||||
}//if//
|
||||
else if(response.getCustomHeader() != null) {
|
||||
pout.print(response.getCustomHeader());
|
||||
}//else if//
|
||||
else if(isDownloaded && request.getRange() != null) {
|
||||
pout.print("HTTP/1.1 206 Partial Content\r\n");
|
||||
}//else if//
|
||||
else {
|
||||
pout.print("HTTP/1.1 200 OK\r\n");
|
||||
}//else//
|
||||
|
||||
pout.print("Content-Length: " + (content != null ? content.getSize() : 0) + "\r\n");
|
||||
|
||||
if(compress) {
|
||||
//TODO: Add others?
|
||||
if(compressionType == 1) {
|
||||
content = new GzipContent(content);
|
||||
pout.print("Content-Encoding: gzip\r\n");
|
||||
if(response.isError()) {
|
||||
if(response.getHeader() != null) {
|
||||
pout.print(response.getHeader());
|
||||
}//if//
|
||||
else {
|
||||
pout.print("HTTP/1.1 404 Resource Not Found\r\n");
|
||||
}//else//
|
||||
}//if//
|
||||
}//if//
|
||||
|
||||
if(content != null) {
|
||||
//Note: The character set gives IE indigestion for some reason.//
|
||||
pout.print("Content-Type: " + (mimeType != null ? mimeType.getMimeName() : "text/html") + "; charset=" + (response.getCharacterSet() == null ? "UTF-8" : response.getCharacterSet()) + "\r\n");
|
||||
cacheDirective = content.getCacheDirective();
|
||||
else if(response.getCustomHeader() != null) {
|
||||
pout.print(response.getCustomHeader());
|
||||
}//else if//
|
||||
else if(isDownloaded && request.getRange() != null) {
|
||||
pout.print("HTTP/1.1 206 Partial Content\r\n");
|
||||
}//else if//
|
||||
else {
|
||||
pout.print("HTTP/1.1 200 OK\r\n");
|
||||
}//else//
|
||||
|
||||
if(isDownloaded) {
|
||||
pout.print("Content-Disposition: attachment; filename=\"" + content.getDownloadName() + "\";\r\n");
|
||||
pout.print("Accept-Ranges: bytes\r\n");
|
||||
|
||||
if(request.getRange() != null) {
|
||||
// Debug.log("Sending a ranged response: " + request.getRange() + " content range: (" + content.getStart() + " - " + content.getEnd() + "/" + content.getSize() + ").");
|
||||
pout.print("Range: " + request.getRange() + "\r\n");
|
||||
pout.print("Content-Range: bytes " + content.getStart() + "-" + content.getEnd() + "/" + content.getSize() + "\r\n");
|
||||
pout.print("Content-Length: " + (content != null ? content.getSize() : 0) + "\r\n");
|
||||
|
||||
if(compress) {
|
||||
//TODO: Add others?
|
||||
if(compressionType == 1) {
|
||||
content = new GzipContent(content);
|
||||
pout.print("Content-Encoding: gzip\r\n");
|
||||
}//if//
|
||||
}//if//
|
||||
}//if//
|
||||
|
||||
writeSessionCookies(pout);
|
||||
|
||||
pout.print("Server: DE/1.0\r\n");
|
||||
//TODO: IE has a problem with caching and forwarding/redirecting. A page that redirects to another page that was previously cached does not result in IE sending a request for the forwarded content.//
|
||||
//private / no-cache
|
||||
|
||||
if(content.getExpiresDirective() != null) {
|
||||
pout.print("Expires: " + getHttpDateFormat().format(content.getExpiresDirective()));
|
||||
}//if//
|
||||
|
||||
if(cacheDirective != null) {
|
||||
pout.print("Cache-Control: " + cacheDirective + "\r\n");
|
||||
}//if//
|
||||
else {
|
||||
int cacheLength = content.getCacheLength() != null ? content.getCacheLength().intValue() : mimeType != null ? mimeType.getDefaultCacheLength() : IMimeType.CACHE_LENGTH_NEVER_CACHE;
|
||||
|
||||
if(cacheLength > 0) {
|
||||
pout.print("Cache-Control: public, max-age=" + cacheLength + "\r\n");
|
||||
if(content != null) {
|
||||
//Note: The character set gives IE indigestion for some reason.//
|
||||
pout.print("Content-Type: " + (mimeType != null ? mimeType.getMimeName() : "text/html") + "; charset=" + (response.getCharacterSet() == null ? "UTF-8" : response.getCharacterSet()) + "\r\n");
|
||||
cacheDirective = content.getCacheDirective();
|
||||
|
||||
if(isDownloaded) {
|
||||
pout.print("Content-Disposition: attachment; filename=\"" + content.getDownloadName() + "\";\r\n");
|
||||
pout.print("Accept-Ranges: bytes\r\n");
|
||||
|
||||
if(request.getRange() != null) {
|
||||
// Debug.log("Sending a ranged response: " + request.getRange() + " content range: (" + content.getStart() + " - " + content.getEnd() + "/" + content.getSize() + ").");
|
||||
pout.print("Range: " + request.getRange() + "\r\n");
|
||||
pout.print("Content-Range: bytes " + content.getStart() + "-" + content.getEnd() + "/" + content.getSize() + "\r\n");
|
||||
}//if//
|
||||
}//if//
|
||||
}//if//
|
||||
|
||||
writeSessionCookies(pout);
|
||||
|
||||
pout.print("Server: DE/1.0\r\n");
|
||||
|
||||
//TODO: IE has a problem with caching and forwarding/redirecting. A page that redirects to another page that was previously cached does not result in IE sending a request for the forwarded content.//
|
||||
//private / no-cache
|
||||
|
||||
if(content.getExpiresDirective() != null) {
|
||||
pout.print("Expires: " + getHttpDateFormat().format(content.getExpiresDirective()));
|
||||
}//if//
|
||||
|
||||
if(cacheDirective != null) {
|
||||
pout.print("Cache-Control: " + cacheDirective + "\r\n");
|
||||
}//if//
|
||||
else if(cacheLength == IMimeType.CACHE_LENGTH_ALWAYS_TEST) {
|
||||
pout.print("Cache-Control: public, pre-check=0, post-check=120\r\n");
|
||||
}//else if//
|
||||
else if(cacheLength == IMimeType.CACHE_LENGTH_NEVER_CACHE) {
|
||||
pout.print("Cache-Control: no-cache\r\n");
|
||||
}//else if//
|
||||
else {
|
||||
pout.print("Cache-Control: no-store\r\n");
|
||||
int cacheLength = content.getCacheLength() != null ? content.getCacheLength().intValue() : mimeType != null ? mimeType.getDefaultCacheLength() : IMimeType.CACHE_LENGTH_NEVER_CACHE;
|
||||
|
||||
if(cacheLength > 0) {
|
||||
pout.print("Cache-Control: public, max-age=" + cacheLength + "\r\n");
|
||||
}//if//
|
||||
else if(cacheLength == IMimeType.CACHE_LENGTH_ALWAYS_TEST) {
|
||||
pout.print("Cache-Control: public, pre-check=0, post-check=120\r\n");
|
||||
}//else if//
|
||||
else if(cacheLength == IMimeType.CACHE_LENGTH_NEVER_CACHE) {
|
||||
pout.print("Cache-Control: no-cache\r\n");
|
||||
}//else if//
|
||||
else {
|
||||
pout.print("Cache-Control: no-store\r\n");
|
||||
}//else//
|
||||
}//else//
|
||||
|
||||
//TODO: Determine if we need to use age.
|
||||
//pout.print("Age: 0\r\n");
|
||||
//TODO: Determine if we need to use ETags
|
||||
|
||||
if(lastModifiedDate != null) {
|
||||
SimpleDateFormat format = getHttpDateFormat();
|
||||
|
||||
pout.print("Last-Modified: " + format.format(lastModifiedDate) + "\r\n");
|
||||
pout.print("Date: " + format.format(new Date()) + "\r\n");
|
||||
}//if//
|
||||
|
||||
pout.print("\r\n");
|
||||
}//else//
|
||||
|
||||
//TODO: Determine if we need to use age.
|
||||
//pout.print("Age: 0\r\n");
|
||||
//TODO: Determine if we need to use ETags
|
||||
|
||||
if(lastModifiedDate != null) {
|
||||
SimpleDateFormat format = getHttpDateFormat();
|
||||
|
||||
pout.print("Last-Modified: " + format.format(lastModifiedDate) + "\r\n");
|
||||
pout.print("Date: " + format.format(new Date()) + "\r\n");
|
||||
}//if//
|
||||
|
||||
pout.print("\r\n");
|
||||
headerBytes = bout.toByteArray();
|
||||
}//else if//
|
||||
else {
|
||||
|
||||
Reference in New Issue
Block a user