Android Http server HEAD method with Content-Length

I am trying to create a response like this

-------------Request----------- HEAD /external/images/media/21.jpg HTTP/1.0 1


-----------My desired answer------------------ HTTP/1.1 200 OK

Date: Tue, 21 Aug 2012 10:24:59 GMT

Cache-Control: no-cache Streaming DLNA.ORG_PN=JPEG_LRG;DLNA.ORG_OP=01;DLNA.ORG_CI=0

Content-Type: image/jpeg

Last-Modified: Sat, 25 Feb 2012 15:11:58 GMT

Content-Length: 60909

Accept-Ranges: bytes

but i have a problem when i try to put "Content-Length: 60909" this exception is thrown "Content-Length header already present", if i dont put the Header Content-Length is always 0, so is not what i want.

This is my code:
public void handle(HttpRequest request,
                   HttpResponse response,
                   HttpContext context) throws HttpException, IOException {

String method = request.getRequestLine().getMethod().toUpperCase(Locale.ENGLISH);
String objectId = getUrlBuilder().getObjectId(request.getRequestLine().getUri());
        DIDLObject obj = findObjectWithId(objectId);
        if (obj == null) {

MimeType mimeType = getMimeType(obj);
        long sizeInBytes = getSizeInBytes(obj);

        response.setHeader("Cache-control", "no-cache");
        response.setHeader("", "Streaming");
        String aMimeType = mimeType.toString();
        String dlnaspec="";

        if (aMimeType.equals("image/jpeg"))
            dlnaspec = "DLNA.ORG_PN=JPEG_LRG";
        else if (aMimeType.equals("audio/mpeg"))
            dlnaspec = "DLNA.ORG_PN=MP3";
        else if (aMimeType.equals("audio/L16") || aMimeType.equals("audio/wav"))
            dlnaspec = "DLNA.ORG_PN=LPCM";

        response.setHeader("", dlnaspec+";DLNA.ORG_OP=01;DLNA.ORG_CI=0");

        response.setHeader("Content-Type", mimeType.toString());
        response.setHeader("Accept-Ranges", "bytes");
        response.setHeader("Content-Length", String.valueOf(sizeInBytes));



any ideas? i have tried also to put an Entity in this way

ByteArrayInputStream stream=new ByteArrayInputStream(new byte[(int) sizeInBytes]);
InputStreamEntity entity = new InputStreamEntity(stream, sizeInBytes); 

but the problem is that the HEAD method dont have a body so this approach is not valid


I find one solution, implement my own ResponseContent with support for Users Content-Length thats the code

public class MyCustomResponseContent implements HttpResponseInterceptor 

private final boolean overwrite;

* Default constructor. The <code>Content-Length</code> or <code>Transfer-  Encoding</code>
* will cause the interceptor to throw {@link ProtocolException} if already present in the
* response message.

public MyCustomResponseContent() 

* Constructor that can be used to fine-tune behavior of this interceptor.
* @param overwrite If set to <code>true</code> the <code>Content-Length</code> and
* <code>Transfer-Encoding</code> headers will be created or updated if already present.
* If set to <code>false</code> the <code>Content-Length</code> and
* <code>Transfer-Encoding</code> headers will cause the interceptor to throw
* {@link ProtocolException} if already present in the response message.
* @since 4.2

public MyCustomResponseContent(boolean overwrite) 
    this.overwrite = overwrite;

* Processes the response (possibly updating or inserting) Content-Length and Transfer-Encoding headers.
* @param response The HttpResponse to modify.
* @param context Unused.
* @throws ProtocolException If either the Content-Length or Transfer-Encoding headers are found.
* @throws IllegalArgumentException If the response is null.

public void process(final HttpResponse response, final HttpContext context) throws HttpException, IOException 
    if (response == null) 
        throw new IllegalArgumentException("HTTP response may not be null");
    if (this.overwrite) 
        if (response.containsHeader(HTTP.TRANSFER_ENCODING)) 
            throw new ProtocolException("Transfer-encoding header already present");
        if (response.containsHeader(HTTP.CONTENT_LEN)) 
            throw new ProtocolException("Content-Length header already present");
    ProtocolVersion ver = response.getStatusLine().getProtocolVersion();
    HttpEntity entity = response.getEntity();
    if (entity != null) 
        long len = entity.getContentLength();
        if (entity.isChunked() && !ver.lessEquals(HttpVersion.HTTP_1_0)) 
            response.addHeader(HTTP.TRANSFER_ENCODING, HTTP.CHUNK_CODING);
        else if (len >= 0) 
            response.addHeader(HTTP.CONTENT_LEN, Long.toString(entity.getContentLength()));
        //  Specify a content type if known
        if (entity.getContentType() != null && !response.containsHeader(HTTP.CONTENT_TYPE )) 
        //  Specify a content encoding if known
        if (entity.getContentEncoding() != null && !response.containsHeader(HTTP.CONTENT_ENCODING)) 
    else if (!response.containsHeader(HTTP.CONTENT_LEN))            
        int status = response.getStatusLine().getStatusCode();
        if (status != HttpStatus.SC_NO_CONTENT && status != HttpStatus.SC_NOT_MODIFIED && status != HttpStatus.SC_RESET_CONTENT) 
            response.addHeader(HTTP.CONTENT_LEN, "0");


Need Your Help

How to make javascript file work in aspx?

javascript telerik

I have javascript functions for shortcut keys so want to use in entire solution so i want that file in a javascript file use it in every screen so tell me how to use it.

Android Facebook Places using Graph Api

android facebook facebook-graph-api

I am new to android. I searched for the places using Graph Api as follows