【问题标题】:How to send a request using client-side javascript to a server with specific port?如何使用客户端 javascript 向具有特定端口的服务器发送请求?
【发布时间】:2020-03-23 21:23:29
【问题描述】:

这个问题实际上可能无法描述我的问题。 所以我有一个主机A。我想在html页面中使用js发送一个带有有效负载的请求。目的地是另一个主机 B。主机 B 在另一个网络上,我希望它接收来自 A 的请求。我不知道该怎么做。 我尝试设置一个简单的 python 服务器来打印请求:

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((localhost, PORT)) ## localhost: 127.0.0.1 and random port
s.listen()
conn, addr = s.accept()
with conn:
    print('Connected by', addr)
    data = ""
    while True:
        data += conn.recv(2048)
        if not data:
            break
    print(data)

我觉得这是非常错误的。无论如何,在 A 上,我尝试使用 fetch api 发送 get 请求:

fetch(`http://${public_ip_of_B}:${port_of_B}/${payload}`)

请求保持挂起状态并引发错误。

那么如何将请求从 A 发送到 B? 提前致谢

【问题讨论】:

  • fetch() 使用 HTTP 协议,不能只发送原始数据。
  • Python 代码需要发回格式正确的 HTTP 响应。
  • WebSockets 适用于浏览器和服务器之间的长期连接,它们在其中来回发送信息并可以保持连接状态。我们将它用作我们的游戏应用程序。
  • 你不应该绑定到localhost。这将只允许来自同一台机器的请求,而不是远程客户端。
  • @EyePatch: “我以为我可以收到字符串“GET HTTP1.1...”。” - 你可以。但是您只会在客户端关闭连接后打印您收到的内容,并且客户端只会在服务器在发送响应后关闭连接后关闭连接,但您的服务器甚至不会开始读取响应,因为它仍在从客户端读取.请阅读实际的 HTTP 标准,而不是(错误地)事后猜测它是如何工作的。

标签: javascript python sockets request


【解决方案1】:

不要绑定到localhost。要接受来自任何地方的连接,请在绑定时使用空字符串作为主机地址。

s.bind(('', PORT))

【讨论】:

    猜你喜欢
    • 2018-06-03
    • 1970-01-01
    • 2020-07-15
    • 2015-06-15
    • 2016-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多