Skip to content

liberda/HTTP.sh

Folders and files

NameName
Last commit message
Last commit date

Latest commit

e9f5ab5 · Apr 5, 2025
Mar 5, 2025
Apr 5, 2025
Nov 5, 2020
Apr 5, 2025
Sep 9, 2021
Sep 22, 2021
Mar 6, 2025
Nov 10, 2021
May 16, 2021
Mar 9, 2021
Apr 2, 2025
Dec 23, 2024
Apr 5, 2025
Nov 10, 2021
Jan 14, 2025
Mar 4, 2025

Repository files navigation

HTTP.sh

the coolest web framework (in Bash) to date.

We now have an IRC channel! Join #http.sh @ irc.libera.chat

Documentation

We have some guides and general documentation in the docs directory. Among them:

Dependencies

Absolutely necessary:

  • Bash (5.x, not interested in backwards compat)
  • either Ncat (not openbsd-nc, not netcat, not nc) or socat, or a combo of both
  • GNU grep/sed

Full list of dependencies: required, optional.

Known faults

  • if ncat fails to bind to [::], change the bind to 127.0.0.1 or 0 in config/master.sh
  • $post_multipart doesn't keep original names - could be fixed by parsing individual headers from the multipart request instead of skipping them all
  • websocket impl isn't properly finished
  • fails with an empty response, instead of throwing 400/500

Variables that we think are cool!

(this data may be slightly outdated. Full docs TODO.)

  • get_data - holds data from GET parameters
    • /?test=asdf -> ${get_data[test]} == "asdf"
  • params - holds parsed data from URL router
    • /profile/test (assuming profile/:name) -> ${params[name]} == "test"
  • post_data - same as above, but for urlencoded POST params
    • test=asdf -> ${post_data[test]} == "asdf"
  • post_multipart - contains paths to uploaded files from multipart/form-data POST requests. WARNING: it doesn't hold field names yet, it relies on upload order for identification
    • first file (in upload order) -> cat ${post_multipart[0]}
    • second file -> cat ${post_multipart[1]}
  • r - misc request data
    • authorization
    • content_boundary
    • content_boundary
    • content_length
    • content_type
    • headers
    • host
    • host_portless
    • ip
    • post
    • proto
    • status
    • uri
    • url
    • user_agent
    • view
    • websocket_key
  • cfg - server and app config - see config/master.sh for more details

Fun stuff

  • To prevent running malicious scripts, by default only scripts with extension .shs can be run by the server, but this can be changed in the config.
  • ${cfg[index]} ignores the above - see config/master.sh
  • Trans rights!
  • SHS stands for Shell Server.