前言
本篇博客主要介绍Web的一些前端知识,为接下来的JEE学习了解前端一些基本的储备知识。
一、HTTP协议基本构成
HTTP:又名超文本传输协议,是一个在计算机世界里专门在两点之间传输文字,音频,视频,图片等超文本数据的约定和规范。
- 超文本:超文本是用超链接的方法,将各种不同空间的文字信息组织在一起的网状文本。超文本更是一种用户界面范式,用来显示文本及与文本之间相关的内容,它的本质和基本特征就是在文档内部和文档之间建立关系,正是这种关系给了文本以非线性的组织。
注:为了不仅仅只在互联网上表示出文本而出现的技术,文本语义的拓展。
互联网刚开始只能把文本解析为二进制包储存起来,后来互联网发展,文本语义得到扩展,出现超文本,不再局限于只表示文本。 - 传输:我们传输的超文本会被解析为二进制包,而这些二进制包由计算机传输到另一个终端的过程叫做传输。
- 协议:公认的约定和规范。
- https协议:并非是一种新的协议,而是http通信接口用SSL和TLS协议代替。所以https=加密+完整性+认证+http,http是先和SSL通信,然后由SSL和TLS通信,TLS独立于http协议。
debug:通过http状态码解读
。
二、网络模型
OSI模型:iso提出的七层网络模型,本博客不讨论它,只是相比于一般的模型多了会话层和表示层:表示层主要包括数据压缩和数据加密以及数据描述。会话层提供了数据交换的定界和同步功能,包括建立检查点和恢复方案。
1.应用层(报文)
为特定应用程序提供数据传输服务,例如HTTP(超文本传输协议)、SMTP(简单邮件传输协议)、FTP(文件传输协议)、DNS(域名系统),该层为用于通信的应用程序和用于消息传输的底层网络提供接口。应用层正是应用层协议得以存在和网络应用得以实现的地方。 应用层协议分布在多个端系统上,一个端系统应用程序与另外一个端系统应用程序交换信息分组,我们把位于应用层的信息分组称为报文(message)。
2.传输层(报文段)
- 端口的概念:端口(port)就是传输层的应用程序接口。应用层的各个进程是通过相应的端口才能与运输实体进行交互。服务器一般都是通过人们所熟知的端口号来识别的,端口由16位表示,也就是说一台主机有65536个端口。
- UDP:用户数据报协议UDP提供了不可靠的无连接传输服务。它使用IP携带报文,但增加了对给定主机上多个目标进行区别的能力。 UDP没有确认机制;不对报文排序;没有超时机制;没有反馈机制控制流量;使用UDP的应用程序要承担可靠性方面的全部工作。
- TCP: 传输控制协议TCP(Tranmission Control Protocol)面向连接的、可靠的、端到端的、基于字节流的传输协议;TCP不支持多播(multicast)和广播(broadcast);
- TCP的连接建立:
- 三个关注点:
- 要使每一方能够确知对方的存在
- 要允许双方协商一些参数
- 能够对运输实体资源(缓存大小、连接表中的项目等)进行分配
- 三次握手:
- 最初客户/服务器的 TCP 进程都处于 CLOSED(关闭)状态。在本实例中, A 主动打开连接,而 B 被动打开连接。
- B 的 TCP 服务器进程先创建传输控制块 TCB,并处于 LISTEN(收听) 状态,等待客户的连接请求。
- A 的 TCP 客户进程创建传输控制模块 TCB。并向 B 发出连接请求报文段,首部中的同部位 SYN = 1,选择一个初始序号 seq = x。TCP 客户端进程进入 SYN-SENT(同步已发送) 状态。TCP 规定,SYN 报文段(即 SYN = 1 的报文段)不能携带数据,但要消耗一个序号
- B 收到连接请求报文段后,如同意建立连接,则向 A 发送确认。在确认报文段中应把 SYN 位和 ACK 位都置1,确认号是 ack = x + 1,同时也为自己选择一个初始序号 seq = y。这时 TCP 服务器进程进入 SYN-RCVD(同步收到) 状态。这个报文段也不能携带数据,但同样要消耗掉一个序号。
- TCP 客户进程收到 B 的确认后,还要向 B 给出确认。确认报文段的 ACK 置1,确认号 ack = y + 1,而自己的序号 seq = x + 1。TCP 的标准规定,ACK 报文段可以携带数据。但如果不携带数据则不消耗序号,在这种情况下,下一个数据报文段的序号仍是 seq = x + 1。这时,TCP 连接已经建立,A 进入 ESTABLISHED(已建立连接) 状态。
- 当 B 收到 A 的确认后,也进入 ESTABLISHED 状态。
四次握手:B 发送给 A 的报文段,可拆成两个报文段。先发送一个确认报文段(ACK = 1,ack = x + 1),然后再发送一个同步报文段(SYN = 1,seq = y)。
- 三个关注点:
- TCP的释放:
- A 的应用进程先向其 TCP 发出连接释放报文段,并停止再发送数据,主动关闭 TCP 连接。A 把连接释放报文段首部的终止控制位 FIN 置1,其序号 seq = u,它等于前面已传送过的数据的最后一个字节的序号加1。这时 A 进入 FIN-WAIT-1(终止等待1) 状态,等待 B 的确认。TCP 规定,FIN 报文段即使不携带数据,也消耗一个序号。
- B 收到连接释放报文段后即发出确认,确认号是 ack = u + 1,而这个报文段自己的序号是 v,等于 B 前面已传送过的数据的最后一个字节的序号加1。B随即进入 CLOSE-WAIT(关闭等待) 状态。TCP 服务器进程这时应通知高层应用进程,因而从 A 到 B 这个方向的连接就释放了,这时的 TCP 连接处于 半关闭(half-close) 状态,即 A 已经没有数据要发送了,但 B 若发送数据,A 仍要接收。也就是说,从 B 到 A 这个方向的连接并未关闭,这个状态可能会持续一段时间。
- A 收到来自 B 的确认后,就进入 FIN-WAIT-2(终止等待2) 状态,等待 B 发出的连接释放报文段
- 若 B 已经没有要向 A 发送的数据,其应用进程就通知 TCP 释放连接。这时 B 发出的连接释放报文段必须使 FIN = 1。现假定 B 的序号为 w(在半关闭状态 B 可能又发送了一些数据)。B 还必须重复上次已发送过的确认号 ack = u + 1。这时 B 就进入 LAST-ACK(最后确认)状态,等待 A 的确认
- A 在收到 B 的连接释放报文段后,必须对此发出确认。在确认报文段中把 ACK 置1,确认号 ack = w + 1,而自己的序号是 seq = u + 1(根据 TCP 标准,前面发送过的 FIN 报文段要消耗一个序号)。然后进入到 TIME-WAIT(时间等待)状态。此时 TCP 连接还没有释放掉。必须经过时间等待计时器(TIME-WAIT timer)设置的时间2MSL后,A 才进入到 CLOSED 状态
- 当 A 撤销相应的传输控制块 TCB 后,就结束了这次的 TCP 连接
- 名词解释
面向连接: 应用程序在使用 TCP 协议之前,必须先建立 TCP 连接。在传送数据完毕后,必须释放已经建立的 TCP 连接。
可靠性: 通过 TCP 连接传送的数据,无差错、不丢失、不重复,并且按序到达。
端到端:每一条 TCP 连接只能有两个端点,每一条 TCP 连接只能是点对点的(一对一)。
基于字节流:虽然应用程序和 TCP 的交互式一次一个数据块(大小不等),但 TCP 把应用程序交下来的数据仅仅看成是一连串的无结构的字节流。
3.网络层(数据报)
网络层的目的是实现两个端系统之间的数据透明传送,具体功能包括寻址和路由选择、连接的建立、保持和终止等。它提供的服务使传输层不需要了解网络中的数据传输和交换技术。
网络层中包括IP协议,该协议定义了数据包中的各个字段以及端系统和路由器如何作用于这些字段。
4.链路层(帧)
数据链路层的最基本的功能是向该层用户提供透明的和可靠的数据传送基本服务。
透明性:是指该层上传输的数据的内容、格式及编码没有限制,也没有必要解释信息结构的意义;
可靠的:传输使用户免去对丢失信息、干扰信息及顺序不正确等的担心。在物理层中这些情况都可能发生,在数据链路层中必须用纠错码来检错与纠错。数据链路层是对物理层传输原始比特流的功能的加强,将物理层提供的可能出错的物理连接改造成为逻辑上无差错的数据链路,使之对网络层表现为一无差错的线路。
5.物理层
物理层规定:为传输数据所需要的物理链路创建、维持、拆除,而提供具有机械的,电子的,功能的和规范的特性。简单的说,物理层确保原始的数据可在各种物理媒体上传输。
三 、URL和URI
-
URI(统一资源标识符)是标识逻辑或物理资源的字符序列,与URL类似,也是一串字符。通过使用位置,名称或两者来标识Internet上的资源;它允许统一识别资源,URI包括URN(统一资源标记标识符)和URL(统一资源名称)。
-
URL(统一资源定位符)是Internet上资源的地址,可以定义为引用地址的字符串,用于指示资源的位置以及用于访问它的协议。
URL是在网络上定位资源的最普遍使用的方式,它提供了一种通过描述其网络位置或主要访问机制来检索物理位置的表示的方法。
URL中描述了协议,该URL用于检索资源和资源名称。如果资源是Web类型资源,则URL在开头包含http / https。同样,如果资源是文件,则以ftp开头,如果资源是电子邮件地址,则以mailto开头。 -
URL组成:协议//域名:端口(省略采用默认端口80)/虚拟目录/
-
虚拟目录部分:从第一个/到最后/为止。
-
文件名部分:从最后一个/到?为止,如果没有?,则从域名最后一个/到#为止,如果都没有,那么从最后一个/到结束,都是文件部分。
-
锚部分:从#开始到最后部分。
-
参数部分:从?开始到#为止都是参数部分,又称搜索、参数部分。
总结
Web前端的知识大都由一系列协议构成,这样用来规范互联网上资源的传输和管理,而我们就需要了解这些规范和协议,为之后的学习服务(不需要了解太深入,太多了,了解大概就OK的)。