gitextract_a0ff0mga/ ├── .gitattributes ├── .github/ │ └── workflows/ │ └── ci.yaml ├── .gitignore ├── CONTRIBUTING.asciidoc ├── LICENSE ├── Makefile ├── README.asciidoc ├── doc/ │ └── src/ │ ├── guide/ │ │ ├── book.asciidoc │ │ ├── constraints.asciidoc │ │ ├── cookies.asciidoc │ │ ├── cowboy.sty │ │ ├── erlang_web.asciidoc │ │ ├── flow_diagram.asciidoc │ │ ├── getting_started.asciidoc │ │ ├── handlers.asciidoc │ │ ├── introduction.asciidoc │ │ ├── listeners.asciidoc │ │ ├── loop_handlers.asciidoc │ │ ├── middlewares.asciidoc │ │ ├── migrating_from_1.0.asciidoc │ │ ├── migrating_from_2.0.asciidoc │ │ ├── migrating_from_2.1.asciidoc │ │ ├── migrating_from_2.10.asciidoc │ │ ├── migrating_from_2.11.asciidoc │ │ ├── migrating_from_2.12.asciidoc │ │ ├── migrating_from_2.13.asciidoc │ │ ├── migrating_from_2.14.asciidoc │ │ ├── migrating_from_2.2.asciidoc │ │ ├── migrating_from_2.3.asciidoc │ │ ├── migrating_from_2.4.asciidoc │ │ ├── migrating_from_2.5.asciidoc │ │ ├── migrating_from_2.6.asciidoc │ │ ├── migrating_from_2.7.asciidoc │ │ ├── migrating_from_2.8.asciidoc │ │ ├── migrating_from_2.9.asciidoc │ │ ├── modern_web.asciidoc │ │ ├── multipart.asciidoc │ │ ├── performance.asciidoc │ │ ├── req.asciidoc │ │ ├── req_body.asciidoc │ │ ├── resource_design.asciidoc │ │ ├── resp.asciidoc │ │ ├── rest_flowcharts.asciidoc │ │ ├── rest_handlers.asciidoc │ │ ├── rest_principles.asciidoc │ │ ├── routing.asciidoc │ │ ├── specs.asciidoc │ │ ├── static_files.asciidoc │ │ ├── streams.asciidoc │ │ ├── ws_handlers.asciidoc │ │ └── ws_protocol.asciidoc │ ├── manual/ │ │ ├── cowboy.asciidoc │ │ ├── cowboy.get_env.asciidoc │ │ ├── cowboy.set_env.asciidoc │ │ ├── cowboy.start_clear.asciidoc │ │ ├── cowboy.start_tls.asciidoc │ │ ├── cowboy.stop_listener.asciidoc │ │ ├── cowboy_app.asciidoc │ │ ├── cowboy_compress_h.asciidoc │ │ ├── cowboy_constraints.asciidoc │ │ ├── cowboy_constraints.int.asciidoc │ │ ├── cowboy_constraints.nonempty.asciidoc │ │ ├── cowboy_decompress_h.asciidoc │ │ ├── cowboy_handler.asciidoc │ │ ├── cowboy_handler.terminate.asciidoc │ │ ├── cowboy_http.asciidoc │ │ ├── cowboy_http2.asciidoc │ │ ├── cowboy_loop.asciidoc │ │ ├── cowboy_metrics_h.asciidoc │ │ ├── cowboy_middleware.asciidoc │ │ ├── cowboy_req.asciidoc │ │ ├── cowboy_req.binding.asciidoc │ │ ├── cowboy_req.bindings.asciidoc │ │ ├── cowboy_req.body_length.asciidoc │ │ ├── cowboy_req.cast.asciidoc │ │ ├── cowboy_req.cert.asciidoc │ │ ├── cowboy_req.delete_resp_header.asciidoc │ │ ├── cowboy_req.filter_cookies.asciidoc │ │ ├── cowboy_req.has_body.asciidoc │ │ ├── cowboy_req.has_resp_body.asciidoc │ │ ├── cowboy_req.has_resp_header.asciidoc │ │ ├── cowboy_req.header.asciidoc │ │ ├── cowboy_req.headers.asciidoc │ │ ├── cowboy_req.host.asciidoc │ │ ├── cowboy_req.host_info.asciidoc │ │ ├── cowboy_req.inform.asciidoc │ │ ├── cowboy_req.match_cookies.asciidoc │ │ ├── cowboy_req.match_qs.asciidoc │ │ ├── cowboy_req.method.asciidoc │ │ ├── cowboy_req.parse_cookies.asciidoc │ │ ├── cowboy_req.parse_header.asciidoc │ │ ├── cowboy_req.parse_qs.asciidoc │ │ ├── cowboy_req.path.asciidoc │ │ ├── cowboy_req.path_info.asciidoc │ │ ├── cowboy_req.peer.asciidoc │ │ ├── cowboy_req.port.asciidoc │ │ ├── cowboy_req.push.asciidoc │ │ ├── cowboy_req.qs.asciidoc │ │ ├── cowboy_req.read_and_match_urlencoded_body.asciidoc │ │ ├── cowboy_req.read_body.asciidoc │ │ ├── cowboy_req.read_part.asciidoc │ │ ├── cowboy_req.read_part_body.asciidoc │ │ ├── cowboy_req.read_urlencoded_body.asciidoc │ │ ├── cowboy_req.reply.asciidoc │ │ ├── cowboy_req.resp_header.asciidoc │ │ ├── cowboy_req.resp_headers.asciidoc │ │ ├── cowboy_req.scheme.asciidoc │ │ ├── cowboy_req.set_resp_body.asciidoc │ │ ├── cowboy_req.set_resp_cookie.asciidoc │ │ ├── cowboy_req.set_resp_header.asciidoc │ │ ├── cowboy_req.set_resp_headers.asciidoc │ │ ├── cowboy_req.sock.asciidoc │ │ ├── cowboy_req.stream_body.asciidoc │ │ ├── cowboy_req.stream_events.asciidoc │ │ ├── cowboy_req.stream_reply.asciidoc │ │ ├── cowboy_req.stream_trailers.asciidoc │ │ ├── cowboy_req.uri.asciidoc │ │ ├── cowboy_req.version.asciidoc │ │ ├── cowboy_rest.asciidoc │ │ ├── cowboy_router.asciidoc │ │ ├── cowboy_router.compile.asciidoc │ │ ├── cowboy_static.asciidoc │ │ ├── cowboy_stream.asciidoc │ │ ├── cowboy_stream.data.asciidoc │ │ ├── cowboy_stream.early_error.asciidoc │ │ ├── cowboy_stream.info.asciidoc │ │ ├── cowboy_stream.init.asciidoc │ │ ├── cowboy_stream.terminate.asciidoc │ │ ├── cowboy_stream_h.asciidoc │ │ ├── cowboy_tracer_h.asciidoc │ │ ├── cowboy_websocket.asciidoc │ │ └── http_status_codes.asciidoc │ └── specs/ │ ├── index.ezdoc │ ├── rfc6585.ezdoc │ └── rfc7230_server.ezdoc ├── ebin/ │ └── cowboy.app ├── erlang.mk ├── examples/ │ ├── README.asciidoc │ ├── chunked_hello_world/ │ │ ├── Makefile │ │ ├── README.asciidoc │ │ ├── relx.config │ │ └── src/ │ │ ├── chunked_hello_world_app.erl │ │ ├── chunked_hello_world_sup.erl │ │ └── toppage_h.erl │ ├── compress_response/ │ │ ├── Makefile │ │ ├── README.asciidoc │ │ ├── relx.config │ │ └── src/ │ │ ├── compress_response_app.erl │ │ ├── compress_response_sup.erl │ │ └── toppage_h.erl │ ├── cookie/ │ │ ├── Makefile │ │ ├── README.asciidoc │ │ ├── relx.config │ │ ├── src/ │ │ │ ├── cookie_app.erl │ │ │ ├── cookie_sup.erl │ │ │ └── toppage_h.erl │ │ └── templates/ │ │ └── toppage.dtl │ ├── echo_get/ │ │ ├── Makefile │ │ ├── README.asciidoc │ │ ├── relx.config │ │ └── src/ │ │ ├── echo_get_app.erl │ │ ├── echo_get_sup.erl │ │ └── toppage_h.erl │ ├── echo_post/ │ │ ├── Makefile │ │ ├── README.asciidoc │ │ ├── relx.config │ │ └── src/ │ │ ├── echo_post_app.erl │ │ ├── echo_post_sup.erl │ │ └── toppage_h.erl │ ├── eventsource/ │ │ ├── Makefile │ │ ├── README.asciidoc │ │ ├── priv/ │ │ │ └── index.html │ │ ├── relx.config │ │ └── src/ │ │ ├── eventsource_app.erl │ │ ├── eventsource_h.erl │ │ └── eventsource_sup.erl │ ├── file_server/ │ │ ├── Makefile │ │ ├── README.asciidoc │ │ ├── priv/ │ │ │ ├── small.ogv │ │ │ ├── test.txt │ │ │ ├── video.html │ │ │ └── 中文/ │ │ │ └── 中文.html │ │ ├── relx.config │ │ └── src/ │ │ ├── directory_h.erl │ │ ├── directory_lister.erl │ │ ├── file_server_app.erl │ │ └── file_server_sup.erl │ ├── hello_world/ │ │ ├── Makefile │ │ ├── README.asciidoc │ │ ├── relx.config │ │ └── src/ │ │ ├── hello_world_app.erl │ │ ├── hello_world_sup.erl │ │ └── toppage_h.erl │ ├── markdown_middleware/ │ │ ├── Makefile │ │ ├── README.asciidoc │ │ ├── priv/ │ │ │ ├── small.ogv │ │ │ └── video.md │ │ ├── relx.config │ │ └── src/ │ │ ├── markdown_converter.erl │ │ ├── markdown_middleware_app.erl │ │ └── markdown_middleware_sup.erl │ ├── rest_basic_auth/ │ │ ├── Makefile │ │ ├── README.asciidoc │ │ ├── relx.config │ │ └── src/ │ │ ├── rest_basic_auth_app.erl │ │ ├── rest_basic_auth_sup.erl │ │ └── toppage_h.erl │ ├── rest_hello_world/ │ │ ├── Makefile │ │ ├── README.asciidoc │ │ ├── relx.config │ │ └── src/ │ │ ├── rest_hello_world_app.erl │ │ ├── rest_hello_world_sup.erl │ │ └── toppage_h.erl │ ├── rest_pastebin/ │ │ ├── Makefile │ │ ├── README.asciidoc │ │ ├── priv/ │ │ │ ├── index.html │ │ │ └── index.txt │ │ ├── relx.config │ │ └── src/ │ │ ├── rest_pastebin_app.erl │ │ ├── rest_pastebin_sup.erl │ │ └── toppage_h.erl │ ├── ssl_hello_world/ │ │ ├── Makefile │ │ ├── README.asciidoc │ │ ├── priv/ │ │ │ └── ssl/ │ │ │ ├── cert.pem │ │ │ └── key.pem │ │ ├── relx.config │ │ └── src/ │ │ ├── ssl_hello_world_app.erl │ │ ├── ssl_hello_world_sup.erl │ │ └── toppage_h.erl │ ├── upload/ │ │ ├── Makefile │ │ ├── README.asciidoc │ │ ├── priv/ │ │ │ └── index.html │ │ ├── relx.config │ │ └── src/ │ │ ├── upload_app.erl │ │ ├── upload_h.erl │ │ └── upload_sup.erl │ └── websocket/ │ ├── Makefile │ ├── README.asciidoc │ ├── priv/ │ │ └── index.html │ ├── relx.config │ └── src/ │ ├── websocket_app.erl │ ├── websocket_sup.erl │ └── ws_h.erl ├── plugins.mk ├── rebar.config ├── src/ │ ├── cowboy.erl │ ├── cowboy_app.erl │ ├── cowboy_bstr.erl │ ├── cowboy_children.erl │ ├── cowboy_clear.erl │ ├── cowboy_clock.erl │ ├── cowboy_compress_h.erl │ ├── cowboy_constraints.erl │ ├── cowboy_decompress_h.erl │ ├── cowboy_dynamic_buffer.hrl │ ├── cowboy_handler.erl │ ├── cowboy_http.erl │ ├── cowboy_http2.erl │ ├── cowboy_http3.erl │ ├── cowboy_loop.erl │ ├── cowboy_metrics_h.erl │ ├── cowboy_middleware.erl │ ├── cowboy_quicer.erl │ ├── cowboy_req.erl │ ├── cowboy_rest.erl │ ├── cowboy_router.erl │ ├── cowboy_static.erl │ ├── cowboy_stream.erl │ ├── cowboy_stream_h.erl │ ├── cowboy_sub_protocol.erl │ ├── cowboy_sup.erl │ ├── cowboy_tls.erl │ ├── cowboy_tracer_h.erl │ ├── cowboy_websocket.erl │ └── cowboy_webtransport.erl └── test/ ├── compress_SUITE.erl ├── cover.spec ├── cowboy_ct_hook.erl ├── cowboy_test.erl ├── decompress_SUITE.erl ├── draft_h3_webtransport_SUITE.erl ├── examples_SUITE.erl ├── h2spec_SUITE.erl ├── handlers/ │ ├── accept_callback_h.erl │ ├── accept_callback_missing_h.erl │ ├── asterisk_h.erl │ ├── charset_in_content_types_provided_h.erl │ ├── charset_in_content_types_provided_implicit_h.erl │ ├── charset_in_content_types_provided_implicit_no_callback_h.erl │ ├── charsets_provided_empty_h.erl │ ├── charsets_provided_h.erl │ ├── compress_h.erl │ ├── content_types_accepted_h.erl │ ├── content_types_provided_h.erl │ ├── crash_h.erl │ ├── create_resource_h.erl │ ├── custom_req_fields_h.erl │ ├── decompress_h.erl │ ├── default_h.erl │ ├── delay_hello_h.erl │ ├── delete_resource_h.erl │ ├── echo_h.erl │ ├── expires_h.erl │ ├── generate_etag_h.erl │ ├── hello_h.erl │ ├── if_range_h.erl │ ├── last_modified_h.erl │ ├── long_polling_h.erl │ ├── long_polling_sys_h.erl │ ├── loop_handler_abort_h.erl │ ├── loop_handler_body_h.erl │ ├── loop_handler_endless_h.erl │ ├── loop_handler_timeout_h.erl │ ├── loop_handler_timeout_hibernate_h.erl │ ├── loop_handler_timeout_info_h.erl │ ├── loop_handler_timeout_init_h.erl │ ├── multipart_h.erl │ ├── provide_callback_missing_h.erl │ ├── provide_range_callback_h.erl │ ├── range_satisfiable_h.erl │ ├── ranges_provided_auto_h.erl │ ├── ranges_provided_h.erl │ ├── rate_limited_h.erl │ ├── read_body_h.erl │ ├── resp_h.erl │ ├── resp_iolist_body_h.erl │ ├── rest_hello_h.erl │ ├── send_message_h.erl │ ├── set_options_h.erl │ ├── stop_handler_h.erl │ ├── stream_handler_h.erl │ ├── stream_hello_h.erl │ ├── streamed_result_h.erl │ ├── switch_handler_h.erl │ ├── switch_protocol_flush_h.erl │ ├── ws_active_commands_h.erl │ ├── ws_deflate_commands_h.erl │ ├── ws_deflate_opts_h.erl │ ├── ws_dont_validate_utf8_h.erl │ ├── ws_handle_commands_h.erl │ ├── ws_ignore.erl │ ├── ws_info_commands_h.erl │ ├── ws_init_commands_h.erl │ ├── ws_init_h.erl │ ├── ws_ping_h.erl │ ├── ws_set_options_commands_h.erl │ ├── ws_shutdown_reason_commands_h.erl │ ├── ws_terminate_h.erl │ └── wt_echo_h.erl ├── http2_SUITE.erl ├── http_SUITE.erl ├── http_perf_SUITE.erl ├── loop_handler_SUITE.erl ├── metrics_SUITE.erl ├── misc_SUITE.erl ├── plain_handler_SUITE.erl ├── proxy_header_SUITE.erl ├── req_SUITE.erl ├── rest_handler_SUITE.erl ├── rfc6585_SUITE.erl ├── rfc7230_SUITE.erl ├── rfc7231_SUITE.erl ├── rfc7538_SUITE.erl ├── rfc7540_SUITE.erl ├── rfc8297_SUITE.erl ├── rfc8441_SUITE.erl ├── rfc9114_SUITE.erl ├── rfc9114_SUITE_data/ │ ├── client.key │ ├── client.pem │ ├── server.key │ └── server.pem ├── rfc9204_SUITE.erl ├── rfc9220_SUITE.erl ├── security_SUITE.erl ├── static_handler_SUITE.erl ├── static_handler_SUITE_data/ │ └── static_files_app.ez ├── stream_handler_SUITE.erl ├── sys_SUITE.erl ├── tracer_SUITE.erl ├── ws_SUITE.erl ├── ws_SUITE_data/ │ ├── ws_echo.erl │ ├── ws_echo_timer.erl │ ├── ws_init_shutdown.erl │ ├── ws_max_frame_size.erl │ ├── ws_send_many.erl │ ├── ws_subprotocol.erl │ ├── ws_timeout_cancel.erl │ └── ws_timeout_hibernate.erl ├── ws_autobahn_SUITE.erl ├── ws_autobahn_SUITE_data/ │ └── client.json ├── ws_handler_SUITE.erl ├── ws_perf_SUITE.erl └── ws_perf_SUITE_data/ ├── ascii.txt ├── grok_segond.txt └── japanese.txt