【问题标题】:Send css over python socket server通过 python 套接字服务器发送 css
【发布时间】:2016-08-09 23:01:55
【问题描述】:

我创建了一个小型 python html 服务器,但在发送外部 css 和 javascript 时遇到问题。 html 按应有的方式传输,内联 css 工作正常。 chrome 开发者工具响应此错误:

资源被解释为样式表,但以 MIME 类型传输 文本/纯文本:“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()

【问题讨论】:

  • 我可以根据要求提供任何额外信息。
  • 除了下面的答案,你还必须发送另一个头:Connection: close,因为你没有持久连接。
  • @SuperSaiyan:实际上在这种情况下您不需要发送 Connection 标头,因为响应会随着底层 TCP 连接的关闭而关闭。样式不好但有效。
  • 我正在学习,感谢您的回复!

标签: python html sockets


【解决方案1】:

将此行添加到您的响应字符串中 200 OK 行的正下方:

Content-Type: text/css

Chrome 正在尝试将您发送的 HTML 解释为您想要的样式表。但是,当你发送它时,你发送的是一个内容标题,它告诉 chrome “我只是纯文本,这里没什么特别的!”所以 Chrome 就像,这有问题,我期待一个样式表,并抛出你看到的错误。如果您告诉 Chrome 您正在向其发送样式表,则该错误应该得到解决。

This is from Mozilla rather than Chrome, but it gives a good overview of MIME types.

【讨论】:

  • 我回家后会检查一下。感谢您的回复。
  • 这会打印“pre”标签中的所有 html 代码。截图:puu.sh/qw4mq.png
猜你喜欢
  • 2014-06-07
  • 1970-01-01
  • 1970-01-01
  • 2019-01-01
  • 2021-10-13
  • 1970-01-01
  • 2022-01-15
  • 2015-08-28
  • 2021-07-06
相关资源
最近更新 更多