网络-应用层

应用层协议

超文本传输:HTTP、HTTPS

文件传输:FTP

电子邮件:SMTP、POP3、IMAP

动态主机配置:DHCP

域名系统:DNS

DNS

利用DNS协议,可以将域名(比如baidu.com)解析成对应的IP地址(比如220.181.38.148)
DNS可以基于UDP协议,也可以基于TCP协议,服务器占用53端口

DNS服务器
客户端首先会访问最近的一台DNS服务器(也就是客户端自己配置的DNS服务器)
所有的DNS服务器都记录了DNS根域名服务器的IP地址
上级DNS服务器记录了下一级DNS服务器的IP地址
全球一共13台IPv4的DNS根域名服务器、25台IPv6的DNS根域名服务器

DHCP

客户端可以从DHCP服务器自动获取IP地址
DHCP协议基于UDP协议,客户端是68端口,服务器是67端口

分配IP地址4个阶段

DISCOVER:发现服务器
发广播包(源IP是0.0.0.0,目标IP是255.255.255.255,目标MAC是FF:FF:FF:FF:FF:FF)
    
OFFER:提供租约
服务器返回可以租用的IP地址,以及租用期限、子网掩码、网关、DNS等信息 注意:这里可能会有多个服务器提供租约

REQUEST:选择IP地址
客户端选择一个OFFER,发送广播包进行回应

ACKNOWLEDGE:确认
被选中的服务器发送ACK数据包给客户端 至此,IP地址分配完毕

跨网段分配IP
可以借助DHCP中继代理(DHCP Relay Agent)实现跨网段分配IP地址

HTTP 超文本传输协议

请求报文格式

HTTP请求报文

响应报文格式

HTTP响应报文

HTTP请求方法

GET:常用于读取的操作,请求参数直接拼接在URL的后面(浏览器对URL是有长度限制的)

POST:常用于添加、修改、删除的操作,请求参数可以放到请求体中(没有大小限制)

HEAD:请求得到与GET请求相同的响应,但没有响应体

OPTIONS:用于获取目的资源所支持的通信选项,比如服务器支持的请求方法 OPTIONS * HTTP/1.1

PUT:用于对已存在的资源进行整体覆盖

PATCH:用于对资源进行部分修改(资源不存在,会创建新的资源)

DELETE:用于删除指定的资源

TRACE:请求服务器回显其收到的请求信息,主要用于HTTP请求的测试或诊断

CONNECT:可以开启一个客户端与所请求资源之间的双向沟通的通道,它可以用来创建隧道(tunnel)

请求头字段

字段 说明 示例
User-Agent 浏览器的身份标识字符串
Host 服务器的域名、端口号
Date 发送该消息的日期和时间
Referer 表示浏览器所访问的前一个页面 正是前一个页面的某个链接将浏览器带到了当前这个页面
Content-Type 请求体的类型
Content-Length 请求体的长度(字节为单位)
Accept 能够接受的响应内容类型(Content-Types)
Accept-Charset 能够接受的字符集
Accept-Encoding 能够接受的编码方式列表 gzip
Accept-Language 能够接受的响应内容的自然语言列表 zh-Hans-CN;q=1,*;1=0.7
Range 仅请求某个实体的一部分。字节偏移以 开始
Origin 发起一个针对跨域资源共享的请求
Cookie 之前由服务器通过 Set-Cookie 发送的 Cookie
Connection 该浏览器想要优先使用的连接类型 keep-alive
Cache-Control 用来指定在这次的请求 响应链中的所有缓存机制 都必须遵守的指令

q值越大,表示优先级越高,取值范围 0-1,默认为1

响应头字段

字段 说明 示例
Date 发送该消息的日期和时间
Last-Modified 所请求的对象的最后修改日期
Server 服务器的名字
Expires 指定一个时间,超过该时间则认为此响应已经过期
Content-Type 响应体的类型
Content-Encoding 内容所使用的编码类型
Content-Length 响应体的长度(字节为单位)
Content-Disposition 一个可以让客户端下载文件并建议文 件名的头部
Accept-Ranges 服务器支持哪些种类的部分内容范围
Content-Range 这条部分消息是属于完整消息的哪部 分
Access-Control-Allow-Origin 指定哪些网站可参与到跨来源资源共 享过程中
Location 用来进行重定向,或者在创建了某个 新资源时使用
Set-Cookie 返回一个Cookie让客户端去保存
Connection 针对该连接所预期的选项
Cache-Control 向从服务器直到客户端在内的所有缓 存机制告知,它们是否可以缓存这个 对象。单位为秒

HTTP 状态码

