不安全的POST返回什么响应代码?

问题描述 投票:0回答:3

[如果有人通过http(即不是https)访问我的服务器,那么我会将GET请求重定向到https版本。

但是我不知道如何处理POST和PUT,因为我无法重定向它们(我相信浏览器会在重定向时执行GET)。

我应该返回错误代码。 我应该返回什么HTTP错误代码?

security http redirect https post-redirect-get
3个回答
-1
投票

http://www.ietf.org/id/draft-ietf-httpbis-p2-semantics-18.txt解释HTTP响应代码。如果您想输入错误代码,如果无法通过该URL处理请求,则只需返回404。

7.4.5。找不到404

服务器未找到与有效请求URI匹配的任何内容。没有迹象表明这种情况是暂时的还是暂时的常驻。如果服务器使用410(消失)状态代码通过某种内部可配置的机制知道一个旧的资源永久不可用,并且没有转发地址。当服务器不想执行此操作时,通常使用此状态代码确切说明请求被拒绝的原因,或者没有其他原因回复适用。


2
投票

[通常,您将返回403-禁止。对此的一般描述是“服务器理解了请求,但拒绝授权它。”这将适合您的情况。


0
投票

技术上正确的答案是使用403.4,但在子状态下,它是仅IIS的功能,nginx不支持它。

所以我更愿意返回418“我是茶壶”或451“由于法律原因不可用”(因为使用纯文本http已经不再合法了,哈哈,只是在开玩笑:)),这种状态很奇怪并应触发客户端弄清楚发生了什么。

nginx具有返回状态的选项,如文本

# cat /etc/nginx/conf.d/default.conf
server {
    listen       80 default_server;


    location / {
        add_header Content-Type text/plain;
        return 418 "TLS REQUIRED";
    }
}

# curl -v  http://localhost/
* About to connect() to localhost port 80 (#0)
*   Trying ::1...
* Connection refused
*   Trying 127.0.0.1...
* Connected to localhost (127.0.0.1) port 80 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.29.0
> Host: localhost
> Accept: */*
>
< HTTP/1.1 418
< Server: nginx/1.16.1
< Date: Sat, 15 Feb 2020 07:13:20 GMT
< Content-Type: application/octet-stream
< Content-Length: 12
< Connection: keep-alive
<
* Connection #0 to host localhost left intact
TLS REQUIRED

但是,Chrome或Firefox之类的浏览器无法处理此权限,Chrome表示ERR_INVALID_RESPONSE,而Firefox则显示“未找到文件”,并且这种行为无法解决我们的目标。

所以我只剩下状态418。

© www.soinside.com 2019 - 2024. All rights reserved.