Protocolo HTTP para la comunicación

El protocolo HTTP es un protocolo de comunicación comúnmente utilizado en Internet y pertenece al protocolo de la capa de aplicación en la división del estándar OSI. El protocolo de comunicación TCP / UDP comúnmente conocido es el protocolo de capa de transporte. HTTP es una encapsulación de comunicación TCP. El protocolo HTTP se divide en definición de formato de mensaje de solicitud y definición de formato de mensaje de respuesta. El paquete de solicitud contendrá el encabezado y el contenido de la solicitud, y el paquete de respuesta contendrá el encabezado y el contenido del estado. Referencia ( https://www.cnblogs.com/jiu0821/p/5641600.html )

Solicitar contenido del mensaje Descripción detallada Ejemplos
Línea de solicitud La línea de solicitud se compone de tres partes: campo de método, campo de URL y campo de versión del protocolo HTTP, y están separados por espacios. Los métodos comunes de solicitud HTTP son GET, POST, HEAD, PUT, DELETE, OPTIONS, TRACE, CONNECT;

GET / HTTP / 1.1

Anfitrión: www.google.com

 

La URL específica debe ser resuelta por DNS, la capa inferior debe pasar a través de la transmisión de socket TCP, el direccionamiento de la capa de red, el enlace de la capa de enlace, la verificación de la transmisión de la capa física, etc., en una serie de operaciones.

Encabezado de solicitud El encabezado de la solicitud consta de pares de palabras clave / valor, un par por línea. Las palabras clave y los valores están separados por dos puntos ":". El encabezado de la solicitud informa al servidor que hay información sobre la solicitud del cliente
User-Agent: el tipo de navegador que generó la solicitud. 
Por ejemplo: User-Agent: Mozilla / 5.0 (Windows NT 6.1; WOW64) AppleWebKit / 537.1 (KHTML, like Gecko) Chrome / 22.0.1207.1 Safari / 537.1

Esto se usa a menudo en rastreadores, mediante el uso de servidores proxy para acceder a sitios web con servidores anti-escalada.

La información sobre cookies también está aquí.

 

Aceptar: una lista de tipos de contenido reconocidos por el cliente.

Host: el nombre de host solicitado, que permite que varios nombres de dominio estén en la misma dirección IP, es decir, un host virtual

Línea en blanco Después de que el último encabezado de solicitud sea una línea en blanco, envíe un retorno de carro y un avance de línea para informar al servidor que ya no hay un encabezado de solicitud  
Solicitar datos 请求数据不在GET方法中使用,而是在POST方法中使用。POST方法适用于需要客户填写表单的场合。与请求数据相关的最常使用的请求头是Content-Type和Content-Length 此部分可以省略不包含

 

响应报文格式如下:

响应报文内容 详细说明 举例
状态行

HTTP-Version Status-Code Reason-Phrase CRLF

其中,HTTP-Version表示服务器HTTP协议的版本;Status-Code表示服务器发回的响应状态代码;Reason-Phrase表示状态代码的文本描述。状态代码由三位数字组成,第一个数字定义了响应的类别,且有五种可能取值。

  • 1xx:指示信息--表示请求已接收,继续处理。
  • 2xx:成功--表示请求已被成功接收、理解、接受。
  • 3xx:重定向--要完成请求必须进行更进一步的操作。
  • 4xx:客户端错误--请求有语法错误或请求无法实现。
  • 5xx:服务器端错误--服务器未能实现合法的请求。
  • 200 OK:客户端请求成功。
  • 400 Bad Request:客户端请求有语法错误,不能被服务器所理解。
  • 401 Unauthorized:请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用。
  • 403 Forbidden:服务器收到请求,但是拒绝提供服务。
  • 404 Not Found:请求资源不存在,举个例子:输入了错误的URL。
  • 500 Internal Server Error:服务器发生不可预期的错误。
  • 503 Server Unavailable:服务器当前不能处理客户端的请求,一段时间后可能恢复正常,举个例子:HTTP/1.1 200 OK(CRLF)。

 

消息报头 消息报头由关键字/值对组成,每行一对,关键字和值用英文冒号“:”分隔。消息报头用于表示服务器端状态信息
例子Date: Sat, 31 Dec 2005 23:59:59 GMT
Content-Type: text/html;charset=ISO-8859-1
Content-Length: 122

响应头可能包括Location:Location响应报头域用于重定向接受者到一个新的位置。例如:客户端所请求的页面已不存在原先的位置,为了让客户端重定向到这个页面新的位置,服务器端可以发回Location响应报头后使用重定向语句,让客户端去访问新的域名所对应的服务器上的资源;

  Server:Server 响应报头域包含了服务器用来处理请求的软件信息及其版本。它和 User-Agent 请求报头域是相对应的,前者发送服务器端软件的信息,后者发送客户端软件(浏览器)和操作系统的信息。

  Vary:指示不可缓存的请求头列表;

  Connection:连接方式;

  对于请求来说:close(告诉 WEB 服务器或者代理服务器,在完成本次请求的响应后,断开连接,不等待本次连接的后续请求了)。keepalive(告诉WEB服务器或者代理服务器,在完成本次请求的响应后,保持连接,等待本次连接的后续请求);

  对于响应来说:close(连接已经关闭); keepalive(连接保持着,在等待本次连接的后续请求); Keep-Alive:如果浏览器请求保持连接,则该头部表明希望WEB 服务器保持连接多长时间(秒);例如:Keep-Alive:300;

  WWW-Authenticate:WWW-Authenticate响应报头域必须被包含在401 (未授权的)响应消息中,这个报头域和前面讲到的Authorization 请求报头域是相关的,当客户端收到 401 响应消息,就要决定是否请求服务器对其进行验证。如果要求服务器对其进行验证,就可以发送一个包含了Authorization 报头域的请求;

Cookie的信息也是放在这里的。

空行 用以分割消息报头和响应包体  
响应包体 该部分是服务器响应内容 需要进行解析处理的部分,在python中可以将其转换为xml格式。

HTTP协议目前有0.9版本,1.0版本,1.1版本和2.0版本,这几个版本的区别是长连接的问题具体可参考https://www.cnblogs.com/yunman/p/6073367.html

HTTP协议本质还是TCP协议,需要建立连接。但是建立连接之后,什么时候结束就是一个问题了。

在TCP协议中,如果客户端(浏览器)没有数据请求之后,就向服务器发送断开连接请求,而服务器也没有数据通信,服务器向客户端(浏览器)发送通信断开请求,客户端确认之后这个通信就断开了。

短连接就是通信任务完成一次就中断,长连接就是一定时间内维持连接。详细了解请参考https://www.cnblogs.com/gotodsp/p/6366163.html。在通信连接期间,如果采用短连接,便于管理,但频繁的连接请求或中断会导致,再次连接数据将不会产生记忆功能。最典型的就是游客登录界面选择物品加入购物车的过程,短连接加上HTTP的无状态性会导致每次选取的物品放入了不同的购物车。而如果采用长连接,就可以解决上述问题,通过设定HTTP协议头Connection:Keep-Alive.但是长连接会导致服务器端的资源一直被占用,进而增加服务器端的负担。为了解决这个问题,服务器端将数据状态存入cookie来记录客户端,同时将这些数据放入客户端。当该客户端再次访问服务器时就将该Cookie信息加入到请求头中,这样就实现了HTTP访问的有记忆性,实现完整的会话。Session机制也是为了完成用户跟踪 一种方式,只不过记载信息放在了服务器端。两种机制可参考https://www.cnblogs.com/andy-zhou/p/5360107.html.

发布了42 篇原创文章 · 获赞 4 · 访问量 1万+

Supongo que te gusta

Origin blog.csdn.net/wangyhwyh753/article/details/89450718
Recomendado
Clasificación