如果有人通过http访问我的服务器(即不是https),那么我将GET请求重定向到https版本。
但我不知道如何处理POST和PUT,因为我无法重定向它们(浏览器在重定向上执行GET我相信)。
我应该返回一个错误代码。 我应该返回什么HTTP错误代码?
答案 0 :(得分:1)
通常,你会返回403 - 禁止。对此的一般描述是“服务器理解请求,但拒绝授权它”。这适合你的情况。
答案 1 :(得分: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。
答案 2 :(得分:-1)
http://www.ietf.org/id/draft-ietf-httpbis-p2-semantics-18.txt解释了HTTP响应代码。如果您需要错误代码,只需在该URL处无法处理请求时返回404。
7.4.5。找不到404
服务器未找到与有效请求URI匹配的任何内容。 没有说明该病症是暂时的还是 常驻。如果服务器应该使用410(Gone)状态代码 通过一些内部可配置的机制,知道一个旧的 资源永久不可用,没有转发地址。 此状态代码通常在服务器不希望时使用 明确说明请求被拒绝的原因,或者没有其他请求 回应是适用的。