GET 请求与 POST 请求的区别
TIP
(1)post
更安全(不会作为 url
的一部分,不会被缓存、保存在服务器日志、以及浏览器浏览记录中)
(2)post
发送的数据更大(get
有 url
长度限制)
(3)post
能发送更多的数据类型(get
只能发送 ASCII
字符)
(4)post
比 get
慢
(5)post
用于修改和写入创建数据,get
一般用于搜索排序和筛选之类的操作,目的是资源的获取,读取数据
(6)Get
请求的报文中实体部分为空,Post
请求的报文中实体部分一般为向服务器发送的数据
常见的HTTP请求头和响应头
HTTP Request Header 常见的请求头:
- Accept:浏览器能够处理的内容类型
- Accept-Charset:浏览器能够显示的字符集
- Accept-Encoding:浏览器能够处理的压缩编码
- Accept-Language:浏览器当前设置的语言
- Connection:浏览器与服务器之间连接的类型
- Cookie:当前页面设置的任何Cookie
- Host :请求头指明了请求将要发送到的服务器主机名和端口号
- Referer:发出请求的页面的URL
- User-Agent:浏览器的用户代理字符串
HTTP Responses Header 常见的响应头:
- Date:表示消息发送的时间
- server:服务器名称
- Connection:浏览器与服务器之间连接的类型
- Cache-Control:控制HTTP缓存
- content-type:表示后面的文档属于什么MIME类型
TIP
常见的 Content-Type
属性值有以下四种:
(1)application/x-www-form-urlencoded
:浏览器的原生 form
表单,如果不设置 enctype
属性,那么最终就会以 application/x-www-form-urlencoded
方式提交数据。该种方式提交的数据放在 body
里面,数据按照 key1=val1&key2=val2
的方式进行编码,key
和 val
都进行了 URL
转码。
(2)multipart/form-data
:该种方式也是一个常见的 POST
提交方式,通常表单上传文件时使用该种方式。
(3)application/json
:服务器消息主体是序列化后的 JSON
字符串。
(4)text/xml
:该种方式主要用来提交 XML
格式的数据。
HTTP状态码304
TIP
HTTP
状态码 304
是 HTTP
协议中用于优化性能和减少不必要数据传输的一种机制。
但是网站在一定时间内一直处于 304
的状态,那么蜘蛛可能会降低对网站的抓取次数。相反,若网站变化的频率非常之快,每次抓取都能获取新内容,那么日积月累,回访率也会提高。
产生较多304状态码的原因:
- 页面更新周期长或不更新
- 纯静态页面或强制生成静态html
304状态码出现过多会造成以下问题:
- 网站快照停止;
- 收录减少;
- 权重下降。
常见的HTTP请求方法
TIP
- GET: 向服务器获取数据;
- POST:将实体提交到指定的资源,通常会造成服务器资源的修改;
- PUT:上传文件,更新数据;
- DELETE:删除服务器上的对象;
- HEAD:获取报文首部,与GET相比,不返回报文主体部分;
- OPTIONS:询问支持的请求方法,用来跨域请求;
- CONNECT:要求在与代理服务器通信时建立隧道,使用隧道进行TCP通信;
- TRACE: 回显服务器收到的请求,主要⽤于测试或诊断。
IP协议的首部结构
TIP
ip
协议的首部结构一共 20
个字节:
第一个4字节:版本号、首部长度、服务类型、总长度
第二个4字节:标识、标志、片偏移
第三个4字节:生存时间、协议、校验和
第四个4字节:源ip地址
第五个4字节:目的ip地址
当在浏览器中输入 Google.com 并且按下回车之后发生了什么?
- 解析 URL,分析所需要使用的传输协议和请求的资源的路径,如果存在非法字符,则对非法字符进行转义后再进行下一过程。
- 缓存判断:浏览器会判断所请求的资源是否在缓存里,如果请求的资源在缓存里并且没有失效,那么就直接使用,否则向服务器发起新的请求。
- DNS 解析,拿到 IP 地址。
- 获取 MAC 地址,当浏览器得到 IP 地址后,数据传输还需要知道目的主机 MAC 地址。 4.1 MAC 地址获取方式:通过将 IP 地址与本机的子网掩码相与,可以判断是否与请求主机在同一个子网里,如果在同一个子网里,可以使用 APR 协议获取到目的主机的 MAC 地址,如果不在一个子网里,那么请求应该转发给网关,由它代为转发,此时同样可以通过 ARP 协议来获取网关的 MAC 地址,此时目的主机的 MAC 地址应该为网关的地址。
- 进行 TCP 三次握手通信双方建立可靠连接。
- 如果是 https 协议,需要进行 TLS 四次握手,建立加密通信和身份验证。
- 当页面请求发送到服务器端后,服务器端会返回一个 html 文件作为响应,浏览器接收到响应后,开始对 html 文件进行解析,开始页面的渲染过程。
- 进行页面渲染。
- TCP 四次挥手关闭连接。
客户端如何验证证书的合法性
- 首先浏览器读取证书中的证书所有者、有效期等信息进行校验,校验证书的网站域名是否与证书颁发的域名一致,校验证书是否在有效期内
- 浏览器开始查找操作系统中已内置的受信任的证书发布机构
CA
,与服务器发来的证书中的颁发者CA
比对,用于校验证书是否为合法机构颁发 - 如果找不到,浏览器就会报错,说明服务器发来的证书是不可信任的。
- 如果找到,那么浏览器就会从操作系统中取出颁发者
CA
的公钥(多数浏览器开发商发布版本时,会事先在内部植入常用认证机关的公开密钥),然后对服务器发来的证书里面的签名进行解密 - 浏览器使用相同的
hash
算法计算出服务器发来的证书的hash
值,将这个计算的hash
值与证书中签名做对比 - 对比结果一致,则证明服务器发来的证书合法,没有被冒充
流量控制
TIP
流量控制的核心目的是确保数据的发送速率不超过接收方的处理能力,防止接收方的缓冲区溢出。
- 接收方窗口大小:接收方为发送方提供一个接收窗口大小(
Window Size
),表示它可以处理的最大数据量。这个值会动态变化,接收方会不断告诉发送方它当前的接收能力。 - 滑动窗口机制:TCP协议采用滑动窗口机制,发送方根据接收方的窗口大小来决定发送数据的数量。窗口大小可以根据接收方的缓冲区大小动态调整。当接收方的缓冲区可用空间减少时,它会通过窗口大小减小发送方可以发送的数据量。
- 发送方控制:发送方根据接收方提供的窗口信息调整数据的发送速率。如果接收方的接收窗口变小,发送方就会减慢发送速率,避免数据丢失
拥塞控制
TIP
拥塞控制的核心目的是避免网络拥塞,防止整个网络的性能因数据过载而下降。TCP协议采用了多种机制来动态调整发送方的发送速率。
- 慢启动:TCP连接刚建立时,发送方的拥塞窗口(
Congestion Window,CWND
)很小。随着每次成功的确认(ACK
)到达,窗口逐渐增大。这个过程称为 慢启动。慢启动的目标是渐进地增加发送速率,避免网络立即出现拥塞。 - 拥塞避免:一旦窗口增大到一定程度(慢开始门限),
TCP
会进入 拥塞避免 阶段。在这个阶段,拥塞窗口的增大变得更加缓慢(每收到一个确认,窗口增大一个固定值)。这个阶段是为了避免突然增大的窗口造成网络过载。 - 快速重传和快速恢复:
- 快速重传:当发送方收到三个相同的确认号(即出现丢包情况),它会立即重发丢失的数据包,而不是等待超时。
- 快速恢复:当发生丢包后,拥塞窗口的大小会被减少,并进入 快速恢复 阶段,继续发送数据,但在一个较小的窗口下,直到网络恢复正常