【问题标题】:How to do a server side HTTP redirection instead of a meta refresh如何进行服务器端 HTTP 重定向而不是元刷新
【发布时间】:2014-04-25 11:39:30
【问题描述】:

根据 W3 不鼓励 Meta 刷新,他们建议使用服务器端重定向。所以我的问题是我应该如何在 HTTPServer 中做到这一点?

这里的 API 没有提供任何重定向方法: http://docs.oracle.com/javase/7/docs/jre/api/net/httpserver/spec/com/sun/net/httpserver/HttpServer.html

如果这个“重定向”不是那么抽象的东西,那背后的想法是什么?

【问题讨论】:

标签: java http redirect


【解决方案1】:

W3 表示 this 时的意思是,不是您的 HTTP 服务器返回状态码 200(OK),响应正文包含带有 HTML 的

 <META HTTP-EQUIV=REFRESH CONTENT="1; URL=http://www.example.org/bar">

您的 HTTP 服务器返回一个合适的 3xx (redirect) 状态代码,并带有一个 Location 标头,该标头提供了要重定向到的位置。

most suitable 状态码将是 302 (Found) 如果您仍然希望人们使用原始 URL 作为被重定向 URL 的别名(HTTP 标准说“客户端应该继续使用 Request-URI未来的请求”)。

如果您希望用户停止使用原始 URL,最合适的状态代码将是 301 (Moved Permanently)。

【讨论】:

  • 谢谢,但我该怎么做呢?如您能举一个要发送的 Location 标头的示例吗?
  • @SarpKaya 阅读HttpServer、HttpHandler 和HttpExchange 的文档。如果您对它们有特定的困难,请提出一个新问题。本网站不是代码编写服务。
  • 对不起,我正在尝试做:" exchange.getResponseHeaders().set("Location", "/redirect"); exchange.sendResponseHeaders(301, -1);"但它只是打开一个空白页面。这就是我问一个例子的原因。
  • @SarpKaya 非常感谢!我将 #sendResponseHeaders(302, 1) 更改为 (302, -1),现在它可以工作了。
猜你喜欢
  • 1970-01-01
  • 2014-01-09
  • 1970-01-01
  • 2016-07-28
  • 2016-05-17
  • 2018-04-07
  • 1970-01-01
  • 1970-01-01
  • 2023-03-11
相关资源
最近更新 更多