Red de conocimiento informático - Conocimiento informático - Cómo resolver el problema de los valores de sesión inconsistentes en el acceso Ajax y la diferencia entre el protocolo HTTP GET y POST

Cómo resolver el problema de los valores de sesión inconsistentes en el acceso Ajax y la diferencia entre el protocolo HTTP GET y POST

Este artículo presenta principalmente la solución al valor de sesión inconsistente del acceso Ajax y la diferencia entre GET y POST en el protocolo HTTP. Los amigos que lo necesiten pueden consultarlo.

Hoy, estoy creando una barra de progreso cuando. Encontré un problema, almacené un contador en la sesión Cuando se capturó un dato, capturé el valor + 1, y luego la recepción obtuvo el valor de la sesión cada 3 segundos, pero el problema surgió en FF. , los valores obtenidos son normales, pero en IE, los valores son siempre los valores anteriores. Solo cuando se vuelve a abrir la página se puede obtener el último valor de la sesión:

Lo siguiente es mío. código de proBar.jsp El código de jsp:

Luego agregué un nuevo fragmento de código a proBar.jsp:

Lo que hice fue agregar un nuevo fragmento de código a proBar. jsp:

Luego, cambié GET a POST y funcionó.

PD: Acerca de HTTP GET y POST

HTTP define diferentes métodos para interactuar con el servidor. Hay cuatro métodos básicos, a saber, GET, POST, PUT y DELETE. URL es el nombre completo del descriptor de recursos. Podemos entenderlo de esta manera: una dirección URL se utiliza para describir un recurso en la red, y GET, POST, PUT y DELETE de HTTP corresponden a los cuatro tipos de inspección, cambio y control de recursos. operación de adición y eliminación. Aquí, todos deben tener una comprensión general. GET se usa generalmente para obtener/consultar información de recursos, y POST generalmente se usa para actualizar información de recursos.

1. Según la especificación HTTP, GET se utiliza para obtener información y debe ser seguro e idempotente.

(1). La llamada seguridad significa que la operación se utiliza para obtener información, no para modificar información. En otras palabras, las solicitudes GET generalmente no tienen efectos secundarios. Es decir, simplemente obtiene información sobre el recurso, tal como una consulta a una base de datos, sin modificar, agregar datos ni afectar el estado del recurso.

*Nota: Seguridad aquí sólo significa no modificar la información.

(2). La pereza significa que múltiples solicitudes a la misma URL deberían devolver los mismos resultados.

La impotencia (idempotente, idempotencia) es un concepto matemático o informático que se encuentra comúnmente en el álgebra abstracta.

La definición de idempotencia es la siguiente:

Para una operación unimodal, si para todos los números en el rango de operación, el resultado de ejecutar la operación varias veces es el mismo que el resultado de ejecutar la operación una vez Si son iguales, la operación se llama idempotente. Por ejemplo, en la operación de valor absoluto, en el conjunto de números reales, existe la situación abs(a)=abs(abs(a)).

Para operaciones binomiales, se requiere que cuando los dos valores que participan en la operación sean iguales, si el resultado de la operación es igual a los dos valores que participan en la operación , la operación se llama operación idempotente, como encontrar dos números. La función del valor máximo tiene operación idempotente en el conjunto de números reales, es decir, max (x, x) = x.

Sin embargo, en aplicaciones prácticas, las 2 reglas anteriores no son tan estrictas. Ejemplos de citar artículos de otras personas: por ejemplo, la portada de un sitio web de noticias se actualiza constantemente. Aunque la segunda solicitud devolverá un lote diferente de noticias, la operación todavía se considera segura e idempotente porque siempre devuelve las noticias actuales. Básicamente, si nuestro objetivo es garantizar que cuando un usuario abre un enlace, nada haya cambiado en el recurso desde su perspectiva, es suficiente.

2. Según la especificación HTTP, POST representa una solicitud que se puede modificar para cambiar los recursos en el servidor.

Continuando con el ejemplo anterior: o tome las noticias en el sitio web como ejemplo, los lectores deben publicar sus comentarios sobre las noticias a través de POST, porque después de enviar los comentarios, los recursos del sitio web son diferentes, o. Los recursos han sido modificados.

Pero en la operación real, muchas personas no siguen las especificaciones HTTP al hacerlo. Hay muchas razones para este problema, como:

1. Mucha gente codicia Es conveniente. Use GET para actualizar recursos, porque usar POST debe ir al FORM (formulario), lo cual es un poco problemático.

2. Las operaciones de adición, eliminación, cambio e inspección de recursos se pueden completar mediante GET/POST sin utilizar PUT y DELETE.

3.Otra razón es que los primeros diseñadores del marco Web MVC no vieron ni diseñaron conscientemente las URL como recursos abstractos, por lo que esto generó un problema más grave, es decir, el marco Web MVC tradicional básicamente, solo el Se admiten los métodos GET y POST HTTP, pero no se admiten los métodos PUT y DELETE.

*Acerca de MVC:

