Skip to content

Instantly share code, notes, and snippets.

@nemosupremo
Created April 26, 2016 22:56
Show Gist options
  • Save nemosupremo/c3abd23f4448b1a7022bf6de0919d61d to your computer and use it in GitHub Desktop.
Save nemosupremo/c3abd23f4448b1a7022bf6de0919d61d to your computer and use it in GitHub Desktop.
package main
import (
"io"
"io/ioutil"
"log"
"net/http"
"strings"
"time"
"github.com/nemothekid/net/http2"
)
func handler(w http.ResponseWriter, r *http.Request) {
if r.Method == "POST" {
log.Printf("Received %s post request whose Headers are %v", r.Proto, r.Header)
if false {
io.Copy(ioutil.Discard, r.Body)
}
if true {
log.Printf("req.Body.Close() start here")
err := r.Body.Close()
log.Printf("req.Body.Close() here, err=%v\n", err)
}
if false {
time.Sleep(700 * time.Millisecond)
}
//http.Error(w, error, code)
w.WriteHeader(413)
b, err := io.Copy(w, strings.NewReader(strings.Repeat("XXXXXX", 4192)))
log.Printf("Wrote %d bytes. Error: %v", b, err)
return
}
w.Header().Set("Content-Type", "text/html")
w.Write([]byte(`
<body>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.0.0-beta1/jquery.min.js"></script>
<script>
var reqs = 1;
$('body').text('Sending ' + reqs + ' requests...');
function send(i) {
var el = $('<div class="req">Waiting...</div>').attr('id', i).appendTo('body');
var data = new FormData();
data.append('file', new File([new Blob([new Array(5 * 1024 * 1024).join('0')], {type: 'image/jpeg'})], 'test.jpg'));
var done = false;
var req = new XMLHttpRequest();
req.onreadystatechange = function(e) {
if (done || req.readyState !== 3) return;
done = true;
el.text('Done. Got ' + req.status);
}
req.open('POST', '/', true);
req.send(data);
}
for (var i = 0; i < reqs; i++)
send(i);
</script>
</body>
`))
}
func main() {
s := &http.Server{Addr: ":1333", Handler: nil}
if e := http2.ConfigureServer(s, nil); e != nil {
panic(e)
}
http.HandleFunc("/", handler)
if err := s.ListenAndServeTLS("ssl.crt", ssl.key"); err != nil {
log.Fatal(err)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment