一、域名
1、概念
域名(英语:Domain Name),又称网域,是由一串用点分隔的名字组成的Internet上某一台计算机或计算机组的名称,用于在数据传输时对计算机的定位标识(有时也指地理位置)。
由于IP地址具有不方便记忆并且不能显示地址组织的名称和性质等缺点,人们设计出了域名,并通过网域名称系统(DNS,Domain Name System)来将域名和IP地址相互映射,使人更方便地访问互联网,而不用去记住能够被机器直接读取的IP地址数串。
在搭建网站时,我们必须要有两样东西:域名、空间
。打个比方,空间就像店铺,而域名就相当于店铺的地址,你需要在店铺里放满货物,再把店铺地址告诉所有人,你的店铺才能正常营业。
2、什么是域名
通俗地说,域名相当于电话号码,也就是你网站的名号,你注册域名之后就以这个名号去江湖上面宣传你的网站。域名和空间搭建出了网站,域名和邮局搭建了邮箱,所以建站的第一步就是注册域名。
现在域名主要有.com .net 的国际域名,和以.cn为结尾的国内域名,如:.cn
, .com.cn
, .net.cn
,.org.cn
。域名一级代理商其实就只有几家,比如新网,其它的各类域名销售商都是他们的二级代理。域名管理平台也叫域名服务器(nameservers简写NS)或者NS服务器
,默认的域名管理平台跟注册平台是一家的。
需要注意的是,域名本身只是一个所有权,光有域名什么事都干不了。比如说你买了一个5年的域名,那么你拥有这个域名5年。只要你不卖,在5年之内,没人能够得到这个域名。所有权包括出售权,所以你可以卖你拥有的域名。
3、什么是空间
要设立一个网站,你还需要网站空间
。空间
对于一个网站的速度、稳定、安全起到决定性的作用。
什么是空间呢,空间就是存放网站的服务器
,它其实就是一台高级电脑,也是由硬盘、内存、 CPU组成的,一般大型网站都使用独立的服务器,也就是说这台服务器上只放一个网站。
简单说,网站空间
简单的说就是放网站数据的地方
,主要是网站的文字、图片和数据库。虚拟空间、VPS等都是这个意思,区别是大小、性能、管理方式不同 。
虚拟空间
就是提供网站管理后台的空间,大部分设置都由空间商提供,你只需要绑定域名、上传程序、安装程序就可以用了,适合初学建站的新手使用。缺点是大家公用系统资源和一个IP,速度相对来说不快,自由度不高,不能自由发挥设置。
VPS
有独立IP,速度较快,自由度高。缺点是需要自己搭建程序的使用环境,需要手动配置后才能使用,而且设置过程比较复杂。
如果你选择虚拟主机,那就是在一台分享服务器上的一个帐号,用来存储你的网页文件,电子邮件,数据库等数据。服务器
就是一台以高速连接到互联网的电脑。同样,如果没有一个域名解析到这个网站空间的话,这个网站空间本身也做不了什么。你可以在一个虚拟主机帐号上存你的网页文件,但是没有域名指向这个帐号,也就没有用户能打开这个网页。
4、域名和空间的区别
虽然域名和网站空间大部分时间都是手拉手一起工作的,但是这两者并不是一回事。
你可以从不同的服务商那里分别买域名和网站空间。
你可以只买域名,没买空间。这种情况下,什么也打不开,因为它并没解析到一个网站空间。或者如果你是继续使用域名注册商的DNS服务器,可能是显示域名注册商的默认广告页面。
你也可以只买网站空间,没有域名。在这种情况下,你的网站空间存在于一台服务器上,网页也存在这个空间里,但是没人能在浏览器打开这些页面。
所以如果你要有一个可以打开的网站,你需要同时有域名和网站空间。在购买了域名和网站空间后,你需要把域名解析到或指向这个网站空间。这个工作如果你从同一家服务商买了域名和网站空间,那么服务商通常已经帮你做好了。如果你从不同的服务商买域名和网站空间,你可能要自己设置域名DNS。
可见,域名也好,空间也罢,都是创建一个网站的必需品,需要我们分别进行申请注册。对于什么是域名和空间,你已经很清楚了。二者虽然各自为政,但却密不可分,缺一不可。
5、账号
每个可以注册的域名个数没有限制,也就是说,每个人可以注册一个域名,几个域名,甚至是无数个域名。
不管是个人还是企业,拥有多个域名都是非常普遍的。特别是一些域名投资人,批量建站用户。
- 域名投资人
域名投资人,大多会囤积大量的域名,作为收藏,等待时机再出售。各类不同含义、品相的域名,以及不同域名后缀,都会涉猎。
- 批量建站
部分个人或企业需要搭建多个网站,一般会注册多个域名来使用。很多企业会有注册多个域名,作为企业域名保护。
一般域名注册服务商,都支持域名批量查询注册,一次性查询和注册多个域名。
二、内网、外网、宽带、带宽、流量、网速之间的区别与联系
1、带宽与宽带的区别是什么
-
带宽
是量词,指的是网速的大小,比如1Mbps的意思是一兆比特每秒,这个数值就是指带宽。 -
宽带
是名词,说明网络的传输速率速很高 。宽带的标准各不相同,最初认为128kbps以上带宽的就是宽带,而以下的就是窄带。
但现在国内运营商一般提供至少512kbps带宽的宽带服务。也就是说,带宽是一个具体数值,而宽带则是满足一定带宽数值的一种传输标准(服务)。
即:宽带是一种业务,带宽是传输速度。
-
宽带:在数字通信中通常指64kbit/s以上信号的带宽。
-
窄带:在数字通信中通常指64kbit/s以下信号的带宽。
1.1 宽带
通常别人会说你家能不能上网呀?其实这个意思就是你家有没有宽带,换句话说,就是一个名词,先有了宽带一词,然后才可以说你带宽是多少,宽带与上网的速度快慢没有直接关系。
1.2 宽带
当我们想申请宽带了,需要到一些服务提供商那里注册登记,这时会根据套餐的不同,你可能会有10Mb/s 、 20Mb/s等,可以计算机字节换算比例可以计算出自己的带宽大小
比如:
1B=8b //1字节=8位1KB=1024B1MB=1024KB1GB=1024MB
我们申请的带宽是10Mb/s这个单位中的b是小写的,而我们刚才说的1B(字节)=8b(位),这里刚好是8倍的关系,即下载速度:10Mb / 8 = 1.25MB
有的人就会问,为什么要除以8?
在计算机中,下载速度是以字节(B)为单位的,而提供商说的是以比特(b)为单位的。
比如说: 在网上下载一个软件,都会以B(字节)为单位的,再比如你打开一个网页,这个网页中可能会有图片,文字,视频等内容,这些内容本质上来说,也是下载到你电脑了,然后你才能看到的。
我们可以带宽来计算出自己的下载速度:
计算方式:带宽大小 / 8
有的时候,使用一些软件测试网速时,发现与我们计算的结果有点差距,这个是正常现象,这是由于一些物理线路磨损等客观原因造成的。
还有的时候,大家在深夜下载软件时,会发现,下载速度超过了我们理论上计算出来的值,这种情况也是存在的
我们可以这样理解: 比如你家在J区,那么提供商拉到J区的总线路是100Mb/s , 而你家申请的是10M,由于限制都是从路由器里设置的,这个与设置路由器的设置有关.
第二种情况就是,你下载软件的服务器比较闲,这样速度也是比较快的
第三种情况就是我们下载软件时,可能会用迅雷呀这方面的软件,由于这个软件下载的人多了,那么他的速度也是比较快的。
通俗理解的话:
带宽就好比你的水龙头大小,网速就相好比从水龙头里出来的水流速有多快。
以上都是说下载速度,那么上传速度是怎么计算的呢,其实上传速度这个与地域的不同而不同,一般上传速度都被提供商限制了,这个说不准。
2、流量
流量是对外发送数据与接收数据包的大小总和,单位是采取1024进制的,单位有 B,KB,MB(M),GB(G)
1G=1024MB1M=1024KB1KB=1024字节(B)
一般我们手机有 5元30MB,10元70MB的流量套餐,当我们打开一个网页,需要多少流量呢?(以前哈)
假设某一个网页上有 100个汉字与一张100KB的图片,一个汉字=2个字节
即这个页面的数据大小为:100 * 2B / 1024 + 100KB = 0.2KB +100KB =100.2KB;
每访问一次这个页面,将产生100.2KB的流量,如果是70MB的流量,那么访问几个网页基本快没有了,所以更不要说看视频了。
3、带宽、网速和流量之间的关系
通常情况下:我们说的
我家的带宽10M现在网速网速:200KB/s看一张图片使用了8M的流量
那么带宽、网速、流量之间有什么关系,他们分别代表什么呢?
-
带宽单位是:比特/秒(bps):10M=10Mbps
-
网速是数据传输的速度,单位是:字节/秒 (B/s, KB/s, MB/s)
1MB/s=1024KB/s1KB/s=1024B/s
- 流量是用户上网 发送和接收 的 数据量总和 ,单位是:字节(Byte);
比特是信息的最小单位:1字节=8比特 也就是1B=8bit 或者 1B=8b
1字节/秒=8比特/秒 (1B/s=8bps)
1比特 (1b or 1位) 是信息技术中的最小存储单位,1位代表一个“1”或者“0”;
1B(1字节)是比较小的存储单位:一般情况下1个英文字母占1个字节;一个汉字占2个字节;
- 他们之间的换算:带宽大小 / 8
10M带宽(10Mb/s)=1.25MB/s网速1M带宽(1Mb/s)=0.125MB/s=128KB/s10Mbps = 101024Kbps =1010241024bps =101024*1024/8 Byte/s =10/8 MB/s =1.25 MB/s
4、上行带宽和下行带宽是什么意思?各有什么作用?
4.1 上行带宽和下行带宽,或者说上行速度和下行速度是什么意思?
在设置路由器的限速,或者配置其它一些软件的时会遇到上行速度和下行速度的配置,很多用户根本就不知道这两个所代表的意思,下面会对这两种进行详细讲解:
在访问互联网时存在两种行为:一是上传数据,二是下载数据。上行宽带(速度) 指的是上传的速度,而下行宽带(速度) 指的是下载数据时的数度。
在详细一点可以理解为:
- 上行带宽即上行速率
一般是指从你的电脑上传的速度,别人对你的电脑进行通讯的速率。比如你往QQ空间上传你的相片,这个时候上传相片的速度就是上行速度,其他还有比如你往一些云盘里面上传文件的时候,这个时候的速度也是上行速率,我们可能会发现,通常情况下,上传文件的速度比我们平常使用的网络速度要慢很多。
- 下行带宽即下行速率
一般是你从网络上的主机下载的速度,比如你下载文件的速度,打开网页的速度,这种速度就是下行速率,下行速率通常就是我们平常所说的网速,比如你的带宽是电信8M,光纤20M等,这种速度其实就是指的网络的下行速率。
- 上行宽带(速度)和下行宽带(速度)是不对称的。
一般是下行速度大于上行的速度。我们平时所使用的宽带说多少M,都是指的下行宽带,因为我们上网主要是从互联网上下载数据,而上传的数据量要少很多。
为什么在使用宽带的过程中,发现电脑下载的速度根本就达不到自己办理的宽带的标准,例如10Mb/s的宽带,下载速度只有1MB/s左右的速度,这是为什么呢?
因为宽带运营商的带宽下行速度和Windows电脑上的下行速度的单位不一样,Windows电脑的单位是KBbs/s,而宽带运营上的单位是Kbbs/s,1B=8b(1字节=8位)。
假设你办理了10M的宽带,10Mbps=10240Kbps/8=1280KBps,所以在你电脑的最大的下载速度只有1280KBps,也就是大概1.25MB/s左右的样子。所以不要再说宽带公司坑人,办理的宽带扣量了,这只不过是计算的单位不同引起的。
宽带的下载速率除宽带带宽外,与计算机配置、使用的下载软件,下载的大小、下载网站的速率等均有关系,一般的下载软件都可以查看的宽带下载速率(如迅雷)。
三、http与https介绍
1、TCP/IP协议与UDP协议
互联网的关键技术就是TCP/IP协议。两台计算机之间的通信是通过TCP/IP协议在因特网上进行的。实际上这个是两个协议:
- TCP: Transmission Control Protocol 传输控制协议
- IP: Internet Protocol 网际协议。
引自维基百科TCP/IP协议族是一个网络通信模型,以及一整个网络传输协议家族,为互联网的基础通信架构。该协议家族的两个核心协议:TCP(传输控制协议)和IP(网际协议),为该家族中最早通过的标准。这个协议族由互联网工程任务组负责维护。
1.1 TCP协议
传输控制协议(TCP) :TCP(传输控制协议)定义了两台计算机之间进行可靠的传输而交换的数据和确认信息的格式,以及计算机为了确保数据的正确到达而采取的措施。协议规定了TCP软件怎样识别给定计算机上的多个目的进程如何对分组重复这类差错进行恢复。协议还规定了两台计算机如何初始化一个TCP数据流传输以及如何结束这一传输。TCP最大的特点就是提供的是面向连接、可靠的字节流服务。
TCP确保数据包以正确的次序到达,并且尝试确认数据包的内容没有改变。TCP在IP地址之上引端口(port),它允许计算机通过网络提供各种服务。一些端口号为不同的服务保留,而且这些端口号是众所周知。
服务或者守护进程:在提供服务的机器上,有程序监听特定端口上的通信流。例如大多数电子邮件通信流出现在端口25上,用于wwww的HTTP通信流出现在80端口上。
当应用程序希望通过 TCP 与另一个应用程序通信时,它会发送一个通信请求。这个请求必须被送到一个确切的地址。在双方“握手”之后,TCP 将在两个应用程序之间建立一个全双工 (full-duplex) 的通信,占用两个计算机之间整个的通信线路。TCP 用于从应用程序到网络的数据传输控制。TCP 负责在数据传送之前将它们分割为 IP 包,然后在它们到达的时候将它们重组。
TCP/IP 就是TCP 和 IP 两个协议在一起协同工作,有上下层次的关系。
TCP 负责应用软件(比如你的浏览器)和网络软件之间的通信。IP 负责计算机之间的通信。TCP 负责将数据分割并装入 IP 包,IP 负责将包发送至接受者,传输过程要经IP路由器负责根据通信量、网络中的错误或者其他参数来进行正确地寻址,然后在它们到达的时候重新组合它们。
1.2 UDP协议
用户数据报协议 (UDP): UDP(用户数据报协议)是一个简单的面向数据报的传输层协议。提供的是非面向连接的、不可靠的数据流传输。UDP不提供可靠性,也不提供报文到达确认、排序以及流量控制等功能。它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地。因此报文可能会丢失、重复以及乱序等。但由于UDP在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,故而传输速度很快。
1.3 IP协议
IP协议是计算机用来相互识别的通信的一种机制,每台计算机都有一个IP.用来在internet上标识这台计算机。 IP 负责在因特网上发送和接收数据包。通过 IP,消息(或者其他数据)被分割为小的独立的包,并通过因特网在计算机之间传送。IP 负责将每个包路由至它的目的地。
IP协议仅仅是允许计算机相互发消息,但它并不检查消息是否以发送的次序到达而且没有损坏(只检查关键的头数据)。为了提供消息检验功能,直接在IP协议上设计了传输控制协议TCP。
2、TCP的三次握手和四次挥手
2.1 三次握手
- TCP连接的建立:三次握手
每一方确认对方的存在
允许双方进行参数的协商
进行资源的分配
- 标志位
SYN: Synchronize Sequence Numbers,同步序列编号
ACK: Acknowledge Character,确认字符 (不同与ack)
- 关键字
seq:Sequence Number,序列号 代表本条消息的序列号 (按序交付)
ack:期待下一次收到的序列号,一般为seq+1
一次握手:客户端发送syn包(seq=x)到服务器,并进入SYN_SENT状态,等待服务器确认;
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(seq=y),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP 连接都将被一直保持下去。
先来看个总括图:
第一次握手
:Client将同步标志位SYN置为1(SYN为1就表示要建立连接,连接成功之后该位置会再次被置为0),请求序号seq=x(在所有的字节排列中,申请从哪一个字节开始发送,这个序号就一般表示当前已经发送到哪个序号,服务器同意后将会从下一个序号开始发送,第一次握手只有请求序号没有确认号),并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。
第二次握手
:Server收到数据包后由同步标志位SYN=1知道Client请求建立连接,确认标志位ACK置为1(这会才有确认标志位,第一次握手并没有确认标志位。当确认标志位为0时,确认号不起作用),ack=x+1(确认序号等于请求序号+1,表示x+1之前的Server都收到了,从Server发送的请求已经收到)。TCP是全双工协议,因此Server有可能也会给Client发送数据,因此Server也会向Client建立连接,Server将同步标志位SYN置为1(Server也要向Client发送请求,因此SYN也要被置为1),seq=y就表示Server给Client发送的数据开始序号。并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。
第三次握手
:因为连接要是双向的,Server确认后只是Client到Server连通了,因此Client也要确认一下,才能让Server向Client的连接也连通。Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了。
设计这样一个相似的情景:
-
客户端主机C说:“我可以给你发送数据吗?”
-
服务器S说:“可以的,不过我可能也会给你发送数据。”
-
C:“好,那我开始互相发送数据吧。”
2.2 四次挥手
- 与建立连接的“三次握手”类似,断开一个TCP连接则需要“四次握手”。
第一次挥手:主动关闭方发送一个FIN,用来关闭主动方到被动关闭方的数据传送,也就是主动关闭方告诉被动关闭方:我已经不 会再给你发数据了(当然,在fin包之前发送出去的数据,如果没有收到对应的ack确认报文,主动关闭方依然会重发这些数据),但是,此时主动关闭方还可 以接受数据。
第二次挥手:被动关闭方收到FIN包后,发送一个ACK给对方,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号)。
第三次挥手:被动关闭方发送一个FIN,用来关闭被动关闭方到主动关闭方的数据传送,也就是告诉主动关闭方,我的数据也发送完了,不会再给你发数据了。
第四次挥手:主动关闭方收到FIN后,发送一个ACK给被动关闭方,确认序号为收到序号+1,至此,完成四次挥手。
由于TCP连接是全双工的,因此,每个方向都必须要单独进行关闭。这一原则是当一方完成数据发送任务后,发送一个FIN来终止这一方向的连接,收到一个FIN只是意味着这一方向上没有数据流动了,即不会再收到数据了。但是在这个TCP连接上仍然能够发送数据,直到另一方向也发送了FIN。首先进行关闭的一方将执行主动关闭,而另一方则执行被动关闭,上图描述的即是如此。
第一次挥手
:Client发送一个FIN,以及选择号seq=u(表示:u之前的数据已经全部发送,并且数据发到u就可以截止了,就不再有数据了),用来关闭Client到Server的数据传送。Client进入FIN_WAIT_1状态。
第二次挥手
:Server收到FIN后,发送一个请求号seq=v和确认序号ack=u+1给Client。Server进入CLOSE_WAIT状态。
第三次挥手
:Server发送一个FIN,请求号为最新的seq=w和确认序号ack=u+1,用来关闭Server到Client的数据传送。Server进入LAST_ACK状态。
第四次挥手
:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为w+1。Server进入CLOSED状态,完成四次挥手。
四次挥手的情景大致是这样的:
-
客户端主机C说:“我没有数据了,断开连接吧。 ”
-
服务器S说:“好,但是我还有数据(不断给C发送数据,此时C已经不能给S发送数据了,但是必须要就收S发来的数据)。”
-
(当S给C发完数据后)S说:“我发完了,断开连接吧。”
-
C说:“好,断开连接吧。”
3、HTTP协议
引自维基百科HTTP:超文本传输协议(英文:HyperText Transfer Protocol,缩写:HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP是万维网的数据通信的基础。 设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。通过HTTP或者HTTPS协议请求的资源由统一资源标识符(Uniform Resource Identifiers,URI)来标识。
3.1 HTTP协议层
HTTP(HyperText Transfer Protocol),超文本传输协议,是一个基于TCP实现的应用层协议。
- OSI的层次结构
第7层
应用层:OSI中的最高层。为特定类型的网络应用提供了访问OSI环境的手段。应用层确定进程之间通信的性质,以满足用户的需要。应用层不仅要提供应用进程所需要的信息交换和远程操作,而且还要作为应用进程的用户代理,来完成一些为进行信息交换所必需的功能。它包括:文件传送访问和管理FTAM、虚拟终端VT、事务处理TP、远程数据库访问RDA、制造报文规范MMS、目录服务DS等协议;
第6层
表示层:主要用于处理两个通信系统中交换信息的表示方式。为上层用户解决用户信息的语法问题。它包括数据格式交换、数据加密与解密、数据压缩与恢复等功能;
第5层
会话层:—在两个节点之间建立端连接。为端系统的应用程序之间提供了对话控制机制。此服务包括建立连接是以全双工还是以半双工的方式进行设置,尽管可以在层4中处理双工方式 ;
第4层
传输层:—常规数据递送-面向连接或无连接。为会话层用户提供一个端到端的可靠、透明和优化的数据传输服务机制。包括全双工或半双工、流控制和错误恢复服务;
第3层
网络层:—本层通过寻址来建立两个节点之间的连接,为源端的运输层送来的分组,选择合适的路由和交换节点,正确无误地按照地址传送给目的端的运输层。它包括通过互连网络来路由和中继数据 ;
第2层
数据链路层:—在此层将数据分帧,并处理流控制。屏蔽物理层,为网络层提供一个数据链路的连接,在一条有可能出差错的物理连接上,进行几乎无差错的数据传输。本层指定拓扑结构并提供硬件寻址;
第1层
物理层:处于OSI参考模型的最底层。物理层的主要功能是利用物理传输介质为数据链路层提供物理连接,以便透明的传送比特流。
数据发送时,从第七层传到第一层,接收数据则相反。
上三层总称应用层,用来控制软件方面。下四层总称数据流层,用来管理硬件。
数据在发至数据流层的时候将被拆分。
在传输层的数据叫段,网络层叫包,数据链路层叫帧,物理层叫比特流,这样的叫法叫PDU(协议数据单元)
TCP/IP协议不是TCP和IP这两个协议的合称,而是指因特网整个TCP/IP协议族。
从协议分层模型方面来讲,TCP/IP由四个层次组成:网络接口层、网络层、传输层、应用层。
TCP/IP协议并不完全符合OSI的七层参考模型,OSI(Open System Interconnect)是传统的开放式系统互连参考模型,是一种通信协议的7层抽象的参考模型,其中每一层执行某一特定任务。该模型的目的是使各种硬件在相同的层次上相互通信。这7层是:物理层、数据链路层(网络接口层)、网络层(网络层)、传输层、会话层、表示层和应用层(应用层)。而TCP/IP通讯协议采用了4层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。由于ARPNET的设计者注重的是网络互联,允许通信子网(网络接口层)采用已有的或是将来有的各种协议,所以这个层次中没有提供专门的协议。实际上,TCP/IP协议可以通过网络接口层连接到任何网络上,例如X.25交换网或IEEE802局域网。
3.2 HTTP请求响应模型
HTTP由请求和响应构成,是一个标准的客户端服务器模型(B/S)。HTTP协议永远都是客户端发起请求,服务器回送响应。见下图:
HTTP是一个无状态的协议。无状态是指客户机(Web浏览器)和服务器之间不需要建立持久的连接,这意味着当一个客户端向服务器端发出请求,然后服务器返回响应(response),连接就被关闭了,在服务器端不保留连接的有关信息.HTTP遵循请求(Request)/应答(Response)模型。客户机(浏览器)向服务器发送请求,服务器处理请求并返回适当的应答。所有HTTP连接都被构造成一套请求和应答。
3.3 HTTP工作过程
一次HTTP操作称为一个事务,其工作整个过程如下:
- 地址解析
如用客户端浏览器请求这个页面:localhost.com:8080/index.html
从中分解出协议名、主机名、端口、对象路径等部分,对于我们的这个地址,解析得到的结果如下:
协议名:http
主机名:localhost.com
端口:8080
对象路径:/index.htm
在这一步,需要域名系统DNS解析域名localhost.com
,得主机的IP地址。
- 封装HTTP请求数据包
把以上部分结合本机自己的信息,封装成一个HTTP请求数据包
- 封装成TCP包,建立TCP连接(TCP的三次握手)
在HTTP工作开始之前,客户机(Web浏览器)首先要通过网络与服务器建立连接,该连接是通过TCP来完成的,该协议与IP协议共同构建Internet,即著名的TCP/IP协议族,因此Internet又被称作是TCP/IP网络。HTTP是比TCP更高层次的应用层协议,根据规则,只有低层协议建立之后才能,才能进行更层协议的连接,因此,首先要建立TCP连接,一般TCP连接的端口号是80。这里是8080端口。
- 客户机发送请求命令
建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可内容。
- 服务器响应
服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。
实体消息是服务器向浏览器发送头信息后,它会发送一个空白行来表示头信息的发送到此为结束,接着,它就以Content-Type应答头信息所描述的格式发送用户所请求的实际数据
- 服务器关闭TCP连接
一般情况下,一旦Web服务器向浏览器发送了请求数据,它就要关闭TCP连接,然后如果浏览器或者服务器在其头信息加入了这行代码
Connection:keep-alive
TCP连接在发送后将仍然保持打开状态,于是,浏览器可以继续通过相同的连接发送请求。保持连接节省了为每个请求建立新连接所需的时间,还节约了网络带宽。
4、http中用到的概念
4.1 HTTP报文格式
HTTP报文是面向文本的,报文中的每一个字段都是一些ASCII码
串,每个字段的长度是不确定的。
HTTP报文传过来的都是一堆的0x ASCII码
,例如" 61 63 63 65 70 74"这段十六进制ASCII码串对应的是“accept” 单词。
这些十六进制的数字经过浏览器或者专用工具比如wireshark或fiddler的翻译,可以得到HTTP的报文结构。
HTTP有两种报文:请求报文和响应报文。
4.2 请求报文
以下是通过抓包工具fiddler抓出来的一段HTTP请求报文
GET http://jsuacm.cn/ HTTP/1.1
Host: jsuacm.cn
Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3877.400 QQBrowser/10.8.4506.400
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
//”请求数据”(GET方式的请求一般不包含)
可见HTTP的请求报文由四部分组成:请求行
(request line)、请求头部
(header)、空行
和请求数据
(request data)
- 请求行
请求行由请求方法字段
、URL字段
和HTTP协议版本字段
3个字段组成,它们用空格分隔。例如:GET jsuacm.cn/template/js… HTTP/1.1
- 请求方法
HTTP协议的请求方法有GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT。GET和POST是最常用的请求方法。
GET
:最常见的一种请求方式,当客户端要从服务器中读取文档时,当点击网页上的链接或者通过在浏览器的地址栏输入网址来浏览网页的,使用的都是GET方式。GET方法要求服务器将URL定位的资源放在响应报文的数据部分,回送给客户端。使用GET方法时,请求参数和对应的值附加在URL后面,利用一个问号(“?”)代表URL的结尾与请求参数的开始,传递参数长度受限制。
GET方式的请求一般不包含”请求数据”部分,请求数据以地址的形式表现在请求行。显然,这种方式不适合传送私密数据。另外,由于不同的浏览器对地址的字符限制也有所不同,一般最多只能识别1024
个字符,所以如果需要传送大量数据的时候,也不适合使用GET方式。
POST
:和get一样很常见,对于上面提到的不适合使用GET方式的情况,可以考虑使用POST方式,因为使用POST方法可以允许客户端给服务器提供信息较多。POST方法将请求参数封装在HTTP请求数据中,以名称/值的形式出现,可以传输大量数据,这样POST方式对传送的数据大小没有限制,而且也不会显示在URL中。
HEAD
: 本质和get一样,只不过服务端接受到HEAD请求后只返回响应头,而不会发送响应内容。当我们只需要查看某个页面的状态的时候,使用HEAD是非常高效的,因为在传输的过程中省去了页面内容。
其他的请求方法并没有那么常见: PUT:和post类似,html表单不支持,发送资源与服务器,并存储在服务器指定位置,可用于替换资源,要求客户端事先知道该位置。
DELETE
:请求服务器删除某资源。和put都具有破坏性,可能被防火墙拦截。如果是https协议,则无需担心。
CONNECT
:HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。就是把服务器作为跳板,去访问其他网页然后把数据返回回来,连接成功后,就可以正常的get、post了。
OPTIONS
:获取http服务器支持的http请求方法,允许客户端查看服务器的性能,比如ajax跨域时的预检等。
TRACE
:回显服务器收到的请求,主要用于测试或诊断。一般禁用,防止被恶意攻击或盗取信息。
- URL
URL
:统一资源定位符,是一种资源位置的抽象唯一识别方法。
组成:<协议>://<主机>:<端口>/<路径>
端口和路径有事可以省略(HTTP默认端口号是80)
- HTTP协议版本
协议版本的格式为
:HTTP/主版本号.次版本号,常用的有HTTP/1.0和HTTP/1.1,现在最常用的是1.1
HTTP 1.0和HTTP 1.1的主要区别是什么?
长连接
: 在HTTP/1.0中,默认使用的是短连接,也就是说每次请求都要重新建立一次连接。HTTP是基于TCP/IP协议的,每一次建立或者断开连接都需要三次握手四次挥手的开销,如果每次请求都要这样的话,开销会比较大。因此最好能维持一个长连接,可以用个长连接来发多个请求。HTTP1.1起,默认使用长连接 ,默认开启Connection: keep-alive。 HTTP/1.1的持续连接有非流水线方式和流水线方式 。流水线方式是客户在收到HTTP的响应报文之前就能接着发送新的请求报文。与之相对应的非流水线方式是客户在收到前一个响应后才能发送下一个请求。
带宽优化及网络连接的使用
: HTTP1.0中,存在一些浪费带宽的现象,例如客户端只是需要某个对象的一部分,而服务器却将整个对象送过来了,并且不支持断点续传功能,HTTP1.1则在请求头引入了range头域,它允许只请求资源的某个部分,即返回码是206(Partial Content),这样就方便了开发者自由的选择以便于充分利用带宽和连接。
Host域
:在HTTP1.0中认为每台服务器都绑定一个唯一的IP地址,因此,请求消息中的URL并没有传递主机名(hostname)。但随着虚拟主机技术的发展,在一台物理服务器上可以存在多个虚拟主机(Multi-homed Web Servers),并且它们共享一个IP地址。HTTP1.1的请求消息和响应消息都应支持Host头域,且请求消息中如果没有Host头域会报告一个错误(400 Bad Request)
。HTTP1.0是没有host域的,HTTP1.1才支持这个参数。
错误状态响应码
: 在HTTP1.1中新增了24个错误状态响应码,如409(Conflict)表示请求的资源与资源的当前状态发生冲突;410(Gone)表示服务器上的某个资源被永久性的删除。
缓存处理 : 在HTTP1.0中主要使用header里的If-Modified-Since,Expires来做为缓存判断的标准,HTTP1.1则引入了更多的缓存控制策略例如Entity tag,If-Unmodified-Since, If-Match, If-None-Match等更多可供选择的缓存头来控制缓存策略。
- HTTP2.0的优化
新的二进制格式
:HTTP1.x的解析是基于文本。基于文本协议的格式解析存在天然缺陷,文本的表现形式有多样性,要做到健壮性考虑的场景必然很多,二进制则不同,只认0和1的组合。基于这种考虑HTTP2.0的协议解析决定采用二进制格式,实现方便且健壮。
多路复用
:在同一个TCP连接中,同一时刻可以发送多个请求和响应,下一次的请求不需要等待上一个响应来之后再发送。但响应的顺序是不变的,FIFO(先进先出)。2.0之前是同一个连接只能用一次, 如果开启了keep-alive,虽然可以用多次,但是同一时刻只能有一个HTTP请求。
HTTP2.0的多路复用主要是指:因为http2.0的传输是基于二进制帧的。每一个TCP连接中承载了多个双向流通的流,每一个流都有一个独一无二的标识和优先级,而流就是由二进制帧组成的。二进制帧的头部信息会标识自己属于哪一个流,所以这些帧是可以交错传输,然后在接收端通过帧头的信息组装成完整的数据。这样就解决了线头阻塞的问题,同时也提高了网络速度的利用率。
header压缩
,HTTP1.x的header带有大量信息,而且每次都要重复发送,HTTP2.0使用HPACK算法对header的数据进行压缩,避免了重复header的传输,又减小了需要传输数据的大小,基本原理是客户端和服务端分别缓存一份索引表,如果头部存在于索引表,则用对应的索引值;否则进行霍夫曼编码,并加入索引表。参考
服务器推送
, 当我们对支持HTTP2.0的web server请求数据的时候,服务器会顺便把一些客户端需要的资源一起推送到客户端,免得客户端再次创建连接发送请求到服务器端获取。这种方式非常合适加载静态资源。服务器端推送的这些资源其实存在客户端的某处地方,客户端直接从本地加载这些资源就可以了,不用走网络,速度自然是快很多的。
- 请求头部
请求头部
为请求报文添加了一些附加信息,由“名/值”对组成,每行一对,名和值之间使用冒号分隔。请求头部通知服务器有关于客户端请求的信息。比较常见的有:
-
空行 请求头部的最后会有一个
空行
,表示请求头部结束,接下来为请求数据。 -
请求数据
请求数据不在GET方法中使用,而在POST方法中使用。POST方法适用于需要客户填写表单的场合。与请求数据相关的最长使用的请求头部是Cntent-Type和Content-Length
4.3 响应报文
以下是通过抓包工具fiddler抓出来的一段HTTP响应报文
HTTP/1.1 200 OK
Server: nginx/1.18.0 (Ubuntu)
Date: Wed, 20 Oct 2021 06:46:15 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate
Pragma: no-cache
Content-Length: 737265
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="">
<meta name="author" content="">
<link rel="icon" href="../../favicon.ico">
<title>
吉首大学 </title>
HTTP响应报文由状态行(
status line)、响应头部
(headers)、空行
(blank line)和响应数据
(也叫响应体或响应正文)(response body)4个部分组成。
- 状态行
状态行由3部分组成,分别为:协议版本
、状态码
、状态码描述
。其中协议版本与请求报文一致,状态码描述是对状态码的简单描述。
- HTTP状态码
- 响应头部
常见响应头部及描述如下:
- 空行
响应头部的最后会有一个空行,表示响应头部结束,接下来为响应数据。与请求报文一致。
- 响应体
用于存放需要返回给客户端的数据信息。fiddler抓出来的一段HTTP响应数据是一段HTML。