我有个问题。我编写了一些混合Javascript和Python的代码。我的想法是将文件拖放到画布中,然后将Ajax请求发送到线程中本地运行的python服务器
基本上,Javascript部分如下所示:
$(document).on('drop', '#canvas', function(e) {
if(e.originalEvent.dataTransfer) {
var files = e.originalEvent.dataTransfer.files,
formData = new FormData(),
xhr = new XMLHttpRequest();
// main function here
xhr.open("POST", 'http://localhost:8001/upload_images.py', true)
xhr.send(formData)
后端只是一个python SimpleHttpServer
:
class FileUploadHTTPRequestHandler(SimpleHTTPRequestHandler):
protocol_version = "HTTP/1.1"
def end_headers(self):
# overwrite SimpleHTTPRequestHandler to handle CORS policy
self.send_header('Access-Control-Allow-Origin', '*')
self.send_header("Access-Control-Allow-Headers", "*")
self.send_header('Access-Control-Allow-Methods', 'POST, GET, OPTIONS')
BaseHTTPRequestHandler.end_headers(self)
def do_POST(self):
"""Handle a POST request."""
# main code here
self.send_response(200)
self.send_header("Content-type", "Application/json")
self.send_header("Content-Length", len(response_str))
self.end_headers()
self.wfile.write(response_str.encode('utf-8'))
def do_OPTIONS(self):
# handle Pre-flight
self.send_response(200, "ok")
# call our own end_headers to handle pre-flight
self.end_headers()
事情是这样的。当我使用谷歌chrome在Windows 10上运行这段代码时,一切正常。我可以看到,从Javascript发送的POST请求首先作为python服务器(飞行前)中的选项被接收,然后执行真正的POST请求,一切正常,我的图像显示在画布中
另一方面,现在我已经用Chrome/Chrome将我的工作代码放在Ubuntu上了。。。代码不再工作了。发送来自我的Javascript的帖子。它在我的python服务器中仍然作为一个选项接收,但是它从未从我的python服务器进入我的do_POST
在Ubuntu下的chrome调试器中,在网络下,我可以看到“警告:请求尚未完成”。所以看起来Javascript从一开始就没有收到do_OPTIONS响应,我的请求仍然悬而未决
我迷路了。我不明白为什么它可以在Windows+GoogleChrome上运行,但不能在Ubuntu+chrome上运行
注: 我尝试过改变端口,改变“end_headers()”和其他很多东西,但我可以让它工作
我希望有人已经遇到了这个问题
编辑:在两台计算机上调试时。我注意到,在Ubuntu上,代码在http
库的handle_one_request(self)
from server.py中崩溃
行:self.raw_requestline = self.rfile.readline(65337)
是有故障的一行
所以,我终于成功了
正如您在我的原始帖子中所看到的,我的课程从以下内容开始:
实际上,如果删除
protocol_version = "HTTP/1.1
类属性,那么它就可以工作了。我不知道为什么它在WIndows+Chrome上运行得很好,但在Ubuntu+Chrome上却不行注意:两个操作系统上的Chrome版本相似
我在互联网上搜索了一下,但没有找到解释,比如为什么预先设定HTTP协议版本会对代码产生如此大的影响。。。如果有人知道HTTP协议版本的精确与否对代码的影响,我很乐意知道
相关问题 更多 >
编程相关推荐