1、前言html
主要包括:一、http基础:TCP/IP,TCP协议,IP协议,DNS协议,URI与URL;git
二、http协议:http报文,http方法,http状态码,常见问题github
名词解释:浏览器
(1)HTTP(HyperText Transfer Protocol)超文本传输协议缓存
(2)URL(Uniform Resource Locator)统一资源定位符安全
(3)URI(Uniform Resource Identifer)统一资源标识符服务器
(4)TCP(Transmission Control Protocol)传输控制协议网络
(5)IP(Internet Protocol)网际协议并发
(6)UDP(User Data Protocol)用户数据报协议tcp
(7)MAC地址(Media Access Control)媒体访问控制地址/物理地址/硬件地址
(8)ARP协议(Address Resolution Protocol)地址解析协议
2、HTTP基础
2.1TCP/IP
TCP/IP是互联网相关的各种协议族的总称,而http是TCP/IP协议族中的一个子集。
TCP/IP协议族能够分为四层:
(1)应用层:决定向用户提供应用服务时通讯的活动,TCP/IP协议族内预存了各种通用的应用服务,如:http,ftp,dns等。
(2)传输层:提供处于网络链接中的两台计算机之间的数据传输,包含两个协议:tcp,udp。
(3)网络层:用来处理网络上流动的数据包,在众多的选项中选择一条传输线路,将数据包传送到对方计算机。包含的协议:IP协议。
(4)数据链路层:用来处理链接网络的硬件部分。
2.2 IP协议
IP协议属于网络层,负责处理网络上流动的数据包。为了保证传送成功,须要知足各种条件,其中两个重要的条件时IP地址和MAC地址。
(1)IP地址,指明了节点被分配到的地址;
(2)MAC地址,指网卡所属的固定地址;
(3)IP地址能够和MAC地址进行配对,IP地址能够变换,可是MAC地址基本上不会更改;
(4)使用ARP地址解析协议能够根据通讯方的IP地址反查出对应的MAC地址
2.3 TCP协议
TCP协议位于传输层,提供可靠的字节流服务(也就是说,将大数据分隔成以报文段为单位的数据包进行管理)。
为了确保数据准确无误的到达目标处,TCP协议一般采用三次握手策略。
若是在握手的过程当中某一个阶段莫名的中断了,TCP协议会再次以相同的顺序发送相同的数据包。
2.4DNS协议
DNS协议位于应用层,提供域名到IP地址之间的解析服务。
2.5 URI和URL
URI是某一个协议方案表示的资源的定位标识符,协议方案是指访问资源所使用的协议类型,如:http,ftp,file等。
URL用字符串标识某一个互联网资源,而URL表示资源的地点,URL是URI的子集。
2.6 HTTP协议
HTTP协议用于客户端和服务器端之间的通讯。请求一定由客户端发出,而服务器端回复响应。
HTTP协议不保存状态,为无状态协议。这是为了更快的处理大量事务,确保协议的可伸缩性而特地设计的。
可是随着Web的不断发展,这一特性也引起了一些问题,如:如何保持登陆状态、如何记录用户信息等,为了解决这一问题,引入了Cookie技术。
2.6.1常见状态码
2XX 成功
200 OK,表示从客户端发来的请求在服务器端被正确处理
204 No content,表示请求成功,但响应报文不含实体的主体部分
205 Reset Content,表示请求成功,但响应报文不含实体的主体部分,可是与 204 响应不一样在于要求请求方重置内容
206 Partial Content,进行范围请求
3XX 重定向
301 moved permanently,永久性重定向,表示资源已被分配了新的 URL
302 found,临时性重定向,表示资源临时被分配了新的 URL
303 see other,表示资源存在着另外一个 URL,应使用 GET 方法获取资源
304 not modified,表示服务器容许访问资源,但因发生请求未知足条件的状况
307 temporary redirect,临时重定向,和302含义相似,可是指望客户端保持请求方法不变向新的地址发出请求
4XX 客户端错误
400 bad request,请求报文存在语法错误
401 unauthorized,表示发送的请求须要有经过 HTTP 认证的认证信息
403 forbidden,表示对请求资源的访问被服务器拒绝
404 not found,表示在服务器上没有找到请求的资源
5XX 服务器错误
500 internal sever error,表示服务器端在执行请求时发生了错误
501 Not Implemented,表示服务器不支持当前请求所须要的某个功能
503 service unavailable,代表服务器暂时处于超负载或正在停机维护,没法处理请求
2.6.2HTTP报文头部(HTTP首部)
通用字段 | 做用 |
Cache-Control | 控制缓存的行为 |
Connection | 浏览器想要优先使用的链接类型,好比:keep-alive |
Date | 建立报文时间 |
Pragma | 报文指令 |
Via | 代理服务器相关信息 |
Transfer-Encoding | 传输编码方式 |
Upgrade | 要求客户端升级协议 |
Warning | 在内容中可能存在错误 |
请求字段 | 做用 |
Accept | 能正确接收的媒体类型 |
Accept-Charset | 能正确接收的字符集 |
Accept-Encoding | 能正确接收的编码格式列表 |
Accept-Language | 能正确接收的语言列表 |
Expect | 期待服务端的指定行为 |
From | 请求方邮箱地址 |
Host | 服务器的域名 |
If-Match | 两端资源标记比较 |
If-Modified-Since | 本地资源未修改返回 304(比较时间) |
If-None-Match | 本地资源未修改返回 304(比较标记) |
User-Agent | 客户端信息 |
Max-Forwards | 限制可被代理及网关转发的次数 |
Proxy-Authorization | 向代理服务器发送验证信息 |
Range | 请求某个内容的一部分 |
Referer | 示浏览器所访问的前一个页面 |
TE | 传输编码方式 |
响应字段 | 做用 |
Accept-Ranges | 是否支持某些种类的范围 |
Age | 资源在代理缓存中存在的时间 |
ETag | 资源标识 |
Location | 客户端重定向到某个 URL |
Proxy-Authenticate | 向代理服务器发送验证信息 |
Server | 服务器名字 |
WWW-Authenticate | 获取资源须要的验证信息 |
实体字段 | 做用 |
Allow | 资源的正确请求方式 |
Content-Encoding | 内容的编码格式 |
Content-Language | 内容使用的语言 |
Content-Length | request body 长度 |
Content-Location | 返回数据的备用地址 |
Content-MD5 | Base64加密格式的内容 MD5检验值 |
Content-Range | 内容的位置范围 |
Content-Type | 内容的媒体类型 |
Expires | 内容的过时时间 |
Last_modified | 内容的最后修改时间 |
2.6.3 HTTP方法
方法名称 | 方法描述 |
---|---|
GET | 获取资源 |
POST | 传输实体主体 |
PUT | 传输文件,自身不带验证机制 ,在无验证机制或不遵照REST标准时不建议使用 |
DELETE | 删除文件,自身不带验证机制 |
HEAD | 获取报文首部,和GET方法同样,不返回报文主体部分 |
OPTIONS | 询问支持的方法,返回服务器所支持的方法 |
TRACE | 追踪路径,能够经过该方法查询发送出去的请求是如何被加工修改或篡改的。容易引起XST攻击,不经常使用。 |
CONNECT | 要求用隧道协议链接代理 |
三、HTTPS基础
HTTPS 仍是经过了 HTTP 来传输信息,可是信息经过 TLS 协议进行了加密。
3.1 TLS
TLS 协议位于传输层之上,应用层之下。首次进行 TLS 协议传输须要两个 RTT ,接下来能够经过 Session Resumption 减小到一个 RTT。(RTT表示发送端发送数据到接收到对端数据所需的往返时间)
在 TLS 中使用了两种加密技术,分别为:对称加密和非对称加密。
对称加密:
对称加密就是两边拥有相同的秘钥,两边都知道如何将密文加密解密。
非对称加密:
有公钥私钥之分,公钥全部人均可以知道,能够将数据用公钥加密,可是将数据解密必须使用私钥解密,私钥只有分发公钥的一方才知道。
3.2 TLS 握手过程以下图:
(1)客户端发送一个随机值,须要的协议和加密方式
(2)服务端收到客户端的随机值,本身也产生一个随机值,并根据客户端需求的协议和加密方式来使用对应的方式,发送本身的证书(若是须要验证客户端证书须要说明)
(3)客户端收到服务端的证书并验证是否有效,验证经过会再生成一个随机值,经过服务端证书的公钥去加密这个随机值并发送给服务端,若是服务端须要验证客户端证书的话会附带证书
(4)服务端收到加密过的随机值并使用私钥解密得到第三个随机值,这时候两端都拥有了三个随机值,能够经过这三个随机值按照以前约定的加密方式生成密钥,接下来的通讯就能够经过该密钥来加密解密
经过以上步骤可知,在 TLS 握手阶段,两端使用非对称加密的方式来通讯,可是由于非对称加密损耗的性能比对称加密大,因此在正式传输数据时,两端使用对称加密的方式通讯。
PS:以上说明的都是 TLS 1.2 协议的握手状况,在 1.3 协议中,首次创建链接只须要一个 RTT,后面恢复链接不须要 RTT 了。
4、GET和POST的区别
从技术上说:
一、get请求能缓存,post不能;
二、post相对于get来讲,安全一点点,由于get请求都会包含在URL里,会被浏览器保存历史记录,post不会,可是在抓包的状况是同样的。
三、post能够request body来传递比get更多的数据,get米有这个技术。
四、url长度有限制,会影响get请求,长度限制是浏览器限制规定的,不是rfc(互联网通讯协议)规定的。
五、post支持更多的编码类型且不对数据类型限制
5、参考