信息响应:100~199

成功响应:200~299

重定向:300~399

客户端错误:400~499

服务器错误 :500~599

常见状态码

400 Bad Request:由于语法无效,服务器无法理解该请求

401 Unauthorized:由于缺乏目标资源要求的身份验证凭证

403 Forbidden:服务器端有能力处理该请求,但是拒绝授权访问

404 Not Found:服务器端无法找到所请求的资源

405 Method Not Allowed:服务器禁止了使用当前HTTP方法的请求

406 Not Acceptable:服务器端无法提供与Accept-Charset以及Accept-Language指定的值相匹配的响应

408 Request Timeout:服务器想要将没有在使用的连接关闭
一些服务器会在空闲连接上发送此信息,即便是在客户端没有发送任何请求的情况下

500 Internal Server Error:所请求的服务器遇到意外的情况并阻止其执行请求

501 Not Implemented:请求的方法不被服务器支持,因此无法被处理
服务器必须支持的方法(即不会返回这个状态码的方法)只有 GET 和 HEAD

502 Bad Gateway:作为网关或代理角色的服务器,从上游服务器(如tomcat)中接收到的响应是无效的

503 Service Unavailable:服务器尚未处于可以接受请求的状态
通常造成这种情况的原因是由于服务器停机维护或者已超载

缓存

通常会缓存的情况是:GET请求 + 静态资源(比如HTML、CSS、JS、图片等)

Ctrl + F5:可以强制刷新缓存

缓存响应头

Pragma:作用类似于Cache-Control,HTTP/1.0的产物

Expires:缓存的过期时间(GMT格式时间),HTTP/1.0的产物

Cache-Control:设置缓存策略

no-storage:不缓存数据到本地 

public:允许用户、代理服务器缓存数据到本地 

private:只允许用户缓存数据到本地 

max-age:缓存的有效时间(多长时间不过期),单位秒 

no-cache:每次需要发请求给服务器询问缓存是否有变化,再来决定如何使用缓存

Last-Modified:资源的最后一次修改时间

ETag:资源的唯一标识(根据文件内容计算出来的摘要值)

优先级:ETag > Last-Modified

优先级:Pragma > Cache-Control > Expires

缓存请求头

If-None-Match:

如果上一次的响应头中有ETag,就会将ETag的值作为请求头的值 如果服务器发现资源的最新摘要值跟If-None-Match不匹配,就会返回新的资源(200 OK)

否则,就不会返回资源的具体数据(304 Not Modified)

If-Modified-Since:

如果上一次的响应头中没有ETag,有Last-Modified,就会将Last-Modified的值作为请求头的值 如果服务器发现资源的最后一次修改时间晚于If-Modified-Since,就会返回新的资源(200 OK)

否则,就不会返回资源的具体数据(304 Not Modified)

缓存 Last-Modified VS ETag

Last-Modified的缺陷

只能精确到秒级别,如果资源在1秒内被修改了,客户端将无法获取最新的资源数据 如果某些资源被修改了(最后一次修改时间发生了变化),但是内容并没有任何变化 会导致相同数据重复传输,没有使用到缓存

ETag可以办到

只要资源的内容没有变化,就不会重复传输资源数据 只要资源的内容发生了变化,就会返回最新的资源数据给客户端

缓存流程图

image-20211223152142700

form提交

action:请求的URI

method:请求方法(GET、POST)

enctype:POST请求时,请求体的编码方式 application/x-www-form-urlencoded(默认值) 用&分隔参数,用=分隔键和值,字符用URL编码方式进行编码

multipart/form-data 文件上传时必须使用这种编码方式。Content-Type: multipart/form-data; boundary=xxx

代理

正向代理:代理的对象是客户端 ,隐藏客户端身份, 绕过防火墙(突破访问限制), Internet访问控制, 数据过滤

反向代理:代理的对象是服务器,隐藏服务器身份, 安全防护, 负载均衡

相关头部

Via:追加经过的每一台代理服务器的主机名(或域名)

X-Forwarded-For:追加请求方的IP地址

X-Real-IP:客户端的真实IP地址

CDN

CDN(Content Delivery Network或Content Distribution Network),译为:内容分发网络

利用最靠近每位用户的服务器 更快更可靠地将音乐、图片、视频等资源文件(一般是静态资源)传递给用户

CDN运营商在全国、乃至全球的各个大枢纽城市都建立了机房

部署了大量拥有高存储高带宽的节点,构建了一个跨运营商、跨地域的专用网络

内容所有者向CDN运营商支付费用,CDN将其内容交付给最终用户

你可能感兴趣的:(网络-应用层)