概念
- 超文本传输协议
- 应用层协议
HTTP消息
- 客户端请求消息
- 请求行
- 请求头
- 空行
- 请求实体
- 服务端响应消息
- 响应行
- 响应头
- 空行
- 响应实体
TCP和UDP的区别
- TCP协议和UDP协议都是传输层协议。
- TCP(Transmission Control Protocal,传输控制协议)提供的是面向连接,可靠的字节流服务。
- UDP(User Data Protocak,用户数据报协议)是一个简单的面向数据报的运输层协议。
区别
-
是否基于连接 TCP是面向连接的协议,而UDP是无连接的协议,即发送数据之前不需要建立连接。
-
可靠性和有序性的区别 TCP提供交付保证(TCP通过校验和、重传控制、序号标识、滑动窗口、确认应答实现可靠传输),无差错、不丢失、不重复、且按序到达。也保证了消息的有序性。 ...
TCP三次握手和四次挥手
SYN泛洪攻击
HTTPS
中间人攻击
对称加密算法和非对称加密算法
TCP是如何保证可靠性和有序性
确认链接(三次握手)
校验和
TCP用一个校验和函数来检查数据是否有错误;在发送和接收时都要计算校验和。
序号标识
TCP为了保证不发生丢包,就给每个包一个序号,同时序号也保证了传送到接收端实体的包是按序接收。
确认应答
接收端实体对已成功收到的包发送回一个相应的确认(ACK)
超时重传
如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据包就被假设为已丢失将会被重传。
往返时间RTT
TCP控制拥塞的四种算法:慢启动、拥塞避免、快重传、快恢复、选择性应答
慢启动
慢启动(Slow Start)是传输控制协议(TCP)使用的一种阻塞控制机制。慢启动也叫做指数增长期。
慢启动是指每次TCP接收窗口收到确认时都会增长。增长的大小就是已确认端的数目。
这种情况一直保持到要么没有收到一些段,要么窗口大小到达预先定义的阈值。
如果发生丢失事件,TCP就认为这是网络阻塞,就会采取措施减轻网络拥挤。
一旦发生丢失事件或者达到阈值,TCP就会进入线性增长阶段。这时,每经过一个RTT窗口增长一个段。
慢开始门限(ssthresh)
slow start thresh
慢开始算法
拥塞避免算法
让拥塞窗口缓慢增长,即没见过一个往返时间RTT就把发送方的拥塞窗口cwnd加1,而不是加倍,这样拥塞窗口按线性规律缓慢增长。
网络阻塞
发送方判断网络出现阻塞的根据就是没有收到确认,虽然没有收到确认可能是其他原因的分组丢失,但是因为无法判定,所以都当做拥塞来处理。
拥塞窗口/发送窗口(cwnd)
提醒:这里只是为了讨论方便而将拥塞窗口大小的单位改为数据报的个数,实际上应当是字节。
发送方会维持一个拥塞窗口,刚开始拥塞窗口和发送窗口相等,一般开始均设置1,然后我们每收到一个确认,就让拥塞窗口变为原来的两倍,接着发送分组就是原来的两倍,以此类推,当窗口值等于16(慢开始门限ssthresh初始值),然后我们采用“加法增大”的策略,即不再以2倍的方式增加,而是转变为每次加1的方式,直到网络拥塞。
我们采用“拥塞避免”算法:让新的慢开始门限值变为发生拥塞时候的值的一半,将拥塞窗口置为1,然后让它再次重复,这时一瞬间会将网络中的数据量大量降低。
当cwnd < ssthresh时,使用慢开始算法
当cwnd > ssthresh时,使用拥塞避免算法
当发送方cwnd = ssthresh时,慢开始和拥塞避免算法任意
快重传
快重传可以提高网络的吞吐量
快恢复
快恢复算法相当于拥塞避免算法的后半恢复部门的优化
选择性应答
滑动窗口
滑动窗口是一种流量控制技术
接收窗口/通知窗口(rwnd)
接收方根据自己的接收能力设置了接收窗口rwnd,
并把这个窗口值写入到TCP首部中的窗口字段,传送给发送方。
发送方的发送窗口一定不能超过对方给出的接收窗口值rwnd。
HTTP 安全响应头(Security Response header)配置手册
参考链接: sysin.org/article/sec…
常用安全Header释义
- Strict [strɪkt] 严格的
- Security [sɪˈkjʊərəti]
Strict-Transport-Security (HSTS)
HTTP Strict Transport Security(通常简称为HSTS)是一个安全功能,它告诉浏览器只能通过HTTPS访问当前资源,而不是HTTP。
- apache的配置为:
Public-Key-Pins (HPKP)
Content-Security-Policy (CSP) 内容安全策略
- Apache配置
Header set Content-Security-Policy "script-src 'self'"
- 配置后请求外部js报错如下
Referrer-Policy
Expect-CT
Access-Control-Allow-Origin
Cache-Control
Set-Cookie
X-Frame-Options 点击劫持攻击防护
- 可选参数
- DENY 拒绝frame加载任何页面
- SAMEORIGIN iframe可以加载同源域页面
- ALLOW_FROM origin 自定义允许frame加载的页面地址
- Apache配置X-Frame-Options
Header always append X-Frame-Options DENY
- 配置后向页面添加iframe报错如下
X-XSS-Protection XSS攻击防护
X-Content-Type-Options 内容嗅探攻击防护
X-Permitted-Cross-Domain-Policies
Permissions-Policy(Feature-Policy)
WebWorker
浏览器缓存和Service Worker
参考链接: www.cnblogs.com/bill-shooti… www.imweb.io/topic/56592…
浏览器缓存
- 浏览器缓存本质上也是有服务器控制的,如在Nginx配置缓存哪些类型的文件和缓存时间。
- 浏览器缓存主要是有HTTP缓存策略和浏览器内置的存储功能(cookie、Local Storage、Session Storage等)来提供。
HTTP缓存(策略)
- 浏览器支持好,由浏览器控制。
强缓存
- 响应头:Expires: Thu, 20 May 2021 02:36:15 GMT
- Apache的Expires配置如下
ExpiresActive on
ExpiresDefault "access plus 0 days"
ExpiresByType text/html "access"
ExpiresByType application/javascript "access plus 1 months"
ExpiresByType text/css "access plus 1 days"
ExpiresByType text/plain "access plus 0 days"
ExpiresByType image/gif "access plus 0 days"
ExpiresByType image/png "access plus 1 years"
ExpiresByType image/jpeg "access plus 0 days"
ExpiresByType image/x-icon "access plus 0 days"
FileETag Size
- 响应头Cache-Control:max-age=1000
- Cache-Control和Expires不一致时,优先Cache-Control 如下: Apache配置Expires=7200000,
#css文件缓存7200000/3600/24=83天
ExpiresByType text/css A7200000
Apache配置Cache-Control:max-age=0
Header set Cache-Control: "max-age=0;"
请求css文件,结果如下截图,没有强缓存,因为Cache-Control:max-age=0覆盖了Expires=83天。
协商缓存
- 响应头:Last-Modified 和 请求头:If-Modified-Since
- 响应头:ETag 和 请求头:If-None-Match
- Apache配置ETag
FileEtag MTime Size //大小(Size)和最后修改时间(MTime)进行hash后得到文件的ETag的值
FileETag None //可以使响应头不再包含Etag字段
浏览器内置存储功能
- 通过JS进行控制,比HTTP缓存灵活,效果取决于程序员的水平。
Service Worker
HTTP缓存足够强大,但需要依赖后端配置;Local Storage或者Session Storage缺少很多关键的浏览器基础设施,比如异步存储、静态资源存储、URL匹配、请求拦截等功能。Service Worker的出现填补了这些问题。
Service Workers本质上充当Web应用程序、浏览器与网络(可用时)之间的代理服务器。这个API旨在创建有效的离线体验,它会拦截网络请求并根据网络是否可用采取适当的动作、更新来自服务器的资源。它还提供入口以推送通知和访问后台同步API。
Service Worker(离线存储)的应用
- Service Worker可以有前端自己解决精细化控制浏览器缓存问题;
- Service Worker能够实现HTTP缓存无法实现的"离线应用";
因为在HTTP缓存策略下,如果一个资源过了服务器规定的到期时间,则必须要发起请求,
一旦网络连接有问题,整个网站就会出现功能问题;
而在Service Worker控制下的缓存,能够在代码中发现网络连接问题并直接返回缓存的资源。
清除Service Worker
chrome://serviceworker-internals/
gitea.office.51fanli.com/servicework… junchu.blog.csdn.net/sw.js
HTTP状态码
- 304
- 307 Internal Redirect 服务器端在 nginx 配置中开启 add_header Strict-transport-Security 以告知浏览器当前域名的所有请求都使用https;当使用http请求时会重定向到https。 如:cdn.jsdelivr.net/npm/vue@2.6…
GET 和 POST的区别
LRU 算法
参考链接: www.jianshu.com/p/d533d8a66…
headers分类
表示响应实体长度的headers
- 定长 content-length
- 不定长 Transfer-Encoding: chunked - 此时Content-Length头会被忽略 -
大文件范围请求
- 请求头Range
- 响应头Content-Range