HTTP 301
和< code>308状态代码有什么区别?
>
301
(永久移动):此请求和所有将来的请求都应定向到给定的URI。
308
(永久重定向):应该使用另一个URI重复请求和所有未来的请求。
他们似乎很相似。
RFC 7231 是 HTTP/1.1 协议的语义和内容的当前参考,它定义了 301
(永久移动)和 302
(已找到)状态代码,允许将请求方法从 POST
更改为 GET
。此规范还定义了 307
(临时重定向)状态代码,该代码不允许将请求方法从 POST
更改为 GET
。
请参阅下面的更多详细信息:
6.4.2. 301 永久移动
301
(永久移动)状态代码指示已为目标资源分配了新的永久 URI,并且对此资源的任何将来引用都应使用包含的 URI 之一。[...]
注意:由于历史原因,用户代理可能会将后续请求的请求方法从POST
更改为GET
。如果不需要这种行为,可以使用307
(临时重定向)状态代码。
6.4.3.找到302个
< code>302(已找到)状态代码表示目标资源暂时位于不同的URI下。由于重定向有时可能会被更改,所以客户端应该继续为将来的请求使用有效的请求URI。[...]
注意:由于历史原因,用户代理可能会将后续请求的请求方法从POST
更改为GET
。如果不需要这种行为,可以使用307
(临时重定向)状态代码。
6.4.7.307临时重定向
307
(临时重定向)状态代码指示目标资源暂时驻留在不同的 URI 下,如果用户代理执行到该 URI 的自动重定向,则不得更改请求方法。由于重定向可能会随时间而变化,因此客户端应继续使用原始的有效请求 URI 进行将来的请求。[...]
注意:此状态代码类似于302
(Found),只是它不允许将请求方法从POST。本规范没有为
301
(永久移动)(RFC 7238为此目的定义了状态代码308
用户代理可能将请求从
POST
更改为 GET
的“历史原因”在 2011 年 8 月 19 日的 IEInternals 博客的 Eric Lawrence 帖子中进行了解释。
文章引用了1996年5月发布的过时的RFC 1945中状态码的定义,RFC 1945
301
定义了HTTP/1.0。该引用的关键部分是:
注意:当收到
301
状态码后自动重定向POST
请求时,一些现有的用户代理会错误地将其更改为GET
请求。
然后作者继续说:
[…]这句话中提到的“用户代理”包括当时流行的浏览器,包括Netscape Navigator和Internet Explorer。可以说,这种行为正是大多数网站想要的——在成功完成
POST
后,将用户发送到不同的URL以向他们显示其他内容。然而,POST
-转换为-GET
行为并不是HTTP作者想要的。
创建RFC 7238是为了定义
308(永久重定向)状态代码,类似于
301(永久移动),但不允许将请求方法从
更改为
。
308
状态代码现在由RFC 7538定义(已过时的RFC 7238)。
3.308永久重定向
308
(永久重定向)状态代码表示目标资源已被分配了一个新的永久URI,并且对该资源的任何未来引用都应该使用其中一个随附的URI。具有链接编辑功能的客户端应该在可能的情况下自动将对有效请求URI的引用重新链接到服务器发送的一个或多个新引用。[…]
注意:此状态代码类似于
301
(永久移动),只是它不允许将请求方法从POST
更改为GET
。
因此,我们有以下内容:
+-----------+-----------+
| Permanent | Temporary |
+------------------------------------------------------------+-----------+-----------+
| Allows changing the request method from POST to GET | 301 | 302 |
+------------------------------------------------------------+-----------+-----------+
| Doesn't allow changing the request method from POST to GET | 308 | 307 |
+------------------------------------------------------------+-----------+-----------+
状态代码,请参见以下内容:Michael Kropat整理了一组决策图,帮助确定每种情况下的最佳状态代码。有关< code>2xx
和< code>3xx
问题内容: 根据OCP的书,必须避免有状态操作,否则称为有状态lambda表达式。本书中提供的定义是“有状态的lambda表达式,其结果取决于在管道执行期间可能更改的任何状态”。 它们提供了一个示例,其中使用并行流使用函数将固定的数字集合添加到同步的ArrayList 。 arraylist中的顺序是完全随机的,这应该使人看到有状态的lambda表达式在运行时会产生不可预测的结果。因此,强烈建议在
本文向大家介绍http中的301、302、307、308有什么区别?相关面试题,主要包含被问及http中的301、302、307、308有什么区别?时的应答技巧和注意事项,需要的朋友参考一下 301:永久移动 302:发现 307:临时重定向 308:永久重定向 链接
问题内容: 我的问题是关于关键字的一种特殊用法。可以使用关键字覆盖不属于任何函数的类中的代码块。例如,以下代码编译: 如果删除关键字,它将抱怨,因为变量是。但是,可以同时删除和关键字并进行编译。 这两种方式都使我感到困惑。我应该如何拥有不属于任何方法的代码段?如何调用它?通常,此用法的目的是什么?或者更好的是,在哪里可以找到有关此文档的文档? 问题答案: 带有修饰符的代码块表示一个类初始化程序。没
问题内容: 如果是代理设计模式,那么JDK的动态代理和第三方动态代码生成API(例如CGLib)有什么区别? 使用这两种方法之间的区别是什么?何时应该优先选择另一种方法? 问题答案: JDK动态代理只能按接口进行代理(因此,您的目标类需要实现一个接口,然后该接口也可以由代理类实现)。 CGLIB(和javassist)可以通过子类化创建代理。在这种情况下,代理将成为目标类的子类。无需接口。 因此,
在代理设计模式的情况下,jdk的动态代理和第三方的动态代码生成API(如cglib)有什么区别? 使用这两种方法之间有什么区别?什么时候应该选择一种方法而不是另一种方法?
我为Visual Studio代码分析定义了一组规则,并在Sonar(http://www.sonarqube.org/)中配置了这些规则。我得到不同的结果。