2011-04-01 20 views
6

nos encontramos con un comportamiento extraño con nuestra aplicación web. Algunas solicitudes POST no tienen ningún cuerpo http, cuando deberían. content-length es 0. No hay parámetros de publicación en absoluto. Rastreamos el tráfico de la red en nuestro loadbalancer y vemos que no recibimos ningún cuerpo de solicitud con algunas de nuestras solicitudes POST.Missing POST Parámetros con servidores proxy

Todas las solicitudes POST rotas tienen en común que llegan a través de un servidor proxy.

Ya hemos encontrado esta pregunta en SO: Why "Content-Length: 0" in POST requests?

ahora estamos utilizando un marco de escapar de la rutina Javascript y ayuda un poco. Parece que la tasa de error cae. Pero todavía tenemos solicitudes POST sin datos que nunca deberían pasar en nuestra aplicación web. Estas solicitudes no provienen de hackers o similares.

A menudo vimos webwasher como proxy. Pero la mayoría de las veces no vemos qué proxy se usa.

En este PDF vimos un comentario sobre la falta parámetros POST con Webwasher®

WebWasher - Transparent Authentication Guide

Notas sobre algunas trampas

Tenga en cuenta que hay algunas trampas que se deben tener en cuenta al establecer Autenticación transparente:

Las solicitudes POST fallarán si el servidor ICAP envía una redirección al servidor de autenticación. Sin embargo, esto solo afecta la renovación del mapeo, ya que para el navegador la solicitud fue exitosa y el cuerpo del POST no se enviará nuevamente después de la redirección final.

Nos gustaría saber si hay alguna solución que no sea utilizar solo GET en lugar de POST. También estaríamos aquí si otros sitios tuvieran problemas con la falta de datos de POST y cuál es la conclusión a la que llegaron.

¿Hay alguna otra razón por la cual los datos POST no se envían?

Respuesta

2

He tenido problemas con el servidor proxy de Microsoft que no funciona bien con las solicitudes web.

Tuve que recurrir a forzar HTTP/1.0 y establecer la propiedad KeepAlive en falso.

Hay algo acerca de la forma en que funciona la autenticación NTLM que hace que el cuerpo se envíe esporádicamente.

He añadido esto a muchos de mi Web solicita

protected override WebRequest GetWebRequest(Uri uri) 
{ 
    HttpWebRequest webRequest = (HttpWebRequest) base.GetWebRequest(uri); 

    webRequest.KeepAlive = false; 
    webRequest.ProtocolVersion=HttpVersion.Version10; 
    return webRequest; 
} 

Espero que esto ayude!

+0

hmm, no estamos usando NTLM, pero creo que su sugerencia apunta a la dirección correcta. – Janning

-1

No los que se ajustan a la spec:

Algunos métodos HTTP debe causar una memoria caché para invalidar una entidad. ... POSTAL

(HTTP/'Aplicaciones no debe caché respuestas a una solicitud POST' 1.0 estados de especificaciones).

Pero hay MUCHO código mal escrito.

¿Qué encabezados incluye en las respuestas a los POST en las URL?

+0

No depende de nuestras cabeceras, ni se relaciona con la especificación. A veces funciona, a veces no funciona. Parece que tiene que ver con los servidores proxy incorrectos, como webwasher. Por lo tanto, preferiría votar esta nota ya que no está relacionada con mi pregunta y es inútil. – Janning

0

No es realmente una respuesta, supongo, pero llegué aquí porque tuvimos un problema similar. Inicialmente, pensamos que se debía a que los clientes eran móviles, ya que este era un tema común, pero ahora nos hemos dado cuenta de que el denominador común son los apoderados.

Ahora mostramos un http 400 cuando sucede.

Aquí hay algunos de los proxies con los que hemos tenido problemas. La publicación de ellos para dirigir la googler informal aquí:

  • 1.1 ACISA02S, 1.1 abc:3328 (squid/2.6.STABLE21)
  • 1.1 ipcop00.cat.local:8000 (squid/2.6.STABLE21)
  • 1.1 PRXTGLSRV01
  • 1.1 ISA
Cuestiones relacionadas