网络基础协议随笔

日常的开发中,大家关注的重点基本都在前端的展现、交互和性能上,而这些都算是浏览器上层的一些表现。而对于底层的一些协议关注的相对较少,这里就主要介绍一下这些基础协议。

基础协议有很多,这里主要介绍一下最常见的http、https、tcp/udp协议。


基本概念

协议是多方之间相互商定的一种沟通或统一行动时的一种规则。互联网协议也是一样,规定了不同终端之间通信时数据传输的方式、格式等内容。在七层网络模型中存在着各种不同的协议,其中 
http (Hypertext Transfer Protocol)超文本传输协议,是一种处于应用层的,服务器与浏览器之间进行文本传输的无状态协议。 
https (Hypertext Transfer Protocol over Secure Socket Layer)基于SSL的HTTP协议,可以理解为加密型的http协议,同时https一般都不在使用http的默认80端口,改用433端口。 
TCP (Transmission Control Protocol)传输控制协议,一种面向连接的、可靠的、基于字节流的传输层通信协议。 
UDP (User Datagram Protocol)用户数据协议,与TCP类似,也是一种传输层协议,不同的是,它是一种面向无连接的、不可靠的协议。

一次HTTP请求的过程中都发生了什么?

这是一道经典的前端面试题,刚毕业找工作的过程中被问了N遍。简而言之,从你输入网址到你看到页面,大致经历了以下过程 
1、域名解析—–有求于人,总要先找到人家吧。 
2、建立连接—–找到地址了,快快联络,相互认识总是要的。 
3、发送请求—–提出请求,等待回复。 
4、接收响应—–得到回复,准备开工。 
5、渲染页面—–开工盖房,盖完收工。 
下面先从网址说起

网址?URL?

我们现在所说的网址,也称之为URL,全称Uniform Resource Locator。用于表明某一资源在网络上的地址。基本格式如下 
schema://host[:port#]/path/…/[?search][#hash] 
scheme 指定低层使用的协议(例如:http, https, ftp) 
host HTTP服务器的IP地址或者域名 
port# HTTP服务器的默认端口是80,这种情况下端口号可以省略。 
path 访问资源的路径 
search 发送给http服务器的数据 
hash 哈希 
其中hash是不会传给服务器的,并且hash后面的部分在url解析的时候也会被当作hash,因此hash必须放在最后,避免其他信息被影响。

域名解析,找到真正的门牌号

通常情况下我们在浏览器窗口输入的网址都不是目标的原始地址,而是一种为了方便记忆的语义化之后的地址。而在网络中一个终端的实际地址其实是IP地址。为了实现与服务器的通信,首要的就是找到服务器的IP地址,而由网址到IP地址的解析过程即为域名解析。 
域名解析大致分为几个步骤 
1、浏览器缓存解析,在chrome中可以使用chrome://net-internals/#dns命令查询浏览器缓存。 
2、本机缓存解析 ,windows下可以在dos窗口使用ipconfig /displaydns命令查询本机缓存。 
3、本机host,BIOS缓存解析 
4、向DNS服务器发送请求解析,这种解析请求是面向无连接的,客户端只是发送请求,没收到回复就继续请求。本身不存在一个确认双方连接状态的过程,属于一种不安全、稳定的通信,而这就是UDP协议的一个表现。 
每一步中如果解析出结果就停止向下解析,返回IP地址。这也就是我们在平时的工作中会去配置host文件,以达到对不同环境映射的原理。

三次握手?在么?在?有个请求

在完成了域名解析之后,浏览器确定了服务器地址。那么就要开始通信了。为了确保准确的连接到服务器,确保通信成功,这个时候通过传输层tcp协议开始三次握手。

1)浏览器手心发送一个连接请求,同时进入请求已发送状态,等待服务器的回复 2)服务器接收到请求后,则向浏览器返回一个确认信息,并进入请求已接收状态,等待浏览器再次确认。

3)浏览器端再次发送一个连接确认信号,并进入连接准备状态,服务端确认后也进入准备状态,双方即可开始通信。

与http不同的是,https会在三次握手的过程中将加密协议等信息一并传输,最终在建立连接之后浏览器与服务器之间的通信数据,就可以通过加密来保证通信的安全性。

请求响应数据?给我这个,好 拿去

建立连接后,双方开始http协议通信。而在这个通信过程中,双方都对数据添加了一些额外的信息来表明双方需要的什么样的格式、那种缓存策略、安全机制等等,这些信息就是头部信息/首部信息。 
首部信息大致可以分成三个部分, 
1)通用部分 
2)请求头部分 
3)响应头部分

通用部分 
请求与响应都遵守的通用部分主要包括一些基本的连接信息和缓存信息等等,如

首部 描述
Connection 允许客户端和服务器指定与请求/响应连接有关的选项,http1.1版本默认keep-alive
Date 提供日期和时间标志,说明报文是什么时间创建的
MIME-Version 给出了发送端使用的MIME版本
Via 显示了报文经过的中间节点(代理、网关)
Cache-Control 用于随报文传送缓存指示,no-cache不缓存
Pragma 另一种随报文传送指示的方式,但并不专用于缓存,no-cache不缓存

