Hi,

On Tue, Aug 30, 2011 at 5:31 PM, Konstantin Kolinko
<knst.koli...@gmail.com>wrote:
>
>
> Attachments are usually dropped by mailing list software. The one you
> mention above is no exception.
>


> > GET / HTTP/1.1
> > Date: Tue, 30 Aug 2011 02:28:50 GMT
> > Content-Type:
> > Authorization: AWS AKIAJHSWPWM6W6KUXAIQ:u4QnOMbP0vuTsgpUXQ0WfXIWz9c=
> > Host: s3.amazonaws.com:80
> > Connection: Keep-Alive
> > User-Agent: Cyberduck/4.1 (8911) (Windows 7/6.1) (x86)
> > Accept-Encoding: gzip,deflate
>
> 1) GET requests cannot have content, and thus having a Content-Type
> header there is confusing.
>
> 2) Content-Type header is defined in section 14.17 of RFC2616 as
>
> Content-Type   = "Content-Type" ":" media-type
>
> and
>
> media-type     = type "/" subtype *( ";" parameter )
>
> The media-type is not optional and it cannot be empty.
>

Thanks for letting me know and your further explanation!


By the way, my friend has provide me a workaround using filter, post it here
in case some other might need it.

I have tested it locally and it works.


1)   CleanHeaderFilter.java

package org.sample;

import java.io.IOException;
import java.util.Collection;
import java.util.Collections;
import java.util.Enumeration;
import java.util.LinkedList;
import java.util.List;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;

public class CleanHeaderFilter implements Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain)
            throws IOException, ServletException {

        HttpServletRequest httpReq = new
HttpServletRequestWrapper((HttpServletRequest) request) {

            @Override
            public Enumeration getHeaderNames() {
                if ("GET".equalsIgnoreCase(getMethod())) {
                    Collection<String> c = new LinkedList<String>();
                    Enumeration headers = super.getHeaderNames();
                    while (headers.hasMoreElements()) {
                        String header = (String) headers.nextElement();
                        if (!"Content-Type".equalsIgnoreCase(header)) {
                            c.add(header);
                        } else {
                            System.err.println("Remove Content-Type for
GET");
                        }
                    }
                    return Collections.enumeration(c);
                }
                return super.getHeaderNames();
            }

        };
        chain.doFilter(httpReq, response);
    }

    @Override
    public void destroy() {
    }

}

2) add following config to your web.xml

  <filter>

    <filter-name>cleanHeaderFilter</filter-name>

    <filter-class>org.sample.CleanHeaderFilter</filter-class>

  </filter>

  <filter-mapping>

    <filter-name>cleanHeaderFilter</filter-name>

    <url-pattern>/*</url-pattern>

  </filter-mapping>

Reply via email to