The http2 spec says:
HTTP/2 allows a server to pre-emptively send (or "push") responses (along with corresponding "promised" requests) to a client in association with a previous client-initiated request.
Is there any restriction as to the method of client-initiated requests? I would guess that this is usually GET, but I wonder if there is a restriction that it can't be something else.
There are no restrictions as to what type of request can cause a push response, but there are restrictions as to what items can be pushed (basically GET requests):
Promised requests MUST be cacheable (see [RFC7231], Section 4.2.3), MUST be safe (see [RFC7231], Section 4.2.1), and MUST NOT include a request body.
So if submission of a form used a POST request and returns HTML then it may well make sense to push resources needed by that HTML.
Pushed resources are not pushed into the normal HTTP/2 cache used by the browser but into a separate “push cache”. This is a short lived cache tied to that connection. Pushed resources are only retrieved from that push cache and saved more permanently if something that needs them pulls them out of this cache.
So you should only push resources that will be needed by the initiator of the push (or another request that follows shortly after that). So if you have an OPTIONS request that results in a pushed resource will it really be used? There are no restrictions on an OPTIONS request resulting in a push, but it may be a wasted push if the pushed resource is not used soon after pushing.