tcp/ip
ip协议和ip地址需要区分 ip地址指具体地址 ip一般指ip协议,是一种把数据包传送给对方的协议
为了确认把数据传送给对方 需要ip地址和MAC地址
ARP协议: IP间通信依赖MAC地址,MAC地址一般是不会变的,ARP协议可以根据IP地址反查出来MAC地址。
tcp通过三次握手来确保数据传输的可靠性 若握手阶段莫名中断 tcp协议会再次以相同的顺序发送相同的数据包
dns服务和http协议一样位于应用层 它提供域名到ip地址之间的解析服务
总结: ip负责传输 tcp确保可靠性 dns负责解析域名
总结:客户端首先根据dns服务器找到ip地址 然后根据http协议生成报文 然后通过tcp协议把数据分段 建立可靠连接 紧接着ip协议找到对方的通讯地址 tcp再次确认数据可靠性 然后组装分段数据 根据http协议解析报文 然后同样的过程传回数据
URI/URL
uri(统一资源标识符):URI 用字符串标识某一互联网资源,而 URL表示资源的地点(互联 网上所处的位置)。可见 URL是 URI 的子集。
-
请求报文包含 请求方法 uri 协议 部首 和请求体
部首包含 host connection content-type content-length cookie
响应报文 协议 状态码 部首(date content-type content-length Set-Cookie) 主体
请求类型
方法 | 说明 | 支持的 HTTP 协议版本 |
---|---|---|
GET | 获取资源 | 1.0、1.1 |
POST | 传输实体主体 | 1.0、1.1 |
PUT | 传输文件 | 1.0、1.1 |
HEAD | 获得报文首部 | 1.0、1.1 |
DELETE | 删除文件 | 1.0、1.1 |
OPTIONS | 询问支持的方法 | 1.1 |
TRACE | 追踪路径 | 1.1 |
CONNECT | 要求用隧道协议连接代理 | 1.1 |
LINK(已废弃) | 建立和资源之间的联系 | 1.0 |
UNLINE(已废弃) | 断开连接关系 | 1.0 |
响应状态码
1xx系列 正在处理请求
-
2xx系列 成功
200 ok 表示处理正常
204 no content 请求成功但返回数据不包含主体
206 Partial Content 表示进行范围请求
-
3xx 重定向
301 Moved Permanently 永久重定向
302 Found 临时重定向
303 See Other 该状态码表示由于请求对应的资源存在着另一个 URI 需要临时访问新的uri
304 Not Modified 服务器端允许请求访 问资源,但未满足条件的情况 如协商缓存命中
307 Temporary Redirect 临时重定向 与302区别是不会改变请求方法 302可能会把post改成get
-
4xx 客户端错误
400 Bad Request 请求报文中存在语法错误
401 Unauthorized 请求需要通过http认证的认证信息
403 Forbidden 服务器拒绝对资源的请求
404 Not Found 服务器上无法找到请求的资源
-
5xx 服务器错误
500 Internal Server Error 服务器端在执行请求时发生了错误
503 Service Unavailable 服务器暂时处于超负载或正在进行停机维护
http部首
HTTP/1.1 通用首部字段
-
Cache-Control 强缓存 能够控制缓存的行为
public 明确表明其他用户也可利用缓存(公有缓存)
private 响应只以特定的用户作为对象 (私有缓存)
no-cache 防止从缓存中返回过期的资源
no-store 缓存不能在本地存储请求或响应的任一部分 (完全无缓存)
s-maxage s-maxage 指令的功能和 max-age 指令的相同,只适用于代理服务器
max-age 如果判定缓存资源的缓 存时间数值比指定时间的数值更小,那么客户端就接收缓存的资源 HTTP1.1如果存在expires 则max-age优先级大于expires 而http1.0则相反
min-fresh 要求缓存服务器返回至少还未过指定时间的缓存资源
max-stale 指示缓存资源,即使过期也照常接收
only-if-cached 示客户端仅在缓存服务器本地缓存目标资 源的情况下才会要求其返回
must-revalidate 代理会向源服务器再次验证即将返回的响 应缓存目前是否仍然有效
proxy-revalidate 要求所有的缓存服务器在接收到客户端带有该指 令的请求返回响应之前,必须再次验证缓存的有效性。
no-transform 无论是在请求还是响应中,缓存都不能改 变实体主体的媒体类型
-
Connection
管理持久连接 (close,Keep-Alive)
控制不再转发给代理的首部字段
Date 表明创建 HTTP 报文的日期和时间
Pragma 客户端会要求所有的中间服务器不返回缓存的资源。
Trailer 事先说明在报文主体后记录了哪些首部字段
Transfer-Encoding 传输报文主体时采用的编码方式
Upgrade 检测 HTTP 协议及其他协议是否可使用更高的 版本进行通信
Via 追踪客户端与服务器之间的请求和响应报文
Warning 告知用户一些与缓存相关的问题的警告
请求首部字段
Accept 通知服务器,用户代理能够处理的媒体类型及媒体 类型的相对优先级
Accept-Charset 用户代理支持的字符集及 字符集的相对优先顺序
Accept-Encoding 用户代理支持的内容编码及 内容编码的优先级顺序
Accept-Language 用户代理能够处理的自然 语言集
Authorization 用户代理的认证信息
Expect 期望出现的某种特定行为
From 用户代理的用户的电子邮件地址
Host 请求的资源所处的互联网主机名和端 口号
If-Match 属附带条件之一,它会告知服务器匹配资源所用 的实体标记(ETag)值
If-Modified-Since 属附带条件之一,它会告知服务器若 If-Modified-Since 字段值早于资源的更新时间,则希望能处理该请求(缓存 客户端用来与服务端确认是否命中缓存)
If-None-Match 只有在 If-None-Match 的字段值与 ETag 值不一致时,可处理 该请求(缓存)
If-Range 它告知服务器若指定的 IfRange 字段值(ETag 值或者时间)和请求资源的 ETag 值或时间相一 致时,则作为范围请求处理。反之,则返回全体资源。
If-Unmodified-Since 指定的请求资源只有在字段值内指定 的日期时间之后,未发生更新的情况下,才能处理请求 (与If-Modified-Since相反)
Max-Forwards 标记可经过服务器的最大数目 每经过一个服务器则减1 当服务器接收到 Max-Forwards 值为 0 的请求 时,则不再进行转发,而是直接返回响应
Proxy-Authorization 告知服务器认证所需要的信息
Range 适用于获取部分资源的请求范围
Referer 请求的原始资源的 URI
TE 客户端能够处理响应的传输编码方式及相对优先级
User-Agent 将创建请求的浏览器和用户代理名称等信息
响应部首字段
Accept-Ranges 告知客户端服务器是否能处理范围请求,以指定获取服务器端某个部分的资源(bytes可 none不可)
Age 源服务器在多久前创建了响应(单位s)
ETag 告知客户端实体标识
Location 将响应接收方引导至某个与请求URI 位置 不同的资源
Proxy-Authenticate 由代理服务器所要求的认证信息发送给客户端
Retry-After 告知客户端应该在多久之后再次发送请求
Server 当前服务器上安装的 HTTP 服务器应用程 序的信息
Vary 可对缓存进行控制 源服务器会向代理服务器传达关 于本地缓存使用方法的命令
WWW-Authenticate 用于 HTTP 访问认证
实体首部字段
Allow 知客户端能够支持 Request-URI 指定资源的所 有 HTTP 方法
Content-Encoding 告知客户端服务器对实体的主体部分选用的内容编码方式(gzip compress deflate identity)
Content-Language 实体主体使用的自然语言
Content-Length 实体主体部分的大小(字节)
Content-Location 与报文主体部分相对应的 URI
Content-MD5 客户端会对接收的报文主体执行相同的 MD5 算法 然后与首 部字段 Content-MD5 的字段值比较(用于检查报文主体是否完整)
Content-Range 针对范围请求
Content-Type 实体主体内对象的媒体类型
Expires 会将资源失效的日期告知客户端
Last-Modified 指明资源最终修改的时间
为 Cookie 服务的首部字段
-
set-cookie 响应首部字段 开始状态管理所使用的Cookie信息
NAME 赋予 Cookie 的名称和其值(必需项)
expires Cookie 的有效期(若不明确指定则默认为浏览器关闭前为止)
path 将服务器上的文件目录作为Cookie的适用对象
domain 作为 Cookie 适用对象的域名
Secure 仅在 HTTPS 安全通信时才会发送 Cookie
HttpOnly 使 Cookie 不能被 JavaScript 脚本访问
HTTPS
-
http缺点
通信使用明文可能会被窃听 => 使用加密通信
不验证通信方的身份就可能遭遇伪装 => 采用证书进行认证
无法证明报文完整性,可能已遭篡改 => MD5 和 SHA-1 等散列值校验证书的数字签名
-
https
HTTP 加上加密处理和认证以及完整性保护后即是HTTPS
HTTPS 是身披 SSL 外壳的 HTTP http -> ssl ->tcp -> ip
-
相互交换密钥的公开密钥加密技术
- https采用混合加密机制 存在公钥和私钥 公钥可以发布公开,但是公钥加密过的数据只有私钥才可以解密 客户端拿到公钥后对数据进行加密 只有服务端的私钥才可以解密
证明公开密钥正确性的证书
流程 : 服务器首先把带有公钥的证书发送给客户端 然后客户端通过浏览器内置公钥确认证书的有效性 然后根据公钥加密一个密钥(密码串)然后发送给服务端(只有服务端的私钥才可以解密公钥加密过的数据) 服务端使用私钥解密这个密钥 然后生成密钥 然后双方根据这个密钥来进行通信 首先使用非对称加密方式传输对称加密的密码 然后使用对称加密的密钥进行通信