使用 Python Socket 服务器发送 CSS

3
我创建了一个小型的Python HTML服务器,但是我在发送外部CSS和JavaScript方面遇到了问题。HTML正常传输且内联CSS也能正常工作。Chrome开发者工具显示以下错误信息:

资源被解释为样式表,但 MIME 类型却为 text/plain:"http://localhost:8888/style.css"

不幸的是,我不知道"MIME类型"是什么。

以下是Python代码:

# server.py
import socket

file = open('website/index.html', 'r')

def start_server(HOST, PORT):
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    s.bind((HOST, PORT))
    s.listen(1)

    print('Serving HTTP on port %s ...' % PORT)
    while True:
        client_connection, client_address = s.accept()
        request = client_connection.recv(1024)
        print(request.decode('utf-8'))

        http_response = """\
http/1.1 200 OK

""" + file.read() + """
"""
        client_connection.sendall(bytes(http_response, 'utf-8'))
        client_connection.close()

如有需要,我可以提供任何额外的信息。 - rscarth
2
除了下面的答案,你还必须发送另一个头部:Connection: close,因为你没有持久连接。 - UltraInstinct
@SuperSaiyan:实际上,在这种情况下,您不需要发送Connection头,因为响应随着底层TCP连接的关闭而关闭。风格不好但有效。 - Steffen Ullrich
我只是在学习,谢谢你的回复! - rscarth
1个回答

2
将这行添加到你的响应字符串中,在 200 OK 行的下面:
Content-Type: text/css

正在发生的是Chrome试图将您发送的HTML解释为样式表,这正是您想要的。但是,当您发送它时,您使用的内容标头告诉Chrome“我只是普通文本,没有什么特别之处!”因此,Chrome认为出了问题,因为它期望收到一个样式表,于是就会抛出您看到的错误。如果您告诉Chrome您正在发送样式表,则应该可以解决此错误。 这是来自Mozilla而不是Chrome,但它提供了MIME类型的良好概述。

我回家后会检查这个。谢谢你的回复。 - rscarth
这将在“pre”标签中打印所有HTML代码。截图:http://puu.sh/qw4mq.png - rscarth

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接