# HTTP/3服務器推送
HTTP/3的服務器推送與HTTP/2([RFC 7540](https://httpwg.org/specs/rfc7540.html))類似,但機制上有所不同。
服務器推送實際上就是對一個未曾發出的客戶端請求做出響應!
服務器推送僅在客戶端同意的前提下才允許發出。在HTTP/3中,客戶端甚至能通過通告給服務器的最大推送流ID來設置所接受推送的次數限制。超出限制將導致連接錯誤。
如果服務器端認為客戶端可能需要某個并未要求但應該有的額外資源,服務器可以通過請求流發送一個 `PUSH_PROMISE` 幀,使該推送請求看上去像是一個響應,然后通過新的流發送實際響應。
雖然客戶端之前已經表示過推送可接受,但如果客戶端認為適合,每個推送流仍可以隨時取消,然后發送一個 `CANCEL_PUSH` 幀到服務器。
## 問題重重
自從推送這一特性在HTTP/2中討論、開發、部署以來,它就備受爭議、討論和抨擊。為了讓它有用,人們付出了許多努力。
推送從來不是沒有代價的,盡管它省了半個往返的延遲,它還是會消耗帶寬。服務器也很難或不可能從高層面確定一個資源是否應該被推送過去。