HTTP protocol for communication

The HTTP protocol is a communication protocol commonly used on the Internet and belongs to the application layer protocol in the division of the OSI standard. The commonly known TCP / UDP communication protocol is the transport layer protocol. HTTP is an encapsulation of TCP communication. The HTTP protocol is divided into request message format definition and response message format definition. The request packet shall contain the request header and content, and the response packet shall contain the status header and content. Reference ( https://www.cnblogs.com/jiu0821/p/5641600.html )

Request message content Detailed description Examples
Request line The request line is composed of three parts: method field, URL field and HTTP protocol version field, and they are separated by spaces. Common HTTP request methods are GET, POST, HEAD, PUT, DELETE, OPTIONS, TRACE, CONNECT;

GET / HTTP/1.1

Host: www.google.com

 

The specific URL needs to be resolved by DNS, the lower layer needs to pass through TCP socket transmission, network layer addressing, link layer link, physical layer transmission check and so on a series of operations.

Request header The request header consists of keyword / value pairs, one pair per line. The keywords and values ​​are separated by a colon ":". The request header informs the server that there is information about the client request
User-Agent: The type of browser that generated the request. 
For example: User-Agent: Mozilla / 5.0 (Windows NT 6.1; WOW64) AppleWebKit / 537.1 (KHTML, like Gecko) Chrome / 22.0.1207.1 Safari / 537.1

This is often used in crawlers, through the use of proxies for accessing websites with anti-climbing servers.

Cookie information is also here.

 

Accept: A list of content types recognized by the client.

Host: The requested host name, allowing multiple domain names to be in the same IP address, that is, a virtual host

Blank line After the last request header is a blank line, send a carriage return and a line feed to inform the server that there is no longer a request header  
Request data 请求数据不在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万+

Guess you like

Origin blog.csdn.net/wangyhwyh753/article/details/89450718