push: Implement HTTP/2 server push (#3573)

* push: Implement HTTP/2 server push (close #3551)

* push: Abstract header ops by embedding into new struct type

This will allow us to add more fields to customize headers in
push-specific ways in the future.

* push: Ensure Link resources are pushed before response is written

* Change header name from X-Caddy-Push to Caddy-Push
This commit is contained in:
Matt Holt
2020-07-20 12:28:40 -06:00
committed by GitHub
parent 2ae8c11927
commit 6cea1f239d
7 changed files with 506 additions and 5 deletions

View File

@ -54,15 +54,15 @@ func (Handler) CaddyModule() caddy.ModuleInfo {
}
// Provision sets up h's configuration.
func (h *Handler) Provision(_ caddy.Context) error {
func (h *Handler) Provision(ctx caddy.Context) error {
if h.Request != nil {
err := h.Request.provision()
err := h.Request.Provision(ctx)
if err != nil {
return err
}
}
if h.Response != nil {
err := h.Response.provision()
err := h.Response.Provision(ctx)
if err != nil {
return err
}
@ -125,7 +125,8 @@ type HeaderOps struct {
Replace map[string][]Replacement `json:"replace,omitempty"`
}
func (ops *HeaderOps) provision() error {
// Provision sets up the header operations.
func (ops *HeaderOps) Provision(_ caddy.Context) error {
for fieldName, replacements := range ops.Replace {
for i, r := range replacements {
if r.SearchRegexp != "" {