3 ms·
Maybe dumb question: how does the server “decide” anything other than what file to serve? Today we have many choices but back in the day CGI was the first stand
by cobbzilla 5mo ago
Maybe dumb question: how does the server “decide” anything other than what file to serve? Today we have many choices but back in the day CGI was the first standard way to do it.
So yes query parameters existed before CGI but to use them you had to hack your server to do something with them (iirc NCSA web servers had some magic hacks for queries). CGI drove standardization.
- stirfish 5mo agofunc specialHandler(w http.ResponseWriter, r *http.Request) { if time.Now().Weekday() == time.Tuesday { http.NotFound(w, r) return } fmt.Fprintln(w, "server made a decision") } Your server can make decisions however you program it to, you know? It's just software. Forgive the phone-posting.
- deleted 5mo ago[deleted]
- cobbzilla 5mo agoand what server software is running this code in 1995?
- lispwitch 5mo agoCL-HTTP or AOLserver
- cobbzilla 5mo agosure looks like VB there, what’s the plugin? Didn’t see anything like that before.
- heavensteeth 5mo agoThat's Go.
- cobbzilla 5mo agoWhich runs on what computer in 1995?
- stirfish 5mo agoI'm not sure what point you're trying to make. Here it is in C, so you can run it on you computer in 1995? Because servers could make decisions in 1995. int main() { int s = socket(AF_INET, SOCK_STREAM, 0); setsockopt(s, SOL_SOCKET, SO_REUSEADDR, &(int){1}, sizeof(int)); struct sockaddr_in addr = { AF_INET, htons(8080), .sin_addr.s_addr = INADDR_ANY }; bind(s, (struct sockaddr*)&addr, sizeof(addr)); listen(s, 10); printf("Listening on :8080\n"); while (1) { int c = accept(s, NULL, NULL); char req[1024] = {0}; read(c, req, sizeof(req) - 1); time_t now = time(NULL); int tuesday = localtime(&now)->tm_wday == 2; const char *status = tuesday ? "404 Not Found" : "200 OK"; const char *body = tuesday ? "Not Found (it's Tuesday)" : "Hello from 1995!"; char resp[256]; snprintf(resp, sizeof(resp), "HTTP/1.1 %s\r\n" "Content-Length: %zu\r\n" "Connection: close\r\n\r\n%s", status, strlen(body), body); write(c, resp, strlen(resp)); close(c); } }
- cobbzilla 5mo agoA post claimed CGI led to bad standards around query parameter formatting and parsing. I was merely pointing out that, prior to the advent of CGI, if you wanted to actually do anything with those parameters on the server, you had to extend whatever primitive HTTP server you were running, write some custom code and invent your own “standard”. There were no server side frameworks or standards.
- losvedir 5mo agoTCP has been around a long time. Listen, read, send, you're good to go. It's just software so you can make it do anything. But you're asking about the relationship between popular primarily file serving servers like Apache and their relationship to high level code to create custom responses? Yeah, CGI was the first big standard there that I remember, though it was a bit before my time. But that's only one possible architecture. These days, most web apps have the web server built in, and so the custom code you're writing works with the full request directly. There may be a lightweight web server in front (or multiple), like nginx, to manage connections, but they will largely just proxy the whole thing through.
- cobbzilla 5mo agoI was responding to: > Query strings existed before CGI did… There's nothing wrong about having things decided by the server Sure, but there is also no standard for how to format/parse the query string. And also no server plugin frameworks. So you are inventing your own standard and extending some HTTP server for which you have source. Until CGI forces a standard, bad as it might be; it’s a common ground.