/usr/lib/swipl/library/ext/http/http/http_dispatch.pl
All Application Manual Name SummaryHelp

  • http
    • http
      • http_unix_daemon.pl
      • thread_httpd.pl
      • http_wrapper.pl -- Server processing of an HTTP request
      • http_header.pl
      • http_stream.pl
      • http_exception.pl
      • http_path.pl
      • http_dispatch.pl -- Dispatch requests in the HTTP server
        • http_handler/3
        • http_delete_handler/1
        • http_dispatch/1
        • http_request_expansion/2
        • http_current_handler/2
        • http_current_handler/3
        • http_location_by_id/2
        • http_link_to_id/3
        • http_reload_with_parameters/3
        • http_reply_file/3
        • http_safe_file/2
        • http_redirect/3
        • http_404/2
        • http_switch_protocol/2
      • http_host.pl
      • http_json.pl -- HTTP JSON Plugin module
      • http_client.pl
      • json.pl
      • http_open.pl
      • http_parameters.pl
      • http_multipart_plugin.pl
      • http_hook.pl
      • html_write.pl -- Write HTML text
      • html_quasiquotations.pl -- HTML quasi quotations
      • html_decl.pl
      • js_write.pl
      • js_grammar.pl
      • http_server_files.pl -- Serve files needed by modules from the server
      • hub.pl -- Manage a hub for websockets
      • websocket.pl -- WebSocket support
      • http_session.pl -- HTTP Session management
      • http_cors.pl
      • mimetype.pl -- Determine mime-type for a file
      • html_head.pl
      • term_html.pl
      • http_dyn_workers.pl
      • http_server.pl -- HTTP server library
      • http_server_health.pl
      • http_log.pl -- HTTP Logging module
      • http_redis_plugin.pl
      • json_convert.pl -- Convert between JSON terms and Prolog application terms
 http_dispatch(Request) is det
Dispatch a Request using http_handler/3 registrations. It performs the following steps:
  1. Find a matching handler based on the path member of Request. If multiple handlers match due to the prefix option or variables in path segments (see http_handler/3), the longest specification is used. If multiple specifications of equal length match the one with the highest priority is used.
  2. Check that the handler matches the method member of the Request or throw permission_error(http_method, Method, Location)
  3. Expand the request using expansion hooks registered by http_request_expansion/3. This may add fields to the request, such the authenticated user, parsed parameters, etc. The hooks may also throw exceptions, notably using http_redirect/3 or by throwing http_reply(Term, ExtraHeader, Context) exceptions.
  4. Extract possible fields from the Request using e.g. method(Method) as one of the options.
  5. Call the registered closure, optionally spawning the request to a new thread or enforcing a time limit.