http

429 阅读8分钟

概念

  • 超文本传输协议
  • 应用层协议

HTTP消息

  1. 客户端请求消息
  • 请求行
  • 请求头
  • 空行
  • 请求实体
  1. 服务端响应消息
  • 响应行
  • 响应头
  • 空行
  • 响应实体

TCP和UDP的区别

  • TCP协议和UDP协议都是传输层协议。
  • TCP(Transmission Control Protocal,传输控制协议)提供的是面向连接,可靠的字节流服务。
  • UDP(User Data Protocak,用户数据报协议)是一个简单的面向数据报的运输层协议。

区别

  1. 是否基于连接 TCP是面向连接的协议,而UDP是无连接的协议,即发送数据之前不需要建立连接。

  2. 可靠性和有序性的区别 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报错如下

image.png

Referrer-Policy

Expect-CT

Access-Control-Allow-Origin

Cache-Control

Set-Cookie

X-Frame-Options 点击劫持攻击防护

  • 可选参数
  1. DENY 拒绝frame加载任何页面
  2. SAMEORIGIN iframe可以加载同源域页面
  3. ALLOW_FROM origin 自定义允许frame加载的页面地址
  • Apache配置X-Frame-Options
Header always append X-Frame-Options DENY
  • 配置后向页面添加iframe报错如下

image.png

X-XSS-Protection XSS攻击防护

X-Content-Type-Options 内容嗅探攻击防护

X-Permitted-Cross-Domain-Policies

Permissions-Policy(Feature-Policy)

# HTTP/1.1、HTTP2、HTTP3

WebWorker

浏览器缓存和Service Worker

参考链接: www.cnblogs.com/bill-shooti… www.imweb.io/topic/56592…

浏览器缓存

  • 浏览器缓存本质上也是有服务器控制的,如在Nginx配置缓存哪些类型的文件和缓存时间。
  • 浏览器缓存主要是有HTTP缓存策略和浏览器内置的存储功能(cookie、Local Storage、Session Storage等)来提供。

HTTP缓存(策略)

  • 浏览器支持好,由浏览器控制。

强缓存

  1. 响应头: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
  1. 响应头Cache-Control:max-age=1000
  • Cache-Control和Expires不一致时,优先Cache-Control 如下: Apache配置Expires=7200000,
#css文件缓存7200000/3600/24=83ExpiresByType text/css A7200000

Apache配置Cache-Control:max-age=0

 Header set Cache-Control: "max-age=0;"

请求css文件,结果如下截图,没有强缓存,因为Cache-Control:max-age=0覆盖了Expires=83天。 image.png

协商缓存

  1. 响应头:Last-Modified 和 请求头:If-Modified-Since
  2. 响应头: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…

image.png

GET 和 POST的区别

mp.weixin.qq.com/s?__biz=MzI…

LRU 算法

参考链接: www.jianshu.com/p/d533d8a66…

headers分类

表示响应实体长度的headers

  1. 定长 content-length
  2. 不定长 Transfer-Encoding: chunked - 此时Content-Length头会被忽略 -

大文件范围请求

  1. 请求头Range
  2. 响应头Content-Range