-
-
Save arantes555/99f8976266d340bad42b2894cb50d7d5 to your computer and use it in GitHub Desktop.
electron-bug-headers-on-304
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!-- Empty --> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Modules to control application life and create native browser window | |
const {app, BrowserWindow, net, session} = require('electron') | |
const http = require('http') | |
const {parse} = require('url') | |
class TestServer { | |
constructor ({port = 30001} = {}) { | |
this.server = http.createServer(this.router) | |
this.port = port | |
this.hostname = 'localhost' | |
this.server.on('error', err => console.log(err.stack)) | |
this.server.on('connection', socket => socket.setTimeout(1500)) | |
} | |
start () { | |
return new Promise((resolve, reject) => this.server.listen(this.port, '127.0.0.1', this.hostname, err => err ? reject(err) : resolve())) | |
} | |
stop () { | |
return new Promise((resolve, reject) => this.server.close(err => err ? reject(err) : resolve())) | |
} | |
router (req, res) { | |
let p = parse(req.url).pathname | |
if (p === '/hello') { | |
// console.log('SERVER:', req.headers) | |
if (req.headers['if-none-match'] === 'my-etag') { | |
console.log('Server responding with 304') | |
res.statusCode = 304 | |
res.end() | |
} else { | |
console.log('Server responding with 200') | |
res.statusCode = 200 | |
res.setHeader('Content-Type', 'text/plain') | |
res.setHeader('ETag', 'my-etag') | |
res.end('world') | |
} | |
} | |
} | |
} | |
const doRequest = (path) => new Promise((resolve) => { | |
let done = false | |
setTimeout(() => { | |
if (done) return | |
console.error(`/!\\ Request to ${path} TIMEOUT\n`) | |
resolve() | |
}, 2000) | |
console.log(`Starting request to ${path}`) | |
const options = { url: `http://localhost:30001${path}`} | |
const request = net.request(options) | |
request.on('error', (err) => { | |
console.log(`Request to ${path} got error `, err) | |
done = true | |
resolve() | |
}) | |
request.on('response', (response) => { | |
console.log('Got Response:', { | |
status: response.statusCode, | |
ContentType: response.headers['content-type'], | |
ContentLength: response.headers['content-length'] | |
}) | |
response.on('data', (chunk) => { | |
// console.log(`BODY: ${chunk}`) | |
}) | |
response.on('end', () => { | |
// console.log(`Finished request to ${path}\n`) | |
done = true | |
resolve() | |
}) | |
response.on('error', (err) => { | |
console.log(`Response from ${path} got error `, err, '\n') | |
done = true | |
resolve() | |
}) | |
}) | |
request.end() | |
}) | |
app.whenReady().then(async () => { | |
session.defaultSession.webRequest.onHeadersReceived((details, callback) => { | |
console.log('onHeadersReceived got', { | |
status: details.statusCode, | |
ContentType: details.responseHeaders['Content-Type'], | |
ContentLength: details.responseHeaders['Content-Length'] | |
}) | |
callback({}) | |
}) | |
const server = new TestServer() | |
await server.start() | |
await doRequest('/hello') | |
await doRequest('/hello') | |
}) | |
.finally(() => process.exit(0)) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Empty |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Empty |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* Empty */ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment