HTTP的交互流程简单来讲就是客户端与服务器端的通信,包括客户端对服务器端的请求以及服务器端对客户端的响应。

首先客户端与服务器端建立一个连接,三次握手经历完成之后才能建立一个稳定可靠的连接。

这里用到JavaSE在网络阶段的基本知识:“三次握手”。第一次握手:客户端给服务器端发送一个syn的标志位;服务器端接收到syn后会返回一个ack(相当于一个回调的机制),同时还有一个服务器端的syn;客户端接收服务器端发送的syn后会再次给服务器端发送一个ack,这样才算完成三次握手。

然后客户端就可以向服务器端发送请求并且服务器端也会给客户端响应了。在HTTP1.1后,他们之间的连接就是可持续的连接,也叫作常连接。客户端可以向服务器端发送多个请求并且得到多个响应。

当客户端不再发送请求给服务器端并且服务器端没有响应发送给客户端时,就可以断开连接了。

这里面有一个四次分手的原则。客户端向服务器端发送断开连接的请求;服务器端接收到请求后,返回可以断开连接的请求,客户端断开连接并且释放资源;服务器端向客户端发送断开连接的信息;客户端向服务器端发送同意断开连接的信息,服务器端断开连接释放资源。

打开网易新闻 查看精彩图片

首先,HTTP协议是一个规范。一定会限制请求的格式。
http协议的请求格式分为4个部分:请求行、请求头、空行、请求体。

请求行包括三个属性。描述对应的请求的时候,最精确的形式就是K-V键值对的格式。
请求头中也是一堆的K-V数据。包含头信息中的一些附加信息(比如客户端允许接收的信息格式)。
空行的作用就是分割请求头和请求体。
请求体:当发送某一个请求的时候,请求后面可以加一些用户定义的参数(比如表单)。以K=V的形式发送给后台。

打开网易新闻 查看精彩图片

样例解析:

GET /department/87423/users HTTP/1.1 请求方法 统一资源定位符 协议版本 host:www.xxx.com 域名 accept:applaction/json 客户端允许接收的资源的格式 accept-encoding:gzip.deflate,br 客户端允许接收的节码格式 accept-language:zh-CN,zh:q=0.9 语言 user-agent:AppleWebKit/537.36(KHTML,like Gecko)Chrome/72.0.3626.109 浏览器对应的版本 name=flyhero 请求体

接下来以Firefox浏览器为示例根据实际讲解一下。

打开网易新闻 查看精彩图片
打开网易新闻 查看精彩图片
打开网易新闻 查看精彩图片

刷新网页,就会看见一大堆的GET。

点击一个GET,就会看见右边弹窗有一堆关于请求头和响应头的描述。

打开网易新闻 查看精彩图片

也可以在这里查看原始头,其中包含很多的关于请求头的信息。

打开网易新闻 查看精彩图片

最常用的是GET和POST。

GET和POST请求方式的区别:

  1. 1. get请求参数是直接显示在地址栏的,而post在地址栏不显示。
  2. 2. get方式不安全,post安全。
  3. 3. get请求参数是有长度限制的,post没有长度限制。