The code in https://github.com/openstack/horizon/blob/master/openstack_dashboard/dashboards/project/access_and_security/keypairs/views.py#L114 looks like it's a GET and that's where the keypair is generated and returned. There's a link generated to it in https://github.com/openstack/horizon/blob/master/openstack_dashboard/dashboards/project/access_and_security/templates/access_and_security/keypairs/download.html
This was a long time ago now but the explanation i was given at the time was (I think) that a POST created problems returning a file for download.
PM me if this still doesn't make sense; it was a while ago and i could be off-base.
The code in https:/ /github. com/openstack/ horizon/ blob/master/ openstack_ dashboard/ dashboards/ project/ access_ and_security/ keypairs/ views.py# L114 looks like it's a GET and that's where the keypair is generated and returned. There's a link generated to it in https:/ /github. com/openstack/ horizon/ blob/master/ openstack_ dashboard/ dashboards/ project/ access_ and_security/ templates/ access_ and_security/ keypairs/ download. html
This was a long time ago now but the explanation i was given at the time was (I think) that a POST created problems returning a file for download.
PM me if this still doesn't make sense; it was a while ago and i could be off-base.