Hello Jose,

Thanks a lot.

I suppose your app is a proxy. Then you should also manage the request
headers, and only send to server those headers that are not hop-by-hop.

In addition, I think you should remove those headers whose name is present
in the "Connection" header. This is my implementation (with request
headers):

private void setHeaders(HttpServletRequest request)
{
  String connectionHeaderValue  = null;  
  Enumeration<?> headerNames    = request.getHeaderNames();
  
  while (headerNames.hasMoreElements()) 
  {
   String headerName  = (String)headerNames.nextElement();
   
   // Obviamos las 'cookies', porque ya las hemos cogido antes.
   if (!headerName.equalsIgnoreCase(GenericConstants.HEADER_COOKIE))
   {
    // Si es el 'Connection' header, no lo añado pero me quedo con su valor.

    if (headerName.equalsIgnoreCase(GenericConstants.HEADER_CONNECTION))
connectionHeaderValue = request.getHeader(headerName);   
    else this.addHeader(headerName, request.getHeader(headerName));
   }
  }
  
  // Al final de recoger todos los 'header', hay que eliminar aquellos cuyo
nombre esté incluído en 'connectionHeaderValue' (tiene los valores separados
por ",").
  if (connectionHeaderValue != null)
  {
   String[] connectionHeaderNames =
connectionHeaderValue.split(GenericConstants.COMA_SEPARATOR);
   for (String headerName : connectionHeaderNames)
this.headers.remove(headerName.trim().toLowerCase());
  }
 }


It's not tested yet. I'm working on it.

Regards,
Joan.


-----Mensaje original-----
De: Jose Escobar [mailto:[email protected]] 
Enviado el: miércoles, 11 de julio de 2012 9:06
Para: HttpClient User Discussion
Asunto: Re: Headers

Hello Joan,

I didn't find any method to do this. This is my implementation:

public static final String[] SET_HOP_BY_HOP_VALUES = new String[] {
"connection", "keep-alive", "proxy-authenticate", "proxy-authorization",
"te", "trailers", "transfer-encoding", "upgrade", "content-length"}; public
static final Set<String> HOP_BY_HOP_HEADERS_SET = new
HashSet<String>(Arrays.asList(SET_HOP_BY_HOP_VALUES));


....


httppost.setEntity(bufferedHttpEntity);
                                                
                        HttpResponse response =
httpClient.execute(httppost);
                        HttpEntity entity = response.getEntity();
                        
                        try{
                                Header[] headers=response.getAllHeaders();
                                
                                for(int i=0;i<headers.length;i++){
        
if(!HOP_BY_HOP_HEADERS_SET.contains(headers[i].getName().toLowerCase()..trim
())){
        
currentResponse.addHeader(headers[i].getName(), headers[i].getValue());
                                                logger.info("Añadiendo linea
de nombre {} y valor {} para la respuesta a traves de proxy",
headers[i].getName(), headers[i].getValue());
                                        }
                                }
                                
                                InputStream is=entity.getContent();
                                IOUtils.write(IOUtils.toByteArray(is),
currentResponse.getOutputStream());
                        }catch(Exception ex){
                                if(response!=null){
                                        try {
        
EntityUtils.consume(response.getEntity());
                                        } catch (Exception e1) {
                                                e1.printStackTrace();
                                        }
                                }
                                currentResponse.setStatus(500);
                                IOUtils.write("Error formateando el response
en el proxy: "+ ex.getMessage(), currentResponse.getOutputStream());
                                logger.error("Error formateando el response
en el proxy: {}", ex.getMessage());
                        }


Hope this help you.

PD: I had to include "content-length" header as a hop-by-hop header for some
problems, but it's not declared as a hop-by-hop header in RFC.

2012/7/10 Joan Balaguero <[email protected]>:
> Hello,
>
>
>
> Is there any way in HC4 to find out if  a header is a hop by hop 
> header (and , therefore, it should not be transmitted),  or must the 
> Connection header be parsed manually?
>
>
>
> Thanks,
>
> Joan.
>

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]


-----
No se encontraron virus en este mensaje.
Comprobado por AVG - www.avg.com
Versión: 2012.0.2195 / Base de datos de virus: 2437/5124 - Fecha de
publicación: 07/10/12


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

  • Headers Joan Balaguero
    • RE: Headers Joan Balaguero

Reply via email to