【发布时间】:2015-10-26 20:28:08
【问题描述】:
我试图在 Mac OS X (10.9.5) 上的本地主机 http://127.0.0.1:8080/ 上显示 HTML 页面,但未显示图像。 我在 Common Lisp 中有一个非常粗鲁的程序充当网络服务器,它只是侦听 HTML 页面并将其输出到套接字 8080。 HTML 页面(剥离其他所有内容后)只是:
<html>
<head>
</head>
<body>This is a test
<img src="/Users/John/bs/images/MyImage.png"/>
</body>
</html>
当我在浏览器的 URL 中写 http://127.0.0.1:8080/ 时(我尝试过 FF 和 Safari),页面显示但没有图像。 我试图以所有可以想象的方式(../../bs/images/MyImage.png 等)将 img 路径从绝对路径更改为相对路径,但无济于事。 HTML 页面位于 /Users/John/bs/index.html。充当服务器的程序位于同一目录中。 如果我直接从 URL 栏打开页面, file:///Users/John/bs/index.html 它工作正常,显示图像。 我不知道这是否是来自主机根目录的相对路径问题(我忽略了它的位置),或者是浏览器通过 Web 服务器访问页面的问题。 这是 Lisp 代码的 sn-p:
(defun serve (request-handler)
(let ((socket (socket-server 8080)))
(unwind-protect
(loop (with-open-stream (stream (socket-accept socket))
(let* ((url (parse-url (read-line stream)))
(path (car url))
(header (get-header stream))
(params (append (cdr url)
(get-content-params stream header)))
(*standard-output* stream))
(funcall request-handler path header params))))
(socket-server-close socket))))
(defun request-handler (path header params)
(princ "HTTP/1.1 200 OK")
(terpri)
(terpri)
(with-open-file (in "bs/index.html")
(copy-stream in *standard-output*)))
(serve #'request-handler)
有人遇到过同样的问题吗?感谢您的任何建议。
【问题讨论】:
-
Leo,请提供一些在您编写的 Common-Lisp 服务器应用程序上使用的代码 - 这将有助于查明问题。
-
不要把它放在评论中 - 编辑你的问题...
-
另外,你的文件名是硬编码在你的代码中的吗?如果是这样,您的服务器将不会提供任何其他文件。
-
我不是 Lisp 程序员,但在我看来
name指的是params而不是path,所以无论您的浏览器请求什么路径,@987654328 @ 总是假的,除非在查询中(在路径之后)请求了某些东西......另外,你的代码在哪里打开任何不是bs/index.html的文件? - 如果你的服务器不提供,你的浏览器就不能拥有它. -
我不得不删掉很多行,只留下必不可少的部分,但就像我之前提到的,页面是由服务器提供的,只是没有显示的图像。
标签: html macos http common-lisp relative-path