基于 python 的 https 服务器在提供响应后关闭连接

标签 http https server client

我在终端中创建了简单的服务器

#!/usr/bin/env python3
import sys, os, socket, ssl
import requests
import string
import time
from socketserver import ThreadingMixIn
from http.server import HTTPServer,BaseHTTPRequestHandler
from io import BytesIO
import json
import cgi

class ThreadingServer(ThreadingMixIn, HTTPServer):
    pass

class RequestHandler(BaseHTTPRequestHandler):
    def do_POST(self):
        content_length = int(self.headers['Content-Length'])
        body = self.rfile.read(content_length)
        #self.send_header('Content-type', 'Application/json')
        self.send_response(200)
        self.end_headers()
        response = BytesIO()
        self.allow_reuse_address = True
        self.wfile.write(b"""{"signingResponse": {"compactidentity": "..SdOwnT70ZZDAjgSmQVP-_0keB_pu4FjkBg5DZDyFf_V5k0EUAY0KCHr2g2a6wOSs-JhsehdYUnrYCfkYItzxLg;info=<http://52.23.250.93:8080/certs/shaken.crt>;alg=ES256;ppt=shaken\n", "TEST": "Nitish","identity": "eyJhbGciOiJFUzI1NiIsInBwdCI6InNoYWtlbiIsInR5cCI6InBhc3Nwb3J0IiwieDV1IjoiaHR0cDovLzUyLjIzLjI1MC45Mzo4MDgwL2NlcnRzL3NoYWtlbi5jcnQifQ.eyJhdHRlc3QiOiJBIiwiZGVzdCI6eyJ0biI6WyIxMjM1NTU1MTIxMiJdfSwiaWF0IjoxNDgzMjI4ODAwLCJvcmlnIjp7InRuIjoiMTIzNTU1NTEyMTIifSwib3JpZ2lkIjoiOGE4ZWM2MTgtYzZiOS0zMGFlLWI0MjctYWY0MTA0YjFjMDJjIn0.SdOwnT70ZZDAjgSmQVP-_0keB_pu4FjkBg5DZDyFf_V5k0EUAY0KCHr2g2a6wOSs-JhsehdYUnrYCfkYItzxLg;info=<http://52.23.250.93:8080/certs/shaken.crt>;alg=ES256;ppt=shaken\n", "requestid": "0"}} """)

httpd = ThreadingServer(('192.168.1.2', 8003), RequestHandler)
httpd.socket = ssl.wrap_socket(httpd.socket, keyfile='/home/nakumar/key.pem', certfile='/home/nakumar/certificate.pem', server_side=True)
httpd.serve_forever()

使用上面的代码我正在尝试模拟服务器 现在当服务器收到来自客户端的请求时,它发回响应并关闭连接,如下所示

请求

> POST /stir/v1/signing HTTP/1.1
Host: 192.168.1.2:8003
Accept: application/json
Content-Type: application/json
Content-Length: 331

回复

upload completely sent off: 331 out of 331 bytes
* HTTP 1.0, assume close after body
< HTTP/1.0 200 OK
< Server: BaseHTTP/0.6 Python/3.5.2
< Date: Tue, 09 Oct 2018 12:43:21 GMT
< 
* Closing connection 0

所以我们可以看到连接关闭是在服务响应后来自服务器的,

有没有办法在服务响应后不关闭连接。

最佳答案

Curl 正在关闭连接,因为响应正文中不存在内容长度 添加相同的内容后它开始工作

> POST /stir/v1/signing HTTP/1.1
Host: [FD00:10:6B50:4510:0:0:0:53]:8101
Accept: application/json
Content-Type: application/json
Content-Length: 325

* upload completely sent off: 325 out of 325 bytes
< HTTP/1.1 200 OK
< Server: HTTP/1.1 Python/3.5.2
< Date: Thu, 18 Oct 2018 09:13:11 GMT
< Content-type: Application/json
< Content-length: 150
< 
* Connection #1 to host FD00:10:6B50:4510:0:0:0:53 left intact

关于基于 python 的 https 服务器在提供响应后关闭连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52721686/

相关文章:

python - 如何在 suds 0.3.6 中添加 http header ?

jQuery 和传输编码分块

java - Android SSL https 发布

ruby-on-rails - http 而不是 heroku 托管应用程序的 https

nginx 在 X-RateLimit-Remaining header 中设置 limit_req 的剩余计数

php - 禁用 php 文件缓存以进行调试

c - 解析 HTTP header 的子集以识别主机 Web 地址

javascript - node.js 中的异步 https 请求

docker - Docker容器未保存状态

http - PHP_SELF vs PATH_INFO vs SCRIPT_NAME vs REQUEST_URI