首先作为发送真个客户端在运用层(HTTP 协议)发出一个想看某个 Web 页面的 HTTP 要求。
接着,为了传输方便,在传输层(TCP 协议)把从运用层处收到的数据(HTTP 要求报文)进行分割,并在各个报文上打上标记序号及端口号后转发给网络层。
在网络层(IP 协议),增加作为通信目的地的 MAC 地址后转发给链路层。这样一来,发往网络的通信要求就准备完好了。
吸收真个做事器在链路层吸收到数据,按序往上层发送,一贯到运用层。当传输到运用层,才能算真正吸收到由客户端发送过来的 HTTP要求。
3.Http数据流传输步骤
HTTP通信机制是在一次完全的 HTTP 通信过程中,客户端与做事器之间将完成下列7个步骤:
1.建立 TCP 连接
在HTTP事情开始之前,客户端首先要通过网络与做事器建立连接,该连接是通过 TCP 来完成的,该协议与 IP 协议共同构建 Internet,即著名的 TCP/IP 协议族,因此 Internet 又被称作是 TCP/IP 网络。HTTP 是比 TCP 更高层次的运用层协议,根据规则,只有低层协议建立之后,才能进行高层协议的连接,因此,首先要建立 TCP 连接,一样平常 TCP 连接的端口号是80
2.客户端向做事器发送要求命令
一旦建立了TCP连接,客户端就会向做事器发送要求命令 例如:GET/sample/hello.jsp HTTP/1.1
3.客户端发送要求头信息
客户端发送其要求命令之后,还要以头信息的形式向做事器发送一些别的信息,之后客户端发送了一空缺行来关照做事器,它已经结束了该头信息的发送
4.做事器应答
客户端向做事器发出要求后,做事器会客户端返回相应 例如: HTTP/1.1 200 OK 相应的第一部分是协议的版本号和相应状态码
5.做事器返回相应头信息
正如客户端会随同要求发送关于自身的信息一样,做事器也会随同相应向用户发送关于它自己的数据及被要求的文档
6.做事器向客户端发送数据
做事器向客户端发送头信息后,它会发送一个空缺行来表示头信息的发送到此为结束,接着,它就以 Content-Type 相应头信息所描述的格式发送用户所要求的实际数据
7.做事器关闭 TCP 连接
一样平常情形下,一旦做事器向客户端返回了要求数据,它就要关闭 TCP 连接,然后如果客户端或者做事器在其头信息加入了这行代码 Connection:keep-alive ,TCP 连接在发送后将仍旧保持打开状态,于是,客户端可以连续通过相同的连接发送要求。保持连接节省了为每个要求建立新连接所需的韶光,还节约了网络带宽。
4.http数据格式4.1数据要求格式
实例:
4.2数据相应格式
实例:
4.3通用首部行的字段解释首部字段名 | 解释 | Cache-Control掌握缓存的行为Connection逐挑首部、连接的管理Date创建报文的日期韶光Pragma报文指令,http1.1之前的兼容字段Trailer报文末端的首部一览Transfer-Encoding指定报文主体的传输编码办法Upgrade升级为其他协议Via代理做事器的干系信息Warning缺点关照4.3.1 Cache-Control
缓存要求指令
指令 | 参数 | 解释 | no-cache无逼迫向做事器再次验证no-store无不缓存要求或相应的任何内容max-age = [秒]必需相应的最大Age值max-stale( =[秒])可省略吸收已过期的相应min-fresh = [秒]必需期望在指定时间内的相应仍有效no-transform无代理不可变动媒体类型only-if-cached无从缓存获取资源cache-extension-新指令标记(token)
缓存相应指令
指令 | 参数 | 解释 | public无可向任意方供应相应的缓存private可省略仅向特定用户返回相应no-cache可省略缓存前必须先确认其有效性no-store无不缓存要求或相应的任何内容no-transform无代理不可变动媒体类型must-revalidate无可缓存但必须再向源做事器进行确认proxy-revalidate无哀求中间缓存做事器对缓存的相应有效性再进行确认max-age = [秒]必需相应的最大Age值s-maxage = [秒]必需公共缓存做事器相应的最大Age值cache-extension-新指令标记(token)4.3.2 Connection
指令 | 解释 | Upgrade可掌握不再转发给代理的首部字段,即删除后再转发closeHTTP/1.1 版本的默认连接都是持久连接。当做事器端想明确断开连接时,则指定 Connection首部字段的值为 close。no-cacheHTTP/1.1 之前的 HTTP 版本的默认连接都是非持久连接4.3.3 Data
Date: Mon, 10 Jul 2017 15:50:06 GMT HTTP/1.1 协议利用在 RFC1123 中规定的日期韶光的格式。
4.4要求首部行的字段解释
首部字段名 | 解释 | 实例 | Accept用户代理可处理的媒体类型Accept: text/html, application/xhtml+xml, application/xml; q=0.5(q是优先级别)Accept-Charset优先的字符集Accept-Charset: iso-8859-5, unicode-1-1; q=0.8Accept-Encoding优先的内容编码Accept-Encoding: gzip, deflateAccept-Language优先的措辞(自然措辞)Accept-Lanuage: zh-cn,zh;q=0.7,en=us,en;q=0.3AuthorizationWeb认证信息Authorization: Basic ldfKDHKfkDdasSAEdasd==Expect期待做事器的特定行为Expect: 100-continueFrom用户的电子邮箱地址From: Deeson_Woo@163.comHost要求资源所在做事器Host: www.jianshu.comIf-Match比较实体标记(ETag)If-Match: \"
大众123456\"大众If-Modified-Since比较资源的更新韶光If-Modified-Since: Mon, 10 Jul 2017 15:50:06 GMTIf-None-Match比较实体标记(与 If-Macth 相反)If-None-Match: \"大众123456\"大众If-Range资源未更新时发送实体 Byte 的范围要求If-Range: \
公众123456\"大众If-Unmodified-Since比较资源的更新韶光(与 If-Modified-Since 相反)If-Unmodified-Since: Mon, 10 Jul 2017 15:50:06 GMTMax-Forwards最大传输逐跳数Max-Forwards: 10Proxy-Authorization代理做事器哀求客户真个认证信息Proxy-Authorization: Basic dGlwOjkpNLAGfFY5Range实体的字节范围要求Range: bytes=5001-10000Referer对要求中 URI 的原始获取方Referer: http://www.sample.com/index.htmlTE传输编码的优先级TE: gzip, deflate; q=0.5User-AgentHTTP 客户端程序的信息User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:13.0) Gecko/201001014.5相应首部行的字段解释
首部字段名 | 解释 | 实例 | Accept-Ranges是否接管字节范围要求Accept-Ranges: bytesAge推算资源创建经由韶光Age: 1200ETag资源的匹配信息ETag: \公众usagi-1234\"大众Location令客户端重定向至指定 URILocation: http://www.sample.com/sample.htmlProxy-Authenticate代理做事器对客户真个认证信息Proxy-Authenticate: Basic realm=\"大众Usagidesign Auth\"大众Retry-After对再次发起要求的机遇哀求Retry-After: 180Server HTTP做事器的安装信息Server: Apache/2.2.6 (Unix) PHP/5.2.5Vary代理做事器缓存的管理信息Vary: Accept-LanguageWWW-Authenticate做事器对客户真个认证信息WWW-Authenticate: Basic realm=\"大众Usagidesign Auth\公众4.6实体首部
首部字段名 | 解释 | 实例 | Allow资源可支持的 HTTP 方法Allow: GET, HEADContent-Encoding实体主体适用的编码办法Content-Encoding: gzip•紧张采取这 4 种内容编码的办法(gzip、compress、deflate、identity)。Content-Language实体主体的自然措辞Content-Language: zh-CNContent-Length实体主体的大小(单位:字节)Content-Length: 15000Content-Location替代对应资源的 URIContent-Location: http://www.sample.com/index.htmlContent-MD5实体主体的报文择要Content-MD5: OGFkZDUwNGVhNGY3N2MxMDIwZmQ4NTBmY2IyTY==Content-Range实体主体的位置范围Content-Range: bytes 5001-10000/10000Content-Type实体主体的媒体类型Content-Type: text/html; charset=UTF-8Expires实体主体过期的日期韶光Expires: Mon, 10 Jul 2017 15:50:06 GMTLast-Modified资源的末了修正日期韶光Last-Modified: Mon, 10 Jul 2017 15:50:06 GMT4.7HTTP 相应状态码
指令 | 种别 | 缘故原由短语 | 实例 | 1xxInformational(信息性状态码)吸收的要求正在处理2xxSuccess(成功状态码)要求正常处理完毕200 OK 204 No Content 206 Partial Content3xxRedirection(重定向状态码)须要进行附加操作以完成要求301 Moved Permanently 302 Found 303 See Other4xxClient Error(客户端缺点状态码)做事器无法处理要求400 Bad Request 401 Unauthorized 403 Forbidden 404 Not Found5xxServer Error(做事器缺点状态码)做事器处理要求出错500 Internal Server Error 503 Service Unavailable4.8浏览器流程
5.三次握手
第一次握手:客户端将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给做事器端,客户端进入SYN_SENT状态,等待做事器端确认。
第二次握手:做事器端收到数据包后由标志位SYN=1知道客户端要求建立连接,做事器端将标志位SYN和ACK都置为1,ack=J+1,随机产生一个值seq=K,并将该数据包发送给客户端以确认连接要求,做事器端进入SYN_RCVD状态。
第三次握手:客户端收到确认后,检讨ack是否为J+1,ACK是否为1,如果精确则将标志位ACK置为1,ack=K+1,并将该数据包发送给做事器端,做事器端检讨ack是否为K+1,ACK是否为1,如果精确则连接建立成功,客户端和做事器端进入ESTABLISHED状态,完成三次握手,随后客户端与做事器端之间可以开始传输数据了。
6.四次握手
第一次挥手:客户端发送一个FIN=M,用来关闭客户端到做事器真个数据传送,客户端进入FIN_WAIT_1状态。意思是说\公众我客户端没有数据要发给你了\"大众,但是如果你做事器端还有数据没有发送完成,则不必急着关闭连接,可以连续发送数据。
第二次挥手:做事器端收到FIN后,先发送ack=M+1,见告客户端,你的要求我收到了,但是我还没准备好,请连续你等我的。这个时候客户端就进入FIN_WAIT_2 状态,连续等待做事器真个FIN报文。
第三次挥手:当做事器端确定数据已发送完成,则向客户端发送FIN=N报文,见告客户端,好了,我这边数据发完了,准备好关闭连接了。做事器端进入LAST_ACK状态。
第四次挥手:客户端收到FIN=N报文后,就知道可以关闭连接了,但是他还是不相信网络,怕做事器端不知道要关闭,以是发送ack=N+1后进入TIME_WAIT状态,如果Server端没有收到ACK则可以重传。做事器端收到ACK后,就知道可以断开连接了。客户端等待了2MSL后依然没有收到回答,则证明做事器端已正常关闭,那好,我客户端也可以关闭连接了。终极完成了四次握手。