http

302 vs 307

302和307都是临时重定向;区别是:302会改变原请求方法都为get;307会保留原请求方法; chrome浏览器307后面跟的不是临时重定向,而是Internal Redirect;这是浏览器的行为; 因为chrome维护了一份HSTS站点列表,知道必须要https方式请求的网站。 于是截获http请求后,直接以https方式访问,同时做出dummy 307响应。

401 vs 403

如果(代理)服务器接收到的有效凭证不足以获取给定资源的访问权限,则服务器应该使用403 Forbidden状态代码进行响应。 不像401 Unauthorized或者407 Proxy Authentication Required,这个用户不可能进行身份验证。

Protocol upgrade mechanism

此机制始终由客户端启动(有一个例外:服务器可能需要升级到TLS),并且服务器可能接受或拒绝切换到新协议。 这使得使用常用协议(如HTTP / 1.1)启动连接成为可能,然后请求连接切换到HTTP/2或甚至到WebSocket。 协议升级总是由客户请求; 没有为服务器提供请求协议更改的机制。当客户机希望升级到新的协议, 它通过发送任何类型的正常请求发送到服务器(这样做GET,POST等)。但是,该请求需要专门配置以包含升级请求。

特别是,请求需要这两个额外的头文件: Connection: Upgrade该Connection头被设置为”Upgrade”以表示的升级要求。 Upgrade: protocols所述Upgrade标头指定的一个或多个以逗号分隔的协议名称,首选项的顺序。

服务器可拒绝升级-在这种情况下,它仅仅是忽略了”Upgrade”头并发送回一个普通的响应(”200 OK”如果它可以提供所请求的资源时,30x如果它要执行重定向,状态码40x或50x一个如果不能提供请求的资源) - 或接受升级。在这种情况下,它会发送一个”101 Switching Protocols”带有升级标头的指定所选协议的标头。

重定向优先顺序

对于URL重定向有三种可能性,可以同时指定几种方法,但首先应用哪一种?优先顺序如下: 1.当甚至没有传输页面时,HTTP重定向总是首先执行,当然甚至没有读取。 2.meta如果没有任何HTTP重定向,则执行HTML重定向。 3.只有在客户端启用JavaScript的情况下,JavaScript重定向才是最后的手段。