2015-10-26 42 views
-1

我试图在Mac OS X(10.9.5)上的本地主机http://127.0.0.1:8080/上显示HTML页面,但图像未显示。 我在Common Lisp的一个非常粗鲁的程序作为Web服务器,它只是监听和HTML页面输出到插座8080 的HTML页面(剥离一切后)只是:图像不会通过网络服务器显示在网页上

<html> 
    <head> 
    </head> 
    <body>This is a test 
    <img src="/Users/John/bs/images/MyImage.png"/> 
    </body> 
</html> 

当我写http://127.0.0.1:8080/在浏览器的URL(我尝试过FF和Safari)页面显示,但没有图像。 我试图改变img路径从绝对到相对,以所有可以想象的方式(../../bs/images/MyImage.png等),但无济于事。 HTML页面位于/Users/John/bs/index.html。充当服务器的程序位于相同的目录中。 如果我直接从URL栏中打开该页面,file:///Users/John/bs/index.html它工作正常,显示图像。 我不知道这是否是从主机根(我忽略它在哪里)的相对路径的问题,或浏览器通过Web服务器访问页面的问题。 这里是Lisp代码的一个片段:

(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) 

有没有人有同样的问题?感谢您的任何建议。

+0

Leo,请提供您编写的Common-Lisp服务器应用程序中使用的一些代码 - 这有助于查明问题。 – Myst

+0

请勿将它置于评论中 - 编辑您的问题... – Myst

+0

此外,您的文件名是否在您的代码中硬编码?如果是这样,您的服务器将不会提供任何其他文件。 – Myst

回答

0

请尝试以下操作。相对路径应该与调用映像的文件相关,因此您不想一直回到/ Users/John。

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

当你的浏览器接触到您的Web服务器(你所编写的代码),即不以“计划”启动(通常的“http://”或“https://”)的任何链接并且主机名将被视为相对于所获取的页面。这意味着您的浏览器会向资源“/Users/John/bs/images/MyImage.png”的相同服务器发送请求,除非您的服务器可以通过该流将图像发回,否则它将显示为已损坏图片在页面上。

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