El método de solicitud HTTP especificado en el protocolo HTTP/1.1 es Opciones, Get, Head, Post, Put, Eliminar, Trace, Connect. Entre ellos, la publicación generalmente se usa para enviar datos al servidor.
Sabemos que el protocolo HTTP se transmite mediante el código ASCII y las especificaciones de la capa de aplicación basadas en el protocolo TCP/IP. Las especificaciones dividen las solicitudes HTTP en tres partes: línea de estado, cabezal de solicitud y asunto de mensajes. Similar a lo siguiente:
<Emod> <repkest-url> <rision> <weaders> <entity-body> </entity-body> </weaders> </verversion> </request-url> </método> </método> </método > </Método>
El acuerdo estipula que los datos presentados por la publicación deben colocarse en el cuerpo de entidad, pero el acuerdo no especifica qué datos deben usarse. De hecho, los desarrolladores pueden determinar el formato del mensaje de mensaje por sí mismos.
Sin embargo, si los datos se envían, es significativo tener éxito en el servidor. El lenguaje general del servidor, como Java y su marco, han creado funciones de análisis automático de formatos de datos comunes. El servidor generalmente se aprende del campo de tipo de contenido en el jefe de solicitud para aprender cómo el tema del mensaje en la solicitud se codifica en la solicitud y luego analiza el sujeto. Entonces, cuando se trata de los esquemas de datos enviados por publicación, contiene dos partes: codificación de temas de tipo contenido y mensaje. Aquí hay una introducción oficial a ellos.
Aplicación/x-www-form-urlencodedEsta debería ser la forma más común de enviar datos. Si los formularios de formulario nativo del navegador, si no se establece el atributo de cifrado, los datos se enviarán mediante la aplicación/x-www-form-urlencoded. La solicitud es similar a la siguiente (el encabezado de solicitud irrelevante se omite en este artículo):
Post http://www.example.com http/1.1content-type: aplicación/x-www-forlem-urlencoded; 5b%5d = 3
En primer lugar, el tipo de contenido se especifica como aplicación/x-www-form-urlencoded; La mayoría de los idiomas del servidor tienen un buen soporte para este método. Por ejemplo, en PHP, Post ['Título'] puede obtener el valor del título.
Muchas veces, cuando enviamos datos con AJAX, también usamos este método. Por ejemplo, el valor predeterminado de JQuery, el valor predeterminado de Type es "Application/X-WWW-Form-URLEncoded; Charset = UTF-8".
Data multipart/formularioEsta es otra forma común de publicar datos. Cuando cargamos archivos con formularios, debemos hacer que el formulario se enciera igual a este valor. Ven directamente a un ejemplo de solicitud:
Publicar http://www.example.com http/1.1content-type: multipart/form-data; --- WebkitFormBoundRgkcby7qhfd3Trwacontent-Disposition: Form-Data;
Este ejemplo es ligeramente complicado. En primer lugar, un límite se usa para dividir diferentes campos. Luego, el tipo de contenido indica que los datos están codificados por Mutipart/Form-Data, ¿cuál es el límite solicitado esta vez? El tema del mensaje se divide en partes similares con una estructura similar de acuerdo con el número de secciones. ). Si el archivo se transmite, también contiene información de tipo de archivo y tipo de archivo. El tema del mensaje finalmente terminó con-boundary-. Para las definiciones detalladas de Mutipart/Form-Data, vaya a RFC1867 para ver.
Este método generalmente se usa para cargar archivos, y el lenguaje del servidor principal también tiene un buen soporte para ello.
Los dos métodos de datos posteriores mencionados anteriormente son el soporte nativo para los navegadores, y los formularios de forma nativa solo admiten estos dos métodos en esta etapa. Sin embargo, a medida que más y más sitios web, especialmente webapp, usan AJAX para la interacción de datos, podemos definir completamente nuevos métodos de envío de datos para brindar más conveniencia al desarrollo.
Aplicación/JSONApplication/JSON, el tipo de contenido, definitivamente no está familiarizado con el encabezado de respuesta. De hecho, más y más personas ahora lo usan como un jefe de solicitud para decirle al mensaje del servidor que el cuerpo principal es una cadena JSON serializada. Debido a la popularidad de las especificaciones de JSON, los principales navegadores, excepto el IE de baja versión, son nativos de JSON.stringify, y el lenguaje del servidor también tiene una función para tratar con JSON, y JSON no encontrará ningún problema.
El formato JSON admite datos estructurados más complicados que los valores clave, lo que también es útil. Recuerdo que cuando hice un proyecto hace unos años, el nivel de datos que necesitaba enviar fue muy profundo. Sin embargo, en ese momento, utilicé la cadena JSON como un valor, y todavía me pusieron en el par de valor clave, y la envié en X-WWW-form-urlencoded.
La función AJAX en AngularJS de Google es enviar la cadena JSON de forma predeterminada. Por ejemplo, el siguiente código:
var data = {'title': 'test', 'sub': [1,2,3]};
La solicitud final es:
Publicar http://www.example.com http/1.1content-type: aplicación/json;
Este esquema puede enviar fácilmente datos estructurados complejos, especialmente adecuados para la interfaz RESTful. Las principales herramientas de embalaje, como las propias herramientas de desarrollador de Chrome, Firebug y Fiddler, mostrarán datos JSON con una estructura de árboles, lo cual es muy amigable. Sin embargo, también hay algunos idiomas de servidor que no han admitido este método. En este momento, debe manejarlo usted mismo: cuando el tipo de contenido es la aplicación/JSON en el encabezado de solicitud, obtenga el flujo de entrada original de php: // entrada y luego json_decode. Algunos marcos de Java han comenzado a hacer.
Por supuesto, AngularJS también se puede configurar para enviar datos con x-www-form-urlencoded.
Texto/XMLXML-RPC (llamada de procedimiento remoto XML). Es una especificación de llamadas remoto que utiliza HTTP como protocolo de transmisión y XML como método de codificación. La solicitud típica de XML-RPC es esta: publicar http://www.example.com http/1.1content-type: text/xml <!-? /Methodname> <amams> <amamr> <valor> <i4> 41 </i4> </value> </amss> </setmetcall>
El protocolo XML-RPC es simple y está lleno de funciones, y la implementación de varios idiomas está disponible. También se usa ampliamente, como la API XML-RPC de WordPress, el servicio de ping del motor de búsqueda, etc. En JavaScript, también hay una biblioteca preparada para admitir la interacción de datos de esta manera, lo que puede admitir los servicios XML-RPC existentes. Sin embargo, personalmente creo que la estructura XML todavía está demasiado hinchada.