<图解HTTP> 是一本非常好的书,非常通俗易懂,并且有很多图画,真的很好。
HTTP(1)
Web 浏览器地址栏中指定的 URL,Web 浏览器从 Web 服务器端获取文件资源等信息,从而显示出 Web 页面。
通过发送请求获取服务器资源的 web 浏览器等,都是客户端。
TCP/IP 协议族按层次分别分为以下 4 层:应用层,传输层,网络层和数据链路层
——————————————————————————————————————(网络分层模型)
TCP/IP协议:如何探测到通信目标,使用哪种语言进行通信
应用层:向用户提供应用服务时通信的活动(FTP DNS HTTP)
传输层:数据传输(TCP UDP)
网络层:IP(MAC)
数据链路层:(网络接口层)
举例说明:
首先作为发送端的客户端在应用层(HTTP协议)发出一个想看某个 Web 页面的 HTTP 请求。
接着,为了传输方便,在传输层(TCP协议)把从应用层处收到的数据(HTTP请求报文)进行分割,并在各个报文上打上标记序号及端口号后转发给网络层。
在网络层(IP协议),增加作为通信目的地的 MAC 地址后转发给链路层。这样一来,发往网络的通信请求就准备齐全了。
接受端的服务器在链路层接收到数据,按序往上层发送,一直到应用层。当传输到应用层,才能算真正接收到由客户端发送过来的 HTTP 请求。
———————————————————————————————————————(网络分层模型)
——————————————————————————————————————(可靠性传输原理)
HTTP(2)
1.4.2 确保可靠性的TCP协议
按层次分,TCP位于传输层,提供可靠的字节流服务。
所谓的字节流服务(Byte Stream Service)是指,为了方便传输,将大块数据分割成以报文段(segment)为单位的数据包进行管理。而可靠的传输服务是指,能够把数据准确可靠地传给对方。一言以蔽之,
TCP
协议为了更容易传送大数据才把数据分割,而且
TCP
协议能够
确认数据最终是否送达到对方。
为了准确无误地将数据送达目标处,TCP协议采用了三次握手(three-way handshaking)策略。用TCP协议把数据包送出去后,TCP不会对传送后的情况置之不理,它一定会向对方确认是否成功送达。
握手过程中使用了
TCP
的标志(
flag
)
SYN
(
synchronize
) 和
ACK
(
acknowledgement
)。
发送端首先发送一个带
SYN
标志的数据包给对方。接收端收到后,
回传一个带有
SYN/ACK
标志的数据包以示传达确认信息。最后,发
送端再回传一个带
ACK
标志的数据包,代表
“
握手
”
结束。
若在握手过程中某个阶段莫名中断,
TCP
协议会再次以相同的顺序发
送相同的数据包。
请求访问文本或图像等资源的一端称为客户端,而提供资源响应的一端称为服务器端。
HTTP协议规定,请求从客户端发出,最后服务器端响应该请求并返回。换句话说,肯定是先从客户端开始建立通信的,服务器端在没有接收到请求之前不会发送响应。
——————————————————————————————————————(可靠性传输原理)
————————————————————————————————————(HTTP)
HTTP(3)
(31-32)
下面则是从客户端发送给某个HTTP服务器端的请求报文中的内容
。
GET /index.htm HTTP/1.1
Host: hackr.jp
起始行开头的GET表示请求访问服务器的类型,称为方法
(method)。随后的字符串 /index.htm 指明了请求访问的资源对象,
也叫做请求 URI(request-URI)。最后的 HTTP/1.1,即 HTTP 的版本
号,用来提示客户端使用的 HTTP 协议功能。
综合来看,这段请求内容的意思是:请求访问某台 HTTP 服务器上的
/index.htm 页面资源。
请求报文是由请求方法、请求 URI、协议版本、可选的请求首部字段
和内容实体构成的。
接收到请求的服务器,会将请求内容的处理结果以响应的形式返
回。
HTTP/1.1 200 OK
Date: Tue, 10 Jul 2012 06:50:15 GMT
Content-Length: 362
Content-Type: text/html
<html>
在起始行开头的HTTP/1.1表示服务器对应的HTTP版本。紧挨着的200 OK表示请求的处理结果的状态码(status code)和原因短语(reason-phrase)。下一行显示了创建响应的日期时间,是首部字段(header field)内的一个属性。
接着以一空行分隔,之后的内容称为资源实体的主体(entitybody)。
响应报文基本上由协议版本、状态码(表示请求成功或失败的数字代码)、用以解释状态码的原因短语、可选的响应首部字段以及实体主体构成。稍后我们会对这些内容进行详细说明。
HTTP(4)
(35-40)
GET
POST
PUT
HTTP(5)
(48-50)
请求报文和相应报文的结构
(61-68)
状态码告知从服务器端返回的请求结果
(71-74)
(79-85)HTTP 报文首部
HTTP(6)
TCP 采用了三次握手策略。用 TCP 协议把数据包送出去后, TCP回向对方确认是否成功送达
DNS提供域名到 IP 地址之间的解析服务。DNS 协议提供通过域名查找 IP地址,或逆向
请求访问文本或图像等资源的一段称为客户端,而提供资源相应的一段称为服务器端
客户端发送的内容:
GET / index.htm HTTP/1.1
Host: hackr.jp
意思是:请求访问某台HTTP服务器上的 /index.htm 页面资源
HTTP 方法:
GET:获取资源
POST:传输实体主体
PUT:传输文件
HEAD:获得报文首部
DELETE:删除文件
持久连接
使用 Cookie 的状态管理
状态吗告知从服务器端返回的请求结果
200 OK 的相应结果表明请求被正常处理了
通信数据转发程序:代理,网关,隧道。
链接:
(1) http://www.cnblogs.com/vamei/archive/2012/11/27/2790065.html
————————————————————————————————————————(HTTP)
三次握手的过程是什么?
为什么需要三次握手,而不是两次握手?
网线属于物理层,网卡属于数据链路层,路由器属于网络层。
应用层:
Socket【套接字】:我们需要一个接口来建立起应用进程和底层协议的桥梁,叫做 API(应用编程接口)
传输层:
提供的是应用进程之间的逻辑通行进程。
协议就是 TCP 和 UDP
TCP 是一个出色的协议,提供了很多丰富的功能,它是一个点到点的,也就是端口到端口的协议,是一个可靠的,按序字节流的协议,面向连接的协议。
TCP 的报文头
TCP 的 3 次握手,4 次挥手,挥手就是断开连接的过程
不是很懂的有:
(1)TCP/IP 协议
(2)Socket编程
(3)写一个 web服务器
https://zhuanlan.zhihu.com/p/24001696
https://hit-alibaba.github.io/interview/basic/network/HTTP.html
https://github.com/woai30231/http