Seeing this when running an HTML5 Godot game?
This is a simple no-cache Python 3 gamedev-friendly webserver which runs on port 4443.
Run with
python3 gamedevweb.py
Now visit https://localhost:4443
Seeing this when running an HTML5 Godot game?
This is a simple no-cache Python 3 gamedev-friendly webserver which runs on port 4443.
Run with
python3 gamedevweb.py
Now visit https://localhost:4443
import http.server | |
import ssl | |
import datetime | |
import tempfile | |
import os | |
from cryptography import x509 | |
from cryptography.hazmat.backends import default_backend | |
from cryptography.hazmat.primitives import serialization | |
from cryptography.hazmat.primitives.asymmetric import rsa | |
from cryptography.hazmat.primitives.hashes import SHA256 | |
from cryptography.x509.oid import NameOID | |
class MyRequestHandler(http.server.SimpleHTTPRequestHandler): | |
def end_headers(self): | |
self.send_header("Cross-Origin-Embedder-Policy", "require-corp") | |
self.send_header("Cross-Origin-Opener-Policy", "same-origin") | |
self.send_header("Cache-Control", "no-store, no-cache, must-revalidate, max-age=0") | |
self.send_header("Pragma", "no-cache") | |
self.send_header("Expires", "0") | |
super().end_headers() | |
# Generate a self-signed certificate | |
private_key = rsa.generate_private_key( | |
public_exponent=65537, | |
key_size=2048, | |
backend=default_backend() | |
) | |
public_key = private_key.public_key() | |
builder = x509.CertificateBuilder() | |
builder = builder.subject_name(x509.Name([ | |
x509.NameAttribute(NameOID.COMMON_NAME, u'localhost') | |
])) | |
builder = builder.issuer_name(x509.Name([ | |
x509.NameAttribute(NameOID.COMMON_NAME, u'localhost') | |
])) | |
builder = builder.not_valid_before(datetime.datetime.now() - datetime.timedelta(days=1)) | |
builder = builder.not_valid_after(datetime.datetime.now() + datetime.timedelta(days=365)) | |
builder = builder.serial_number(x509.random_serial_number()) | |
builder = builder.public_key(public_key) | |
certificate = builder.sign( | |
private_key=private_key, | |
algorithm=SHA256(), | |
backend=default_backend() | |
) | |
# Create a temporary directory to store the certificate and key | |
temp_dir = tempfile.mkdtemp() | |
print(f"generating temp certs in {temp_dir}") | |
cert_path = os.path.join(temp_dir, 'server.crt') | |
key_path = os.path.join(temp_dir, 'server.key') | |
# Write the certificate and key to files in the temporary directory | |
with open(cert_path, 'wb') as cert_file: | |
cert_file.write(certificate.public_bytes(serialization.Encoding.PEM)) | |
with open(key_path, 'wb') as key_file: | |
key_file.write(private_key.private_bytes( | |
encoding=serialization.Encoding.PEM, | |
format=serialization.PrivateFormat.TraditionalOpenSSL, | |
encryption_algorithm=serialization.NoEncryption() | |
)) | |
# Create the server with the in-memory certificate | |
server_address = ('localhost', 4443) | |
httpd = http.server.HTTPServer(server_address, MyRequestHandler) | |
context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER) | |
context.load_cert_chain(certfile=cert_path, keyfile=key_path) | |
httpd.socket = context.wrap_socket(httpd.socket, server_side=True) | |
print(f"Serving on https://{server_address[0]}:{server_address[1]}/") | |
httpd.serve_forever() |