前言
计算机网络是一个复杂的系统,采取分层的结构,可以将复杂系统分解为可管理的模块。每层模块专注解决特定问题,使其各司其职,便于管理维护。
在网络分层模型中,每个分层都接收由它下一层所提供的特定服务,并且负责为自己的上一层提供特定的服务。上下层之间进行交互时所遵循的约定叫做接口;同一层之间的交互所遵循的约定叫做协议。
一.五层网络模型
网络模型分四层,五层,七层。但我们主要以四层或者五层为主。
五层网络模型如下:
第一层:物理层,将0,1比特流与电压,光等传输方式之间进行互换,实现计算机节点之间比特流的传输。
第二层:数据链路层:负责物理层面上互连的节点之间的通信传输,将01序列划分为有意义的数据
帧发送给对端。
第三层:网络层:将数据传送到目标地址,判断经过哪个路由传送到目标地址。负责寻址和路由选择。
第四层:传输层:管理两个节点之间的数据传送,保证数据传送可靠。
第五层:应用层:为应用程序提供服务并规定应用程序中通信的细节,规定协议。
二.数据的传送
发送方从第五层应用层到第一层物理层从上到下按照顺序传输数据,接收方从一层到五层从下到上传输数据。
每个分层在处理由上一层传过来的数据时附上当前分层的首部信息,一层一层往下传进行封装。然后接收端对收到的数据进行解封装,最终将发送端的数据恢复为原状。
三.应用层协议
1.URL
URL(uniform resource locator,统一资源定位符)用于定位网络服务。
URL是一个固定格式的字符串
它表达了:
从网络中的哪台计算机(domain)中的哪个程序(port)寻找哪个服务(path),并注明了获取服务的具体细节(path),以及要用什么样的协议通信(schema)。
这里面包含了一些细节:
当协议是 http 端口为 80 时,端口可以省略
当协议是 https 端口为 443 时,端口可以省略
schema,domain,path 是必填的,其他的根据具体的要求填写
2.HTTP协议
HTTP超文本传输协议(Hyper Text Transfer Protocol,HTTP)是一个广泛运用于互联网的应用层协议。
该协议规定了两个方面的内容:
传递消息的模式
传递消息的格式
传递消息的模式:
HTTP使用一种极为简单的消息传递模式,「请求-响应」模式,并且HTTP是无状态协议,意味着服务器不会在两个请求之间保留任何数据(状态)。
发起请求的称之为客户端,接收请求并完成响应的称之为服务器。
「请求-响应」完成后,一次交互结束。
传递消息的格式:
HTTP的消息格式是一种纯文本的格式,文本分为三个部分:
3.HTTP报文
HTTP报文分为请求报文和响应报文两种类型,每种都有其特定的格式。
3.1请求报文
HTTP请求由请求行,请求头,空行,请求体 构成。(请求头和请求体之间必须有空行,即使请求没有请求体,也要有空行!)
1.请求行:
请求行包含三要素:请求方法,URL,HTTP版本。
- 一个请求方法:一个动词(像GET,PUT,POST等),或者一个名词(HEAD或OPTIONS),描述要执行的动作。
- 请求目标:通常是一个URL,或者是协议,端口和域名的绝对路径
- HTTP版本:定义了剩余报文的结构,作为对期望的响应版本的指示符。
在HTTP协议中,请求方法仅有语义的区别,只是表达了这次请求的「愿望」。
比如GET表达了客户端想要获取一些东西,POST表达了客户端想要提交一些东西。
常见的请求方法有:
- GET:获取
- POST:提交
- PUT:修改
- DELETE:删除
2.请求头-host:
请求头由一系列的键值对组成,允许客户端向服务器端发送一些附加信息或者客户端自身的信息,如用户代理(User-Agent)、接受的内容类型(Accept)、身份验证凭证(Authorization)等。
常见的请求头如下:
- User-Agent:标识客户端使用的浏览器和操作系统信息。
- Accept:指定客户端能够处理的内容类型,即可接受的媒体类型。
- Content-Type:指定请求体中的数据格式类型。常见的取值有
text/html、application/json、application/x-www-form-urlencoded等。- Authorization:用于进行身份验证的凭证信息。常见的取值有Bearer Token、Basic Authentication等。
- Cookie:包含来自客户端的Cookie信息。
- Referer:指示当前请求是从哪个URL页面发起的。
- Host:指定服务器的域名或IP地址。
- X-Requested-With:指示请求是否由Ajax发起的。通常在Ajax请求中会设置该头部字段,取值为"XMLHttpRequest"。
- Content-Length:指定请求体的长度。
- Cache-Control:控制缓存行为的指令。用于指定客户端和代理服务器如何缓存响应。
Content-Type标注了附带的请求体是什么格式。
比如,请求体的数据为 loginId:admin,loginPwd:123456 请求体可以用不同的格式发出
Content-Type: application/x-www-form-urlencoded
loginId=admin&loginPwd=123123
Content-Type: application/json
{ "loginId": "admin", "loginPwd": "123123" }
3.请求体-body:
请求体只有在发送POST请求时才会有请求体,GET方法没有请求体。
3.2 响应报文
响应报文也由四个部分组成:状态行,响应头,空行,响应体。
1.状态行:
状态行也由三部分组成:包括HTTP版本,状态码,以及对状态码的文本描述。
常见的响应码如下:
常见的状态码有:
200 OK:一切正常。
301 Moved Permanently:资源已被永久重定向。所请求的页面已经转移至新的地址 ,地址放到响应头的Location了。
302 Found:资源已被临时重定向。所请求的页面已经临时转移至新的 URL 。地址同样放到响应头的Location了。
304 Not Modified:文档内容未被修改。客户端有缓冲的文档并发出了一个条件性的请求,服务器已收到请求,但由于文档未修改,所以服务器想告诉客户,原来缓冲的文档还可以继续使用。
400 Bad Request:语义有误,当前请求无法被服务器理解。一般是请求的代码语法写错。
401 未授权:合法请求,但对被请求页面的访问被禁止。因为被请求的页面需要身份验证,客户端没有提供或者身份验证失败。
403 Forbidden:服务器拒绝执行。合法请求,但对被请求页面的访问被禁止。
404 Not Found:资源不存在。服务器无法找到被请求的页面。
500 Internal Server Error:服务器内部错误。
2.响应头:
响应头由一系列的键值对组成,用于描述服务器的基本信息,以及数据的描述,服务器通过这些数据的描述信息,可以通知客户端如何处理等一会儿它响应回来的数据。
常见的响应头如下:
- Accept-Patch:指定服务器所支持的文档补丁格式
- Accept-Ranges:服务器所支持的内容范围
- Content-Disposition:对已知MIME类型资源的描述,浏览器可以根据这个响应头决定是对返回资源的动作,如:将其下载或是打开。
- Content-Encoding:响应资源所使用的编码类型。
- Content-Language:响应内容所使用的语言
- Content-Length:响应消息体的长度,用8进制字节表示
- Content-Type:标注附带的响应体是什么格式
- Date:此条消息被发送时的日期和时间
- Expires:指定一个日期/时间,超过该时间则认为此回应已经过期
- Server:服务器的名称
Content-Type 标注了附带的响应体是什么格式:
常见的值有:
- text/plain:普通的纯文本
- text/html:html文档
- text/javascript 或 application/javascript :js代码
- text/css:css代码
- image/jpeg:jpg图片
- attachment:附件
3.响应体:
响应体一般就是页面代码。
最后
如果这篇文章对你有帮助的话就点个赞吧!