HTTP
响应常见状态码博文连接: 网络知识面面观
状态码 | 描述 |
---|---|
100-199 |
成功接收请求, 要求客户端继续提交下一次请求才能完成整个处理过程 |
200-299 |
成功接收请求并已完成整个处理过程,经常使用200 |
300-399 |
为完成请求, 需进一步细化需求: 例如: 请求的资源已经移动一个新地址,经常使用302 (重定向),307 和304 (拿缓存) |
400-499 |
客户端的请求有错误, 包含语法错误或者不能正确执行。 经常使用404 (请求的资源在web 服务器中没有),403 (服务器拒绝访问, 权限不够) |
500-599 |
服务器端出现错误 |
200 |
表示一切正常, 返回的是正常请求结果 |
302/307 |
临时重定向,指出请求的文档已被临时移动到别处, 此文档的新的url 在location 响应头中给出 |
304 |
未修改,表示客户端缓存的版本是最新的, 客户端应该继续使用它 |
403 |
禁止,服务器理解客户端请求,但拒绝处理它,一般用于服务器上文件或目录的权限设置所致 |
404 |
找不到,服务器上不存在客户端所请求的资源 |
500 |
服务器内部错误,服务器端的cgi ,asp ,jsp 等程序发生错误 |
TCP
三次握手和四次挥手创建TCP
链接须要三次握手:首先Client
端发送链接请求报文,Server
端接收链接后回复ACK
报文,并为此次链接分配资源。Client
端接收到 ACK
报文后也向Server
端发发送ACK
报文,并分配资源,这样TCP
链接就创建了。git
TCP
先向服务器的TCP
发送一个链接请求报文。这个特殊的报文中不含应用层数据,其首部中的SYN
标志位被置1
。另外, 客户端会随机选择一个起始序号seq=x
(链接请求报文不携带数据,但要消耗掉一个序号)。TCP
收到链接请求报文后,若赞成创建链接,就向客户端发送请求,并为该TCP
链接分配TCP
缓存和变量。在确认报文中,SYN
和ACK
位都被置为1
, 确认好字段的值为x+1
,而且服务器随机产生起始序号seq=y
(确认报文不携带数据, 但也要消耗掉一个序号)。确认报文一样不包含应用层数据。ACK
标志位被置为1
,序号字段为x+1
,确认号字段为y+1
。四次挥手github
TCP
发送一个链接释放报文,并中止再发送数据,主动关闭TCP
链接,该报文的FIN
标志位被置1
,seq=u
,它等于前面已经传送过的数据的最后一个字节的序号加1
(FIN
报文即便不携带数据,也要消耗掉一个序号)。ack=u+1
,这个报文本身的序号是v
,等于它前面已传送过的数据的最后一个本身的序号加1
。此时,从客户端到服务器这个方向的链接就释放了,TCP
链接处于半关闭状态。但服务器若发送数据,客户端仍要接收,即从服务器到客户机的链接仍未关闭。TCP
释放链接,此时其发出FIN=1
的链接释放报文。ACK
字段被置为1
,确认号ack=w+1
,序号seq=u+1
。此时,TCP
链接尚未释放掉,必须通过等待计时器设置的时间2MSL
后, A
才进入到链接关闭状态。应用层(application-layer
)的任务是经过应用进程间的交互来完成特定网络应用。应用层协议定义的是应用进程(进程:主机中正在运行的程序)间的通讯和交互的规则。对于不一样的网络应用须要不一样的应用层协议。在互联网中应用层协议不少,如域名系统DNS
,支持万维网应用的HTTP
协议,支持电子邮件的SMTP
协议等等。咱们把应用层交互的数据单元称为报文。
域名系统web
域名系统(Domain Name System
缩写DNS
,Domain Name
被译为域名)是因特网的一项核心服务,它做为能够将域名和IP
地址相互映射的一个分布式数据库,可以令人更方便的访问互联网,而不用去记住可以被机器直接读取的IP
数串。
http
协议数据库
超文本传输协议(HTTP
,HyperText Transfer Protocol
)是互联网上应用最为普遍的一种网络协议。全部的WWW
(万维网) 文件都必须遵照这个标准。
运输层(
transport layer
)的主要任务就是负责向两台主机进程之间的通讯提供通用的数据传输服务。应用进程利用该服务传送应用层报文。“通用的”是指并不针对某一个特定的网络应用,而是多种应用可使用同一个运输层服务。因为一台主机可同时运行多个线程,所以运输层有复用和分用的功能。所谓复用就是指多个应用层进程可同时使用下面运输层的服务,分用和复用相反,是运输层把收到的信息分别交付上面应用层中的相应进程。
TCP
UDP
TCP
(Transmisson Control Protocol
)--提供面向链接的,可靠的数据传输服务。UDP
(User Datagram Protocol
)--提供无链接的,尽最大努力的数据传输服务(不保证数据传输的可靠性)。TCP
的主要特色后端
TCP
是面向链接的。(就好像打电话同样,通话前须要先拨号创建链接,通话结束后要挂机释放链接);TCP
链接只能有两个端点,每一条TCP
链接只能是点对点的(一对一);TCP
提供可靠交付的服务。经过TCP
链接传送的数据,无差错、不丢失、不重复、而且按序到达;TCP
提供全双工通讯。TCP
容许通讯双方的应用进程在任什么时候候都能发送数据。TCP
链接的两端都设有发送缓存和接收缓存,用来临时存放双方通讯的数据;TCP
中的“流”(Stream
)指的是流入进程或从进程流出的字节序列。“面向字节流”的含义是:虽然应用程序和TCP
的交互是一次一个数据块(大小不等),但TCP
把应用程序接下来的数据仅仅当作是一连串的无结构的字节流。UDP
的主要特色浏览器
UDP
是无链接的;UDP
使用尽最大努力交付,即不保证可靠交付,所以主机不须要维持复杂的连接状态(这里面有许多参数);UDP
是面向报文的;UDP
没有拥塞控制,所以网络出现拥塞不会使源主机的发送速率下降(对实时应用颇有用,如直播,实时视频会议等);UDP
支持一对1、一对多、多对一和多对多的交互通讯;UDP
的首部开销小,只有8
个字节,比TCP
的20
个字节的首部要短。TCP/IP
体系结构中,因为网络层使用IP
协议,所以分组也叫IP
数据报 ,简称数据报。heterogeneous
)网络经过路由器(router
)相互链接起来的。互联网使用的网络层协议是无链接的网际协议(Intert Prococol
)和许多路由选择协议,所以互联网的网络层也叫作网际层或IP
层。data link layer
)一般简称为链路层。两台主机之间的数据传输,老是在一段一段的链路上传送的,这就须要使用专门的链路层的协议。 在两个相邻节点之间传送数据时,数据链路层将网络层接下来的IP
数据报组装成帧,在两个相邻节点间的链路上传送帧。每一帧包括数据和必要的控制信息(如同步信息,地址信息,差错控制等)。physical layer
)的做用是实现相邻计算机节点之间比特流的透明传送,尽量屏蔽掉具体传输介质和物理设备的差别。使其上面的数据链路层没必要考虑网络的具体传输介质是什么。“透明传送比特流”表示经实际电路传送后的比特流没有发生变化,对传送的比特流来讲,这个电路好像是看不见的。TCP/IP
两个协议。
HTTP
与HTTPS
的区别HTTP
协议运行在TCP
之上,明文传输,客户端与服务器端都没法验证对方的身份;HTTPS
是身披SSL
(Secure Socket Layer
)外壳的HTTP
,运行于SSL
上,SSL
运行于TCP
之上,是添加了加密和认证机制的HTTP
。两者之间存在以下不一样:缓存
HTTPS
与HTTP
使用不一样的链接方式,用的端口也不同,前者是80
,后者是443
;HTTP
通讯相比,HTTPS
通讯会因为加减密处理消耗更多的CPU
和内存资源;HTTPS
通讯须要证书,而证书通常须要向认证机构购买;HTTPS
的加密机制是一种共享密钥加密和公开密钥加密并用的混合加密机制。TCP
协议如何保持传输的可靠性TCP
提供一种面向链接的、可靠的字节流服务。其中,面向链接意味着两个使用TCP
的应用(一般是一个客户和一个服务器)在彼此交换数据以前必须先创建一个TCP
链接。在一个TCP
链接中,仅有两方进行彼此通讯;而字节流服务意味着两个应用程序经过TCP
连接交换8bit
字节构成的字节流,TCP
不在字节流中插入记录标识符。
对于可靠性,TCP
经过如下方式进行保证:安全
TCP
发送数据端超时后会重发数据;TCP
报文段做为IP
数据报来传输,而IP
数据报的到达可能会失序,所以TCP
报文段的到达也可能会失序。TCP
将对失序数据进行从新排序,而后才交给应用层;TCP
收到发自TCP
链接另外一端的数据,它将发送一个确认。这个确认不是当即发送,一般将推迟几分之一秒;TCP
发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。若是不能及时收到一个确认,将重发这个报文段;TCP
链接的每一方都有固定大小的缓冲空间。TCP
的接收端只容许另外一端发送接收端缓冲区所能接纳的数据,这能够防止较快主机导致较慢主机的缓冲区溢出,这就是流量控制。TCP
使用的流量控制协议是可变大小的滑动窗口协议。IP
地址
这一步包括
DNS
具体的查找过程,包括:浏览器缓存->系统缓存->路由器缓存...
DNS
缓存(维护一张域名与IP
地址的对应表);DNS
缓存(维护一张域名与IP
地址的对应表);hosts
文件( Windows
环境下,维护一张域名与IP
地址的对应表);操做系统将域名发送至LDNS
(本地区域名服务器),LDNS
查询本身的DNS
缓存(通常查找成功率在80%
左右),查找成功则返回结果,失败则发起一个迭代DNS
解析请求:服务器
LDNS
向 Root Name Server
(根域名服务器,如com
、net
、org
等的解析的顶级域名服务器的地址)发起请求,此处,Root Name Server
返回com
域的顶级域名服务器的地址;LDNS
向com
域的顶级域名服务器发起请求,返回baidu.com
域名服务器地址;LDNS
向baidu.com
域名服务器发起请求,获得www.baidu.com
的IP
地址;LDNS
将获得的IP
地址返回给操做系统,同时本身也将IP
地址缓存起来;IP
地址返回给浏览器,同时本身也将IP
地址缓存起来。URL
到页面加载发生了什么整体来讲分为如下几个过程:cookie
DNS
解析TCP
链接HTTP
请求HTTP
报文HTTP
的几种请求方法的用途GET
方法:发送一个请求来取得服务器上的某一资源POST
方法:向URL
指定的资源提交数据或附加新的数据PUT
方法:跟POST
方法很像,也是向服务器提交数据。可是,它们之间有不一样。PUT
指定了资源在服务器上的位置,而POST
没有HEAD
方法:只请求页面的首部DELETE
方法:删除服务器上的某资源OPTIONS
方法:它用于获取当前URL
所支持的方法。若是请求成功,会有一个Allow
的头包含相似“GET
,POST
”这样的信息TRACE
方法:TRACE
方法被用于激发一个远程的,应用层的请求消息回路CONNECT
方法:把请求链接转换到透明的TCP/IP
通道IP
地址的范围IP
地址分为A
,B
,C
,D
,E
五类。
其中A
类分配给政府机关使用,B
类地址给大中型企业使用,C
类地址给我的使用。这三种是主要的。
IP
地址分为五类,A
类保留给政府机构,B
类分配给中等规模的公司,C
类分配给任何须要的人,D
类用于组播,E
类用于实验,各种可容纳的地址数目不一样。
其中A
类、B
类、和C
类这三类地址用于TCP/IP
节点,其它两类D
类和E
类被用于特殊用途。A
、B
、C
三类IP
地址的特征:当把IP
地址写成二进制形式时,A
类地址的第一位老是0
,B
类地址的前两位老是10
,C
类地址的前三位老是110
。
A
类地址
A
类地址第1
字节为网络地址,其它3
个字节为主机地址。A
类地址范围:1.0.0.1
—126.155.255.254
A
类地址中的私有地址和保留地址:
10.X.X.X
是私有地址(所谓的私有地址就是在互联网上不使用,而被用在局域网络中的地址)127.X.X.X
是保留地址,用作循环测试用的B
类地址
B
类地址第1
字节和第2
字节为网络地址,其它2
个字节为主机地址。B
类地址范围:128.0.0.1
—191.255.255.254
。B
类地址的私有地址和保留地址:
172.16.0.0
—172.31.255.255
是私有地址169.254.X.X
是保留地址。若是你的IP
地址是自动获取IP
地址,而你在网络上又没有找到可用的DHCP
服务器。就会获得其中一个IP
C
类地址
C
类地址第1
字节、第2
字节和第3
个字节为网络地址,第4
个个字节为主机地址。另外第1
个字节的前三位固定为110
。C
类地址范围:192.0.0.1
—223.255.255.254
。C
类地址中的私有地址:
192.168.X.X
是私有地址。D
类地址
D
类地址不分网络地址和主机地址,它的第1
个字节的前四位固定为1110
。D
类地址范围:224.0.0.1
—239.255.255.254
E
类地址
E
类地址也不分网络地址和主机地址,它的第1
个字节的前五位固定为11110
。E
类地址范围:240.0.0.1
—255.255.255.254
HTTP
长链接、短链接HTTP/1.0
中默认使用短链接。也就是说,客户端和服务器每进行一次HTTP
操做,就创建一次链接,任务结束就中断链接。当客户端浏览器访问的某个HTML
或其余类型的Web
页中包含有其余的Web
资源(如JavaScript
文件、图像文件、CSS
文件等),每遇到这样一个Web
资源,浏览器就会从新创建一个HTTP
会话。HTTP/1.1
起,默认使用长链接,用以保持链接特性。使用长链接的HTTP
协议,会在响应头加入这行代码:Connection:keep-alive
HTTP
数据的TCP
链接不会关闭,客户端再次访问这个服务器时,会继续使用这一条已经创建的链接。Keep-Alive
不会永久保持链接,它有一个保持时间,能够在不一样的服务器软件(如Apache
)中设定这个时间。实现长链接须要客户端和服务端都支持长链接。HTTP
协议的长链接和短链接,实质上是TCP
协议的长链接和短链接。HTTP
协议是无状态的HTTP
协议是无状态的,指的是协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态。也就是说,打开一个服务器上的网页和上一次打开这个服务器上的网页之间没有任何联系。HTTP
是一个无状态的面向链接的协议,无状态不表明HTTP
不能保持TCP
链接,更不能表明HTTP
使用的是UDP
协议(无链接)。
HTTP
协议之间的关系
Socket
链接与HTTP
链接的联系与区别Socket
链接就是TCP
链接,所以Socket
链接一旦创建,通讯双方便可开始相互发送数据内容,直到双方链接断开。但在实际网络应用中,客户端到服务器之间的通讯每每须要穿越多个中间节点,例如路由器、网关、防火墙等,大部分防火墙默认会关闭长时间处于非活跃状态的链接而致使Socket
链接断连,所以须要经过轮询告诉网络,该链接处于活跃状态。HTTP
链接使用的是“请求—响应”的方式,不只在请求时须要先创建链接,并且须要客户端向服务器发出请求后,服务器端才能回复数据。Socket
链接,服务器就能够直接将数据传送给客户端;若双方创建的是HTTP
链接,则服务器须要等到客户端发送一次请求后才能将数据传回给客户端,所以,客户端定时向服务器端发送链接请求,不只能够保持在线,同时也是在“询问”服务器是否有新的数据,若是有就将数据传给客户端。HTTP
(TCP
) 报文结构例如一个100kb
的HTML
文档须要传送到另一台计算机,并不会整个文档直接传送过去,可能会切割成几个部分,好比四个分别为25kb
的数据段。而每一个数据段再加上一个TCP
首部,就组成了TCP
报文。TCP
报文 (Segment
),包括首部和数据部分。
首部:
source port
destination port
sequence number
acknowledgment number
offset
reserved
tcp flags
window size
checksum
urgent pointer
tcp options
HTTP
的缓存机制HTTP
的缓存主要利用header
里的两个字段来控制:
Cache-control
主要包含以及几个字段:
private
:则只有客户端能够缓存public
:客户端和代理服务器均可以缓存max-age
:缓存的过时时间no-cache
:须要使用对比缓存来验证缓存数据no-store
:全部内存都不会进行缓存ETag
:即用来进行对比缓存,Etag
是服务端资源的一个标识码
Etag
,下次再请求时,客户端则会经过header
里的If-None-Match
将这个标识码Etag
带上,服务端将客户端传来的Etag
与最新的资源Etag
作对比,若是同样,则表示资源没有更新,返回304
。经过Cache-control
和Etag
的配合来实现HTTP
的缓存机制。
Cookie
Cookie
就是用来在本地缓存记住一些状态的,一个Cookie
通常都包含domain
(所属域)、path
、Expires
(过时时间)等几个属性。服务端能够经过在响应头set-cookies
将状态写入客户端的Cookie
中。
HTTP 2.0
与HTTP 1.x
相比有什么优势HTTP 1.x
是文本协议,而HTTP 2.0
是二进制以帧为基本单位,是一个二进制协议,一帧中除了包含数据外同时还包含该帧的标识:Stream Identifier
,即标识了该帧属于哪一个request
,使得网络传输变得十分灵活。多路复用: 一个很大的改进,原先HTTP 1.x
一个链接一个请求的状况有比较大的局限性,也引起了不少问题,如创建多个链接的消耗以及效率问题。
HTTP 1.x
为了解决效率问题,可能会尽可能多的发起并发的请求去加载资源,然而浏览器对于同一域名下的并发请求有限制,而优化的手段通常是将请求的资源放到不一样的域名下来突破这种限制。HTTP 2.0
支持的多路复用能够很好的解决这个问题,多个请求共用一个TCP
链接,多个请求能够同时在这个TCP
链接上并发,一个是解决了创建多个TCP
链接的消耗问题,一个也解决了效率的问题。那么是什么原理支撑多个请求能够在一个TCP
链接上并发呢?基本原理就是上面的二进制分帧,由于每一帧都有一个身份标识,因此多个请求的不一样帧能够并发的无序发送出去,在服务端会根据每一帧的身份标识,将其整理到对应的request
中。header
头部压缩:主要是经过压缩header
来减小请求的大小,减小流量消耗,提升效率。由于以前存在一个问题是,每次请求都要带上 header
,而这个header
中的数据一般是一成不变的。流量控制是对一条通讯路径上的流量进行控制,就是发送方经过获取接收方的回馈来动态调整发送的速率,来达到控制流量的效果,其目的是保证发送者的发送速度不超过接收者的接收速度。
拥塞控制是对整个通讯子网的流量进行控制,属于全局控制。
快重传+快恢复
3
个重复的接收方的ACK
,就能够判断有报文段丢失,此时就能够当即重传丢失的报文段,而不用等到设置的超时时间到了才开始重传,提升了重传的效率。1
,从新慢开始,这样存在的一个问题就是网络没法很快恢复到正常状态。快恢复就是来优化这个问题的,使用快恢复,则出现拥塞时,拥塞窗口只会下降到新的慢开始门阀值(即12
),而不会降为1
,而后直接开始进入拥塞避免加法增加。原文连接: 先后端均适用的网络知识点大全