请求头信息 
请求头信息主要用于向服务器说明是从哪里发出的请求、请求什么格式的数据、请求数据时有什么偏好、中间经过的一些代理以及浏览器自身的一些属性等等。

首部 描述
基础信息 基础信息
Host 给出了接收请求的服务器的主机名和端口号
Referer 提供了包含当前请求URI的文档的URL
User-Agent 将发起请求的应用程序名称告知服务器(User-Agent)用户代理
Accept 告诉服务器能够发送哪些媒体类型,此外还有Accept-Charset、Accept-Encoding、Accept-Language
条件信息 条件信息
Expect 允许客户端列出某请求所要求的服务器行为
If-Match 如果实体标记与文档当前的实体标记相匹配,就或者这份文档
If-Modified-Since 除非在某个指定的日期之后资源被修改过,否则就限制这个请求
If-Range 允许对文档的某个范围进行条件请求
If-Unmodified-Since 除非在某个指定的日期之后资源没有被修改过,否则就限制这个请求
Range 如果服务器支持范围请求,就请求资源的指定范围
安全认证信息 安全认证信息
Authorization 包含了客户端提供给服务器,以便对其自身进行认证的数据
Cookie 客户端用它想服务器传送一个令牌-他并不是真正的安全首部,但却是隐含了安全功能
代理信息 代理信息
Proxy-Authorization 与Authorization首部相同,但这个首部是在与代理进行认证时使用的
Proxy-Connection 与Connection首部相同,但这个首部是在于代理建立连接时使用的

响应头信息 
响应头则主要是向浏览器说明服务器是从哪里响应、响应的内容有多大、遵循什么规范以及一些代理、安全认证信息等等,以便于浏览器更好地更快更安全的处理数据。

首部 描述
基础信息 基础信息
Age (从最初创建开始)响应持续时间
Public 服务器为其资源支持的请求方法列表
Server 服务器应用程序软件的名称和版本
Accept-Ranges 对此资源来说,服务器可接受的范围类型
Vary 服务器查看的其他首部的列表,可能会使响应发生变化;也就是说,这是一个首部列表,服务器会根据这些首部的内容挑选出最合适的资源版本发送给客户端。
安全认证信息 安全认证信息
Proxy-Authenticate 来自代理的对客户端的质询列表
Set-Cookie 不是真正的安全首部,但隐含有安全功能;可以在客户端设置一个令牌,以便服务器对客户端进行标识。此外还有Set-Cookie2
缓存信息 缓存信息
ETag 与此实体有关的实体标记
Expires 实体不在有效,要从原始的源端再次获取此实体的日期和时间
Last-Modified 这个实体最后一次被修改的日期和时间
响应实体信息 响应实体信息
Content-Type 这个主体的对象模型
Content-MD5 主体的MD5校验,此外还有Content-Base,Content-Encoding,Content-Language,Content-Length,Content-Location,Content-Range

除此之外http协议中还定义了一些额外的头部信息辅助通信,比如用于处理跨域请求的

首部 描述
跨域信息 跨域信息
Access-Control-Allow-Origin 允许的访问域,一般设为*
Access-Control-Allow-Methods 允许的请求方式列表,如POST, GET, OPTIONS,DELETE,PUT

数据加载、渲染

这个在这部分不做细讲。

说到这里,一次http请求的大致过程就说完了,其中也包括了http、tcp/udp协议的一些信息,并不详细,主要供给大家做一个简略的介绍。下面在简要介绍一些我们工作中经常用到的东西。

代理

代理在我们的工作用应用很多,比如FQ用的VPN代理,映射文件的nginx,CDN服务器、代理软件Charles、fidder等等,严格的说host本身也算得上是一种代理。而代理又分为正向代理和反向代理。

正向代理介于客户端与服务器之间,此时客户端一般不能直接访问服务器,而代理服务器可以。这种情况下,中间代理就成为了一个请求与响应的中转站,转发我们的请求,并把服务器的响应转回给我们。也就是我们平常使用vpnFQ时的状态。

而反向代理呢,一般作用在服务端,把用户的请求映射到不同的实际资源地址上去。就像我们在平时使用nginx一样,把一系列的请求映射到本地。这一点和Charles这些代理软件,原理上都是一样的。

再比如CDN,内容分发网络,本身也是一种反向代理。CDN首先会在DNS解析阶段拿到优先解析的特权,并把DNS解析的请求发送给CDN服务器。服务器会根据用户的IP,就近的选择一台缓存服务器,并告知用户去和这个服务器通信。这样,用户在访问时就可以把请求定向到距离用户最近的网络节点上,降低请求节点距离,提高请求效率。这也就是CDN要相对比较快的原因啦。

时间: 2024-10-10 10:51:07

网络基础协议随笔的相关文章

网络基础协议之http协议