MVC existía originalmente en programas de escritorio, donde M se refiere al modelo de datos, V se refiere a la interfaz de usuario y C es el controlador. El propósito de usar MVC es separar el código de implementación de M y V para que se puedan usar diferentes representaciones del mismo programa.

Los 3 puntos anteriores generalmente describen el estilo antiguo (que no se adhiere estrictamente a la especificación HTTP). Con el desarrollo de la arquitectura, ahora existe REST (RepresentationalState Transfer, transferencia de estado representacional). un conjunto de soporte para HTTP El nuevo estilo estandarizado no se discutirá aquí. Puede consultar "Servicios web RESTful".

Veamos la diferencia entre GET y POST desde una imagen superficial:

(1) La diferencia entre GET y POST:

(2). La diferencia entre GET y POST:

(3). En primer lugar, "GET solo puede enviar hasta 1024 bytes de datos". Debido a que GET envía datos a través de URL, la cantidad de datos que GET puede enviar. es lo mismo que La longitud de la URL está directamente relacionada. De hecho, las URL no tienen restricciones de parámetros y la especificación del protocolo HTTP no limita la longitud de las URL. Este límite lo imponen navegadores y servidores específicos; el límite de IE en la longitud de la URL es 2083 bytes (2K+35). Para otros navegadores, como Netscape, Firefox, etc., en teoría no existe un límite de longitud y el límite depende de la compatibilidad del sistema operativo. Tenga en cuenta que este límite es la longitud de toda la URL, no solo la longitud de los datos del valor del parámetro.

(2) En teoría, POST no tiene límite de tamaño y la especificación del protocolo HTTP no limita el tamaño. Por lo tanto, es inexacto decir que el volumen de datos POST tiene un límite de tamaño de 80K/100K. No hay límite para el volumen de datos POST. Lo que sí está limitado son las capacidades del controlador del servidor.

Para programas ASP, el objeto de solicitud maneja un límite de longitud de datos de 100 K para cada campo del formulario. La lectura binaria no tiene esta limitación.

Al expandirse a IIS 6.0, Microsoft aumentó este límite por razones de seguridad.

También debemos tener en cuenta:

1). El tamaño de datos POST ASP predeterminado de IIS 6.0 tiene un tamaño máximo de 200 KB y cada campo del formulario está limitado a 100 KB.

2).IIS 6.0 tiene un tamaño máximo de archivo de carga predeterminado de 4 MB.

3). El tamaño máximo predeterminado del encabezado de solicitud en IIS 6.0 es 16 KB.

3).>

IIS 6.0 no tenía estas restricciones antes.

Por lo tanto, los 80K y 100K anteriores pueden ser solo los valores predeterminados (nota: no he confirmado los parámetros para IIS4 e IIS5), pero, por supuesto, puede configurarlos usted mismo. Dado que cada versión de IIS tiene diferentes valores predeterminados, consulte la documentación de configuración de IIS correspondiente.

3. En ASP, el servidor utiliza Request.QueryString para obtener los parámetros de solicitud GET y Request.Form para obtener los parámetros de solicitud POST.

En JSP, use request.getParameter(\"XXXX\") para obtenerlo. Aunque también existe un método request.getQueryString() en jsp, use request.getParameter(\"XXXX\" en. JSP), utilice el método request.getParameter(). método getQueryString(), pero es más problemático de usar. Por ejemplo: pase un test.jsp?name=hyddd&password=hyddd y use request.getQueryString() para obtener: name=hyddd&password=hyddd. En PHP, puede usar $_GET y $_POST para obtener datos en solicitudes GET y POST respectivamente, mientras que $_REQUEST puede obtener datos en solicitudes GET y POST. Vale la pena señalar que existen peligros ocultos al usar REQUEST en JSP y $_REQUEST en PHP, que se resumirán en el próximo artículo.

4.La seguridad POST es mayor que la seguridad GET.

Nota: La seguridad mencionada aquí no es el mismo concepto que la "seguridad" mencionada en GET arriba. El significado de "seguridad" anterior es solo que los datos no se modifican, y el significado de seguridad aquí es el significado de seguridad real. Por ejemplo: al enviar datos a través de GET, el nombre de usuario y la contraseña aparecerán en texto sin cifrar en la URL. , porque (1) la página de inicio de sesión puede estar almacenada en caché por el navegador, (2) otros ven el historial del navegador y luego otros pueden obtener su número de cuenta y contraseña. Además, el uso de GET para enviar datos puede provocar ataques de falsificación de solicitudes entre sitios.

En resumen, Get es una solicitud para enviar datos al servidor y Post es una solicitud para enviar datos al servidor. En FORM (formulario), el método predeterminado es "GET". GET ¡Es simplemente un mecanismo de envío diferente al POST, en lugar de recibirlo y enviarlo uno a la vez!

Lo anterior es lo que he recopilado para usted. Espero que le resulte útil en el futuro.

Artículos relacionados:

Implementación de la función de carga de archivos basada en Ajax y HTML5 MVC

Cómo solucionar el problema del fallo de ajax en el navegador Google Chrome

Basado en ajax, puedes hacer clic para cargar más sin actualizar esta página