仅使用核心 Java API,我试图发送带有正确格式的 HTTP 标头的响应。使用我当前的代码,我可以看到客户端收到了我的响应,但我认为我没有包含所有信息,因为当我向 Web 浏览器客户端返回 404 错误时,Web 浏览器只会显示一个空白页面。如果我尝试使用 curl,我也看不到让我知道错误的 curl。这是我目前对响应所做的事情:
outputStream.write("HTTP/1.1 404 Not Found".getBytes());
HTTP 响应由三部分组成
Content-Type
, Content-Length
, Last-Modified
,Cookie
等响应标头)您只发送第一个。
您应该发送的一个示例是
HTTP/1.1 404 Not Found
Date: Fri, 18 Aug 2012 13:24:45 GMT
Content-Type: text/HTML
Content-Length: 90
<html><head><title>Page not found</title></head><body>The page was not found.</body></html>
另外,不要忘记最后关闭套接字。
本页以简单易懂的方式描述了 HTTP 响应。
编辑
需要注意的是,响应中的每一行都必须用CR
和LF
字符分隔。因此,您还应该在调用getBytes()
.
当您给出 404 错误时,您应该包含内容供浏览器显示。包括一个 Content-Length 和 Content-Type 属性,然后是一些供浏览器显示的 html 内容。还要记住在写入流后刷新流。正确的响应可能如下所示:
String response = "HTTP/1.1 404 Not Found\r\n" +
"Content-Length: 22\r\n" +
"Content-Type: text/html\r\n\r\n" +
"<h1>404 Not Found</h1>";
outputStream.write(response.getBytes());
outputStream.flush();
每个标题后应该有一个回车和一个换行符(\r\n),并且在标题完成后有两个\r\n,这样您就可以指示内容即将出现。
添加换行符并关闭连接有助于我的浏览器并curl
理解响应:
outputStream.write("HTTP/1.1 404 Not Found\n".getBytes());
outputStream.close();
...以及最小的“工作”响应:
outputStream.write("HTTP/1.1 200 OK\n\nHello, world!".getBytes())
outputStream.close()