Ok so, as far as the synchronous mode is concerned, I think it's pretty much perfect as it is, maybe an optional switch uN, to abort the request if it takes too long, in order not to lock mIRC ($httpreq() returning $timeout).
For the asynchronous mode, you're are missing a parameter for the protocol itself (well, synchronous mode also suffer this problem), I don't think enforcing http 1.1 is a good idea (that could change to a greater version anyway), we should be able to specify 1.0.
For the session, I rather think that by default, it should be disabled, that we should be able to enable it with a switch in /httpstart, sounds better imo, but can't really tell why.
For the Json part, well something built-in would be better, but the COM script by Sreject (Froggie in here) is more than good enough
; Error if /httpstart was executed without matching /httpsend.
I don't understand this, did you mean an error if /httpsend is used without /httpstart?