网络分层模型和应用协议
1. 分层模型
1.1 五层网络模型
网络要解决的问题是:两个程序之间如何交换数据。
四层?五层?七层?
2. 应用层协议
2.1 URL
URL(uniform resource locator,统一资源定位符)用于定位网络服务
- 当协议是
http
端口为80
时,端口可以省略 - 当协议是
https
端口为443
时,端口可以省略 -
schema
、domain
、path
是必填的,其他的根据具体的要求填写
2.2 HTTP
超文本传输协议(Hyper Text Transfer Protocol,HTTP)是一个广泛运用于互联网的应用层协议。
该协议包含了传递信息的模式和格式。
HTTP 协议的特点:
-
基于TCP协议: 面向连接,安全
TCP是一种面向连接的(建立连接之前是需要经过三次握手)、可靠的、基于字节流的传输层通信协议,在数据传输方面更安全
-
基于请求-响应模型: 一次请求对应一次响应(先请求后响应)
请求和响应是一一对应关系,没有请求,就没有响应
-
HTTP协议是无状态协议: 对于数据没有记忆能力。每次请求-响应都是独立的
无状态指的是客户端发送HTTP请求给服务端之后,服务端根据请求响应数据,响应完后,不会记录任何信息。
- 缺点: 多次请求间不能共享数据
- 优点: 速度快
请求之间无法共享数据会引发的问题:
- 如:京东购物。加入购物车和去购物车结算是两次请求
- 由于HTTP协议的无状态特性,加入购物车请求响应结束后,并未记录加入购物车是何商品
- 发起去购物车结算的请求后,因为无法获取哪些商品加入了购物车,会导致此次请求无法正确展示数据
具体使用的时候,我们发现京东是可以正常展示数据的,原因是使用会话技术(Cookie、Session)来解决这个问题。
2.2.1 传递信息的模式
HTTP使用了一种极为简单的消息传递模式,「请求-响应」模式。发起请求的称之为客户端,接收请求并完成响应的称之为服务器。「请求-响应」完成后,一次交互结束。
2.2.2 传递信息的格式
请求行
请求头
请求体
举个例子:
安装插件:REST Clinet
点击 Send Request
,发送请求,然后可以查看响应的响应行,响应头和响应体。
分析关键信息:
- 常见的请求方法有:
请求方式 | 请求说明 |
---|---|
GET | 获取资源。 向特定的资源发出请求。例:http://www.baidu.com/s?wd=itheima |
POST | 传输实体主体。 向指定资源提交数据进行处理请求(例:上传文件),数据被包含在请求体中。 |
OPTIONS | 返回服务器针对特定资源所支持的HTTP请求方式。 因为并不是所有的服务器都支持规定的方法,为了安全有些服务器可能会禁止掉一些方法,例如:DELETE、PUT等。那么OPTIONS就是用来询问服务器支持的方法。 |
HEAD | 获得报文首部。 HEAD方法类似GET方法,但是不同的是HEAD方法不要求返回数据。通常用于确认URI的有效性及资源更新时间等。 |
PUT | 传输文件。 PUT方法用来传输文件。类似FTP协议,文件内容包含在请求报文的实体中,然后请求保存到URL指定的服务器位置。 |
DELETE | 删除文件。 请求服务器删除Request-URI所标识的资源 |
TRACE | 追踪路径。 回显服务器收到的请求,主要用于测试或诊断 |
CONNECT | 要求用隧道协议连接代理。 HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器 |
GET请求和POST请求的区别:
区别方式 | GET请求 | POST请求 |
---|---|---|
请求参数 | 请求参数在请求行中。 例:/brand/findAll?name=OPPO&status=1 |
请求参数在请求体中 |
请求参数长度 | 请求参数长度有限制(浏览器不同限制也不同) | 请求参数长度没有限制 |
安全性 | 安全性低。原因:请求参数暴露在浏览器地址栏中。 | 安全性相对高 |
关于请求方法的协议原文见 HTTP/1.1规范RFC7231-Chapter4
-
请求路径
path + query
-
协议
-
请求头
Host
标注了URL
地址中的Domain + Port
,比如:Host: www.taobao.com
。Content-type
指出客户端给服务器的请求体格式,比如:Content-Type: application/json
。比如:
Host: 表示请求的主机名 User-Agent: 浏览器版本。 例如:Chrome浏览器的标识类似Mozilla/5.0 ...Chrome/79 ,IE浏览器的标识类似Mozilla/5.0 (Windows NT ...)like Gecko Accept:表示浏览器能接收的资源类型,如text/*,image/*或者*/*表示所有; Accept-Language:表示浏览器偏好的语言,服务器可以据此返回不同语言的网页; Accept-Encoding:表示浏览器可以支持的压缩类型,例如gzip, deflate等。 Content-Type:请求主体的数据类型 Content-Length:数据主体的大小(单位:字节)
-
请求体
比如:
Content-Type: application/x-www-form-urlencoded loginId=admin&loginPwd=123123
Content-Type: application/json { "loginId": "admin", "loginPwd": "123123" }
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryraPtlntBIqy4X2Ho ------WebKitFormBoundaryraPtlntBIqy4X2Ho Content-Disposition: form-data; name="loginId" admin ------WebKitFormBoundaryraPtlntBIqy4X2Ho Content-Disposition: form-data; name="loginPwd" 123456 ------WebKitFormBoundaryraPtlntBIqy4X2Ho--
-
响应码
这是响应码一般情况,但实际情况还要看公司后端人为决定。
常见的状态码有:
-
200 OK:一切正常。
-
301 Moved Permanently:资源已被永久重定向。
你的请求我收到了,但是你要的东西不在这个地址了,已经永远的把它移动到了一个新的地址,麻烦你请求新的地址,地址我放到了响应头的Location中了
举个例子:www.douyutv.com 重定向到 www.douyu.com。
-
302 Found:资源已被临时重定向。
你的请求我收到了,但是你要的东西不在这个地址了,我临时的把它移动到了一个新的地址,麻烦你取请求新的地址,地址我放到了请求头的Location中了
举个例子:国内 bing 的重定向(不会还有人不知道自己一直访问的是 cn.bing.com,而不是 www.bing.com,不会吧不会吧~~~)
-
304 Not Modified:文档内容未被修改。
你的请求我收到了,你要的东西跟之前是一样的,没有任何的变化,所以我就不给你结果了,你自己就用以前的吧。啥?你没有缓存以前的内容,关我啥事
-
400 Bad Request:语义有误,当前请求无法被服务器理解。
-
403 Forbidden:服务器拒绝执行。
-
404 Not Found:资源不存在。
-
500 Internal Server Error:服务器内部错误。
-
-
响应头 -
Content-Type
Content-Type
标注了附带的响应体是什么格式。文章来源:https://www.toymoban.com/news/detail-720596.html常见的值有:文章来源地址https://www.toymoban.com/news/detail-720596.html
-
text/plain
: 普通的纯文本 -
text/html
:html文档 -
text/javascript
或application/javascript
:js代码 -
text/css
:css代码 -
image/jpeg
:jpg图片 -
attachment
:附件 - 其他
MIME
类型
-
到了这里,关于【计算机网络】分层模型和应用协议的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!