HTTP/1.1 302 Moved Temporarily是啥意思
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HTTP/1.1 302 Moved Temporarily是啥意思相关的知识,希望对你有一定的参考价值。
302 Moved temporarily (redirect) 你所连接的页面进行了Redirect ,即连接超时。
302 Found 类似于301,但新的URL应该被视为临时性的替代,而不是永久性的。
注意,在HTTP1.0中对应的状态信息是“Moved Temporatily”,而HttpServletResponse中相应的常量是SC_MOVED_TEMPORARILY,而不是SC_FOUND。
出现该状态代码时,浏览器能够自动访问新的URL,因此它是一个很有用的状态代码。
扩展资料:
302 Found解决办法:
1、302 重定向代码,一般是网页出错以后,做重新跳转,还有可能是你电脑的系统问题,可能是浏览器权限设定问题,也可能是有病毒或者杀毒软件的问题。
2、先看下浏览器的权限-工具-INTERNET选项-安全,里面设置级别,工具-INTERNET选项-内容,家长设置,工具-INTERNET选项-高级,还原默认值,然后关闭杀毒软件。
3、出现该状态代码时,浏览器能够自动访问新的URL,因此它是一个很有用的状态代码、为此,Servlet提供了一个专用的方法,即sendRedirect、自动把它们转换成绝对URL。
4、另外对于一些客户端预埋的Url链接,免不了老版本地址失效与更改,将老地址配置302跳转到新地址,这样就能够全面兼容所有客户端版本。
参考技术A 应该是连接超时吧 302 Moved temporarily (redirect) 你所连接的页面进行了Redirect 302 Found 类似于301,但新的URL应该被视为临时性的替代,而不是永久性的。注意,在HTTP1.0中对应的状态信息是“Moved Temporatily”,而HttpServletResponse中相应的常量是SC_MOVED_TEMPORARILY,而不是SC_FOUND。出现该状态代码时,浏览器能够自动访问新的URL,因此它是一个很有用的状态代码。为此,Servlet提供了一个专用的方法,即sendRedirect。使用response.sendRedirect(url)比使用response.setStatus(response.SC_MOVED_TEMPORARILY)和response.setHeader("Location",url)更好。这是因为: 首先,代码更加简洁。 第二,使用sendRedirect,Servlet会自动构造一个包含新链接的页面(用于那些不能自动重定向的老式浏览器)。 最后,sendRedirect能够处理相对URL,自动把它们转换成绝对URL。 注意这个状态代码有时候可以和301替换使用。例如,如果浏览器错误地请求 http://host/~user(缺少了后面的斜杠),有的服务器返回301,有的则返回302。 严格地说,我们只能假定只有当原来的请求是GET时浏览器才会自动重定向。 参考资料: http://zhidao.baidu.com/question/16119833.html?si=4如果请求路径包含附加斜杠,则 Golang “301 Moved Permanently”
【中文标题】如果请求路径包含附加斜杠,则 Golang “301 Moved Permanently”【英文标题】:Golang "301 Moved Permanently" if request path contains additional slash 【发布时间】:2018-05-08 14:49:58 【问题描述】:我一直在使用 golang 的默认 http.ServeMux
进行 http 路由处理。
wrap := func(h func(t *MyStruct, w http.ResponseWriter, r *http.Request)) func(http.ResponseWriter, *http.Request)
return func(w http.ResponseWriter, r *http.Request)
h(t, w, r)
// Register handlers with default mux
httpMux := http.NewServeMux()
httpMux.HandleFunc("/", wrap(payloadHandler))
假设这个服务器可以通过http://example.com/
访问
我的客户请求中很少有路径http://example.com/api//module
(注意额外的斜杠)被重定向为301 Moved Permanently
。探索 golang 的 http ServeMux.Handler(r *Request)
函数内部,似乎是有意的。
path := cleanPath(r.URL.Path)
// if there is any change between actual and cleaned path, the request is 301 ed
if path != r.URL.Path
_, pattern = mux.handler(host, path)
url := *r.URL
url.Path = path
return RedirectHandler(url.String(), StatusMovedPermanently), pattern
我已经研究过其他类似的问题。
go-web-server-is-automatically-redirecting-post-requests
上面的 qn 在寄存器模式本身存在冗余/
的问题,但我的用例不是寄存器模式(在一些与寄存器模式无关的嵌套路径中)
问题是,由于我的客户的请求是POST
,浏览器会使用带有精确查询参数和POST 正文的新GET
请求来处理301。但是更改 HTTP 方法会导致请求失败。
我已经指示客户修复 url 中多余的 /
,但修复可能需要几个 (?) 周才能部署到所有客户端位置。
这些多余的/
在Apache Tomcat
中也可以很好地处理,但仅在 golang 服务器中失败。那么这是我的用例中的预期行为(嵌套路径中的冗余 /
)与 golang 或可能的错误?
我正在考虑覆盖ServeMux
的Handler
函数的方法,但它不会有用,因为Handler
调用是在内部进行的。希望禁用此 301 行为,我们将不胜感激。
相关链接
http-post-method-is-actally-sending-a-get
【问题讨论】:
【参考方案1】:干净和重定向是预期的行为。
使用删除双斜杠的处理程序包装多路复用器:
type slashFix struct
mux http.Handler
func (h *slashFix) ServeHTTP(w http.ResponseWriter, r *http.Request)
r.URL.Path = strings.Replace(r.URL.Path, "//", "/", -1)
h.mux.ServeHTTP(w, r)
像这样使用它:
httpMux := http.NewServeMux()
httpMux.HandleFunc("/", wrap(payloadHandler))
http.ListenAndServe(addr, &slashFixhttpMux)
【讨论】:
首先我使用了 Gorilla Mux,但在看到这个之后.. 让我开心..!【参考方案2】:接受的答案解决了问题
另一种方法是使用Gorilla mux 并设置SkipClean(true)
。但请务必了解其doc中的副作用
SkipClean 定义了新路由的路径清理行为。初始值为假。用户应该注意哪些路由没有被清理。当为真时,如果路由路径是“/path//to”,它将保留双斜杠。如果您有这样的路线,这将很有帮助:/fetch/http://xkcd.com/534/
当为false时,路径会被清理,所以/fetch/http://xkcd.com/534/会变成/fetch/http/xkcd.com/534
func (r *Router) SkipClean(value bool) *Router
r.skipClean = value
return r
【讨论】:
以上是关于HTTP/1.1 302 Moved Temporarily是啥意思的主要内容,如果未能解决你的问题,请参考以下文章
网站出现“302 Moved Temporarily”该怎么办?