【问题标题】:Images do not display on a web page via a web server图像不会通过 Web 服务器显示在网页上
【发布时间】: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


【解决方案1】:

当您的浏览器联系您的网络服务器(您编写的代码)时,任何不以“scheme”(通常是“http://”或“https://”)和主机名开头的链接都会被视为相对于获取的页面。这意味着您的浏览器将向同一服务器发送资源“/Users/John/bs/images/MyImage.png”的请求,除非您的服务器可以通过流发送回图像,否则它将显示为损坏的页面上的图像。

简单的修复(让它在你的计算机上工作)是将图像 URL 更改为“file://localhost//Users/John/bs/images/MyImage.png” ,但这是错误的解决方法。正确的解决方法是在请求的路径上调度并在需要时提供基本 HTML 页面,或在需要时提供图像。

【讨论】:

    【解决方案2】:

    试试下面的。相对路径应该是相对于调用图像的文件,所以你不会想一直回到 /Users/John。

    <img src="images/MyImage.png"/>
    

    【讨论】:

      猜你喜欢
      • 2019-03-10
      • 1970-01-01
      • 2017-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-22
      相关资源
      最近更新 更多