HTTP协议

##概念

       HTTP协议-超文本传输协议,BS结构的通讯协议,规定了传递数据的相关格式。

       HTTP协议是应用层协议,要求传输层协议必须建立在可靠传输协议
基础上,所以,通常底层的传输层协议为TCP协议。

##特点

       协议规定了客户端与服务端通讯的方式:一次请求一次响应的模式。
即:客户端发起请求(request),服务端在接收请求后予以处理并
给予响应(response)。
       所以,在这种方式下服务端永远不会主动向客户端发送任何数据。

-------------------------------------------------------------------------------

##协议区别

HTTP协议现在基本都使用1.1版本。而1.0与1.1一个比较大的变动
在于:
1.0:一次会话中只有一次请求与一次响应。即:客户端发起TCP连接
后会向服务端发送一次请求,当服务端处理并予以响应后即与客户端
断开连接。

1.1:一次会话中可进行多次请求与响应。即:客户端发起TCP连接后
可以与服务端进行多次请求与响应后才断开连接(在当今页面内容非
常丰富的情况下,这种方式的响应速度更快,资源开销更小)。

-------------------------------------------------------------------------------

##HTTP协议中的请求(Request)定义:


      请求是客户端发送给服务端的内容,一个请求包含三部分:
请求行,消息头,消息正文。

      请求行与消息头都是由字符组成的文本数据,而消息正文部分则
是由2进制的数据组成。


       在HTTP协议中,请求行与消息头对应的文本内容必须符合ISO8859-1
字符集所规定的字符(这是一个欧洲字符集,里面不支持中文。)。

1:请求行( method url protocol(CRLF) )


     请求行是一行字符串(以CRLF结尾)。描述了客户端使用的HTTP协议
版本,想请求的资源的路径,和请求的方式。

格式:
     method url protocol(CRLF)
     请求方式 资源路径 协议版本
例如:
     GET /index.html HTTP/1.1(CRLF)      CR:回车符,对应asc编码为:13       含义是将光标返回到本行开始的位置

     LF:换行符                                     对应asc编码为:10                       含义是光标位置不变,向下移动一行


2:消息头( name: value(CRLF) )


       消息头由若干行组成,每个消息头是一行字符串,格式为:
name: value(CRLF)
      最后一个消息头之后会单独存在一个CRLF,表示消息头部分结束。
消息头是客户端发送给服务端的一些附加信息,有的说明客户端的
信息,有的是用来描述通讯中传递数据的方式,有的是说明消息正
文的长度以及内容等等。
例如:
      Host: localhost:8088(CRLF)
      Connection: keep-alive(CRLF)
      Upgrade-Insecure-Requests: 1(CRLF)
      User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.162          Safari/537.36(CRLF)
      Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8(CRLF)
      Accept-Encoding: gzip, deflate, br(CRLF)
      Accept-Language: zh-CN,zh;q=0.9(CRLF)(CRLF)


3:消息正文


      消息正文是2进制数据,是客户端发送过来的用户提交的数据
可能是用户的表单信息,上传的附件等。
      一个请求中不一定包含消息正文。判断一个请求是否包含消息正文
的依据是看该请求是否包含以下两个头:
      Content-Type,Content-Length.这两个头若出现,那么该请求是
包含消息正文的,其中Content-Type是用来说明消息正文的数据
是什么内容,而Content-Length是用来说明消息正文总共还有多少
个字节

可以通过抓包看到:

GET /index.html HTTP/1.1(CRLF)
Host: localhost:8088(CRLF)
Connection: keep-alive(CRLF)
Upgrade-Insecure-Requests: 1(CRLF)
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.162 Safari/537.36(CRLF)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8(CRLF)
Accept-Encoding: gzip, deflate, br(CRLF)
Accept-Language: zh-CN,zh;q=0.9(CRLF)(CRLF)

成年人的世界没有那么多的童话,也没有那么多的逆袭。
原文地址:https://www.cnblogs.com/shijinglu2018/p/9589339.html