应用层协议
超文本传输: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请求方法
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可以办到
只要资源的内容没有变化,就不会重复传输资源数据 只要资源的内容发生了变化,就会返回最新的资源数据给客户端
缓存流程图
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将其内容交付给最终用户