作为一个开发人员,掌握必要的 HTTP 协议十分重要,下面就通过本文记录自己对 HTTP 协议的理解.本文很长,希望你有耐心看完,会有很多收获的,面试的时候很受用. 首先让我们从一个问题入手,当我们在浏览器中输入  http://www.baidu.com/ 访问百度的时候浏览器做了哪些事情.(这里以 Chrome 浏览器为例) 首先 Chrome 搜索自身的 DNS 缓存.(如果 DNS 缓存中找到百度的 IP 地址,就跳过了接下来查找 IP 地址步骤,直接访问该 IP 地址.) 搜索操作系统

网络基础协议part 1

1.计算机与计算机之间如何进行联系? 两个独立的计算机是无法进行交流的,如同人一样,如果没有语言的存在就不能正常的交流.而在计算机领域,互联网协议就如同一门计算机与计算机交流的语言.但是为了全世界人们有交流,就产生了英语.而互联网协议也是世界组织进行了一系列统一的标准.即互联网的本质就是一系列的协议,总称为"互联网协议". 互联网协议的功能:定义计算机如何接入internet,以及接入internet的计算机通信的标准. 2.OSI七层协议 互联网协议按照功能不同分为osi七层或tcp

网络基础知识---Roberts协议

Robots协议(也称为爬虫协议.机器人协议等)的全称是“网络爬虫排除标准”(Robots Exclusion Protocol),网站通过Robots协议告诉搜索引擎哪些页面可以抓取,哪些页面不能抓取. Robots协议是网站出于安全和隐私考虑,防止搜索引擎抓取敏感信息而设置的.搜索引擎的原理是通过一种爬虫spider程序,自动搜集互联网上的网页并获取相关信息.而鉴于网络安全与隐私的考虑,每个网站都会设置自己的Robots协议,来明示搜索引擎,哪些内容是愿意和允许被搜索引擎收录的,哪些则不允许

【网络基础】地址解析协议(ARP协议)简介

地址解析协议: 即ARP协议,是根据IP地址获取物理地址的一个TCP/IP协议 功能: 主机将ARP请求广播到网络上的所有主机,并接收返回消息,确定目标IP地址的物理地址,同时将IP地址和硬件地址存入本机ARP缓存中,下次请求时直接查询ARP缓存. 工作原理: 我们以主机A(209.0.0.5)向主机B(209.0.0.6)发送数据为例. 1.当发送数据时,主机A会在自己的ARP缓存表中寻找是否有目标IP地址. 2.如果找到了,也就知道了目标MAC地址,直接把目标MAC地址写入帧里面发送就可以了

http基础(1.了解web及网络基础,2.简单的http协议)

第一章:了解web及网络基础 1.http:超文本传输协议 2.tcp/ip协议族:通常使用的网络是在tcp/ip协议族的基础上运作的,而http属于它内部的一个子集. 3.tcp/ip协议族按层次分别分为:应用层.传输层.网络层.数据链路层.分层的好处就是分工明确,方便后续修改维护. (1)应用层:

计算机基础系列一:网络基础和python基础(变量和程序交互)7月13和14日课堂预习/随笔/作业

上节课回顾   - 操作系统的两大作用   - 多道技术   一.网络基础   -1.互联网协议---就是计算机的网络通信标准   -2.网络指的是-计算机于计算机 之间通过物理连接介质(网络设备连接到一起二.osi七层协议   -五层为 应用 传输 网络 数据链 物理   2.1-以太网协议规定电信号为一组数据帧  基于Mac地址通讯仅限局域网通信       -每一组帧分为报头head和数据date两部分      -报头长度是固定的包含数据的类型和地址      -规定接入互联网必须要有一

异常处理与网络基础中的tcp,udp协议

# 异常处理: # 什么是异常?异常和错误的区别 # Error 语法错误 比较明显的错误 在编译代码阶段就能检测出来 # Iteration 异常 在执行代码的过程中引发的异常 # 异常发生之后的效果 # 一旦在程序中发生异常,程序就不再继续执行了 # try: # # name # [][3] # except NameError: # print("请设置好变量!!") # except IndexError: #分支异常处理 # print('请认真!!') # # excep

网络编程—网络基础概览、socket,TCP/UDP协议

网络基础概览 socket概览 socket模块-TCP/UDP的实现 TCP/UDP总结 网络基础概览 osi七层协议各层主要的协议 # 物理层传输电信号1010101010 # 数据链路层,以太网协议,arp协议.对这些信号进行分组,同时规范了分组形式--以太网协议,头部是mac地址中间是信息, # 网络层:ip协议,arp协议帮忙找到mac地址,ip,子网掩码,网关(下面有一些简单概括) # 传输层:tcp协议,udp协议 # (socket)就是一组接口,将复杂的tcp协议和udp协议隐

网络基础 ----------- osi 与 一些协议

1.了解 OSI ISO IOS ISO(全称:International Organization for Standardization) 国际标准化组织, 成立于1947年2月23日,制定全世界工商业国际标准的国际标准建立机构,I总部设于瑞士日内瓦 在制定计算机网络标准方面,起着重大作用的两大国际组织是:国际电信联盟电信标准化部门,与国际标准组织(ISO) OSI(全称:Open System Interconnection Reference Model) 开放系统互联参考模型 是一种概