【问题标题】:If i sent the following response to my browser, am I supposed to get any kind of feedback?如果我向浏览器发送以下响应,我应该得到任何反馈吗?
【发布时间】:2013-03-29 00:50:21
【问题描述】:

对于一个作业,我编写了一个服务于 HTML 文件的服务器,并且我应该使用我的 Web 浏览器作为测试客户端。我还被告知,如果请求不存在的文件,我应该发送以下内容 HTTP/1.1 404 Not Found\r\n\r\n 如果还有其他问题

HTTP/1.1 500 Internal Server Error\r\n\r\n"

我已经运行了测试,应该会发送这些测试,但我的浏览器窗口中没有任何反应?我是否应该通过发送此类请求获得任何视觉反馈?

【问题讨论】:

  • 这取决于浏览器 - 但通常是的。使用 Firebug 之类的工具来确保返回正确 HTTP 结果。
  • 我不知道 FireBug 是什么
  • 谷歌可以。另请参阅“IE 开发人员工具”或 Safari/Chrome 的任何等效项。

标签: java html io stream


【解决方案1】:

在 HTML 响应中,每一行之后应该只有一个 CRLF(回车和换行)。所以可以先去掉多余的\r\n

同样在第二行,如果您想显示错误,您可以将 HTML 响应发送回客户端,说明错误是什么。这通常是典型的 Web 服务器所做的,如果没有定义,它有默认的错误页面。如果您不发送任何 HTTP 标头,那么您可以插入要发回的 HTML 正文,例如 <h1> No page found</h1> 作为第二行。

【讨论】:

  • 你需要 CRLF CRLF 来结束响应头。
【解决方案2】:

在 http 响应中包含“实体”

HTTP/1.1 404 Not Found
Content-Type: text/html
Content-Length: 10

01234576789

每一行都以 CRLF 结束。请务必正确计算 Content-Length。

【讨论】:

    【解决方案3】:

    我看到这是一个学习练习,并且了解您可能已被告知以这种方式实现服务器。但记住这一点......


    这是实现 Web 服务器/服务的错误方法。正确的方法是找到现有的实现并在此基础上构建您的服务。

    • 您可以使用 Java EE Web 容器;即实现 Servlets 规范的东西。
    • 您可以使用非 servlet 框架(如 Grizzly)。
    • 您可以在服务器端 HTTP 协议栈之上构建;例如使用 Apache 的 HttpComponent 库。

    如果您打算正确地从头开始构建 Web 服务器,则需要做大量工作。以及您无法正确执行此操作的机会;即您不会根据 HTTP 规范所说的服务器应该如何运行来实现您的服务。你会遗漏一些事情,做错事等等。

    请不要这样做。那里已经有太多损坏(即不合规)的 Web 服务器。我们不需要更多。

    如果您决定从头开始实施 HTTP,那么您(您)需要彻底阅读并理解 HTTP 规范。而且您(您)需要对浏览器如何实现规范的客户端进行自己的基础研究……以及因此您需要在服务器端做什么才能使浏览器“正常”运行。

    【讨论】:

      猜你喜欢
      • 2021-09-07
      • 1970-01-01
      • 1970-01-01
      • 2019-04-17
      • 2011-11-06
      • 2014-12-22
      • 2019-10-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多