<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <link rel="stylesheet" href="style.css" type="text/css"> <meta content="text/html; charset=iso-8859-1" http-equiv="Content-Type"> <link rel="Start" href="index.html"> <link rel="previous" href="Netcgi.cgi_environment-c.html"> <link rel="next" href="Netcgi.cgi_activation-c.html"> <link rel="Up" href="Netcgi.html"> <link title="Index of types" rel=Appendix href="index_types.html"> <link title="Index of exceptions" rel=Appendix href="index_exceptions.html"> <link title="Index of values" rel=Appendix href="index_values.html"> <link title="Index of class attributes" rel=Appendix href="index_attributes.html"> <link title="Index of class methods" rel=Appendix href="index_methods.html"> <link title="Index of classes" rel=Appendix href="index_classes.html"> <link title="Index of class types" rel=Appendix href="index_class_types.html"> <link title="Index of modules" rel=Appendix href="index_modules.html"> <link title="Index of module types" rel=Appendix href="index_module_types.html"> <link title="Uq_gtk" rel="Chapter" href="Uq_gtk.html"> <link title="Equeue" rel="Chapter" href="Equeue.html"> <link title="Unixqueue" rel="Chapter" href="Unixqueue.html"> <link title="Unixqueue_pollset" rel="Chapter" href="Unixqueue_pollset.html"> <link title="Unixqueue_select" rel="Chapter" href="Unixqueue_select.html"> <link title="Uq_resolver" rel="Chapter" href="Uq_resolver.html"> <link title="Uq_engines" rel="Chapter" href="Uq_engines.html"> <link title="Uq_socks5" rel="Chapter" href="Uq_socks5.html"> <link title="Uq_io" rel="Chapter" href="Uq_io.html"> <link title="Uq_lwt" rel="Chapter" href="Uq_lwt.html"> <link title="Uq_libevent" rel="Chapter" href="Uq_libevent.html"> <link title="Uq_mt" rel="Chapter" href="Uq_mt.html"> <link title="Equeue_intro" rel="Chapter" href="Equeue_intro.html"> <link title="Equeue_howto" rel="Chapter" href="Equeue_howto.html"> <link title="Uq_ssl" rel="Chapter" href="Uq_ssl.html"> <link title="Https_client" rel="Chapter" href="Https_client.html"> <link title="Uq_tcl" rel="Chapter" href="Uq_tcl.html"> <link title="Netcamlbox" rel="Chapter" href="Netcamlbox.html"> <link title="Netcgi_apache" rel="Chapter" href="Netcgi_apache.html"> <link title="Netcgi_modtpl" rel="Chapter" href="Netcgi_modtpl.html"> <link title="Netcgi_common" rel="Chapter" href="Netcgi_common.html"> <link title="Netcgi" rel="Chapter" href="Netcgi.html"> <link title="Netcgi_ajp" rel="Chapter" href="Netcgi_ajp.html"> <link title="Netcgi_scgi" rel="Chapter" href="Netcgi_scgi.html"> <link title="Netcgi_cgi" rel="Chapter" href="Netcgi_cgi.html"> <link title="Netcgi_fcgi" rel="Chapter" href="Netcgi_fcgi.html"> <link title="Netcgi_dbi" rel="Chapter" href="Netcgi_dbi.html"> <link title="Netcgi1_compat" rel="Chapter" href="Netcgi1_compat.html"> <link title="Netcgi_test" rel="Chapter" href="Netcgi_test.html"> <link title="Netcgi_porting" rel="Chapter" href="Netcgi_porting.html"> <link title="Netcgi_plex" rel="Chapter" href="Netcgi_plex.html"> <link title="Http_client_conncache" rel="Chapter" href="Http_client_conncache.html"> <link title="Http_client" rel="Chapter" href="Http_client.html"> <link title="Telnet_client" rel="Chapter" href="Telnet_client.html"> <link title="Ftp_data_endpoint" rel="Chapter" href="Ftp_data_endpoint.html"> <link title="Ftp_client" rel="Chapter" href="Ftp_client.html"> <link title="Http_fs" rel="Chapter" href="Http_fs.html"> <link title="Ftp_fs" rel="Chapter" href="Ftp_fs.html"> <link title="Netclient_tut" rel="Chapter" href="Netclient_tut.html"> <link title="Netgssapi" rel="Chapter" href="Netgssapi.html"> <link title="Nethttpd_types" rel="Chapter" href="Nethttpd_types.html"> <link title="Nethttpd_kernel" rel="Chapter" href="Nethttpd_kernel.html"> <link title="Nethttpd_reactor" rel="Chapter" href="Nethttpd_reactor.html"> <link title="Nethttpd_engine" rel="Chapter" href="Nethttpd_engine.html"> <link title="Nethttpd_services" rel="Chapter" href="Nethttpd_services.html"> <link title="Nethttpd_plex" rel="Chapter" href="Nethttpd_plex.html"> <link title="Nethttpd_util" rel="Chapter" href="Nethttpd_util.html"> <link title="Nethttpd_intro" rel="Chapter" href="Nethttpd_intro.html"> <link title="Netmech_scram" rel="Chapter" href="Netmech_scram.html"> <link title="Netmech_scram_gssapi" rel="Chapter" href="Netmech_scram_gssapi.html"> <link title="Netmcore" rel="Chapter" href="Netmcore.html"> <link title="Netmcore_camlbox" rel="Chapter" href="Netmcore_camlbox.html"> <link title="Netmcore_mempool" rel="Chapter" href="Netmcore_mempool.html"> <link title="Netmcore_heap" rel="Chapter" href="Netmcore_heap.html"> <link title="Netmcore_ref" rel="Chapter" href="Netmcore_ref.html"> <link title="Netmcore_array" rel="Chapter" href="Netmcore_array.html"> <link title="Netmcore_sem" rel="Chapter" href="Netmcore_sem.html"> <link title="Netmcore_mutex" rel="Chapter" href="Netmcore_mutex.html"> <link title="Netmcore_condition" rel="Chapter" href="Netmcore_condition.html"> <link title="Netmcore_queue" rel="Chapter" href="Netmcore_queue.html"> <link title="Netmcore_buffer" rel="Chapter" href="Netmcore_buffer.html"> <link title="Netmcore_matrix" rel="Chapter" href="Netmcore_matrix.html"> <link title="Netmcore_hashtbl" rel="Chapter" href="Netmcore_hashtbl.html"> <link title="Netmcore_process" rel="Chapter" href="Netmcore_process.html"> <link title="Netmcore_tut" rel="Chapter" href="Netmcore_tut.html"> <link title="Netmcore_basics" rel="Chapter" href="Netmcore_basics.html"> <link title="Netplex_types" rel="Chapter" href="Netplex_types.html"> <link title="Netplex_mp" rel="Chapter" href="Netplex_mp.html"> <link title="Netplex_mt" rel="Chapter" href="Netplex_mt.html"> <link title="Netplex_log" rel="Chapter" href="Netplex_log.html"> <link title="Netplex_controller" rel="Chapter" href="Netplex_controller.html"> <link title="Netplex_container" rel="Chapter" href="Netplex_container.html"> <link title="Netplex_sockserv" rel="Chapter" href="Netplex_sockserv.html"> <link title="Netplex_workload" rel="Chapter" href="Netplex_workload.html"> <link title="Netplex_main" rel="Chapter" href="Netplex_main.html"> <link title="Netplex_config" rel="Chapter" href="Netplex_config.html"> <link title="Netplex_kit" rel="Chapter" href="Netplex_kit.html"> <link title="Rpc_netplex" rel="Chapter" href="Rpc_netplex.html"> <link title="Netplex_cenv" rel="Chapter" href="Netplex_cenv.html"> <link title="Netplex_semaphore" rel="Chapter" href="Netplex_semaphore.html"> <link title="Netplex_sharedvar" rel="Chapter" href="Netplex_sharedvar.html"> <link title="Netplex_mutex" rel="Chapter" href="Netplex_mutex.html"> <link title="Netplex_encap" rel="Chapter" href="Netplex_encap.html"> <link title="Netplex_mbox" rel="Chapter" href="Netplex_mbox.html"> <link title="Netplex_intro" rel="Chapter" href="Netplex_intro.html"> <link title="Netplex_advanced" rel="Chapter" href="Netplex_advanced.html"> <link title="Netplex_admin" rel="Chapter" href="Netplex_admin.html"> <link title="Netshm" rel="Chapter" href="Netshm.html"> <link title="Netshm_data" rel="Chapter" href="Netshm_data.html"> <link title="Netshm_hashtbl" rel="Chapter" href="Netshm_hashtbl.html"> <link title="Netshm_array" rel="Chapter" href="Netshm_array.html"> <link title="Netshm_intro" rel="Chapter" href="Netshm_intro.html"> <link title="Netconversion" rel="Chapter" href="Netconversion.html"> <link title="Netchannels" rel="Chapter" href="Netchannels.html"> <link title="Netstream" rel="Chapter" href="Netstream.html"> <link title="Mimestring" rel="Chapter" href="Mimestring.html"> <link title="Netmime" rel="Chapter" href="Netmime.html"> <link title="Netsendmail" rel="Chapter" href="Netsendmail.html"> <link title="Neturl" rel="Chapter" href="Neturl.html"> <link title="Netaddress" rel="Chapter" href="Netaddress.html"> <link title="Netbuffer" rel="Chapter" href="Netbuffer.html"> <link title="Netdate" rel="Chapter" href="Netdate.html"> <link title="Netencoding" rel="Chapter" href="Netencoding.html"> <link title="Netulex" rel="Chapter" href="Netulex.html"> <link title="Netaccel" rel="Chapter" href="Netaccel.html"> <link title="Netaccel_link" rel="Chapter" href="Netaccel_link.html"> <link title="Nethtml" rel="Chapter" href="Nethtml.html"> <link title="Netstring_str" rel="Chapter" href="Netstring_str.html"> <link title="Netmappings" rel="Chapter" href="Netmappings.html"> <link title="Netaux" rel="Chapter" href="Netaux.html"> <link title="Nethttp" rel="Chapter" href="Nethttp.html"> <link title="Netpagebuffer" rel="Chapter" href="Netpagebuffer.html"> <link title="Netfs" rel="Chapter" href="Netfs.html"> <link title="Netglob" rel="Chapter" href="Netglob.html"> <link title="Netauth" rel="Chapter" href="Netauth.html"> <link title="Netsockaddr" rel="Chapter" href="Netsockaddr.html"> <link title="Netnumber" rel="Chapter" href="Netnumber.html"> <link title="Rtypes" rel="Chapter" href="Rtypes.html"> <link title="Xdr_mstring" rel="Chapter" href="Xdr_mstring.html"> <link title="Xdr" rel="Chapter" href="Xdr.html"> <link title="Netcompression" rel="Chapter" href="Netcompression.html"> <link title="Netunichar" rel="Chapter" href="Netunichar.html"> <link title="Netchannels_tut" rel="Chapter" href="Netchannels_tut.html"> <link title="Netmime_tut" rel="Chapter" href="Netmime_tut.html"> <link title="Netsendmail_tut" rel="Chapter" href="Netsendmail_tut.html"> <link title="Netulex_tut" rel="Chapter" href="Netulex_tut.html"> <link title="Neturl_tut" rel="Chapter" href="Neturl_tut.html"> <link title="Netstring_pcre" rel="Chapter" href="Netstring_pcre.html"> <link title="Netsys" rel="Chapter" href="Netsys.html"> <link title="Netsys_posix" rel="Chapter" href="Netsys_posix.html"> <link title="Netsys_pollset" rel="Chapter" href="Netsys_pollset.html"> <link title="Netlog" rel="Chapter" href="Netlog.html"> <link title="Netexn" rel="Chapter" href="Netexn.html"> <link title="Netsys_win32" rel="Chapter" href="Netsys_win32.html"> <link title="Netsys_pollset_posix" rel="Chapter" href="Netsys_pollset_posix.html"> <link title="Netsys_pollset_win32" rel="Chapter" href="Netsys_pollset_win32.html"> <link title="Netsys_pollset_generic" rel="Chapter" href="Netsys_pollset_generic.html"> <link title="Netsys_signal" rel="Chapter" href="Netsys_signal.html"> <link title="Netsys_oothr" rel="Chapter" href="Netsys_oothr.html"> <link title="Netsys_xdr" rel="Chapter" href="Netsys_xdr.html"> <link title="Netsys_rng" rel="Chapter" href="Netsys_rng.html"> <link title="Netsys_types" rel="Chapter" href="Netsys_types.html"> <link title="Netsys_mem" rel="Chapter" href="Netsys_mem.html"> <link title="Netsys_tmp" rel="Chapter" href="Netsys_tmp.html"> <link title="Netsys_sem" rel="Chapter" href="Netsys_sem.html"> <link title="Netsys_pmanage" rel="Chapter" href="Netsys_pmanage.html"> <link title="Netgzip" rel="Chapter" href="Netgzip.html"> <link title="Netpop" rel="Chapter" href="Netpop.html"> <link title="Rpc_auth_dh" rel="Chapter" href="Rpc_auth_dh.html"> <link title="Rpc_key_service" rel="Chapter" href="Rpc_key_service.html"> <link title="Rpc_time" rel="Chapter" href="Rpc_time.html"> <link title="Rpc_auth_local" rel="Chapter" href="Rpc_auth_local.html"> <link title="Rpc" rel="Chapter" href="Rpc.html"> <link title="Rpc_program" rel="Chapter" href="Rpc_program.html"> <link title="Rpc_util" rel="Chapter" href="Rpc_util.html"> <link title="Rpc_portmapper_aux" rel="Chapter" href="Rpc_portmapper_aux.html"> <link title="Rpc_packer" rel="Chapter" href="Rpc_packer.html"> <link title="Rpc_transport" rel="Chapter" href="Rpc_transport.html"> <link title="Rpc_client" rel="Chapter" href="Rpc_client.html"> <link title="Rpc_simple_client" rel="Chapter" href="Rpc_simple_client.html"> <link title="Rpc_portmapper_clnt" rel="Chapter" href="Rpc_portmapper_clnt.html"> <link title="Rpc_portmapper" rel="Chapter" href="Rpc_portmapper.html"> <link title="Rpc_server" rel="Chapter" href="Rpc_server.html"> <link title="Rpc_auth_sys" rel="Chapter" href="Rpc_auth_sys.html"> <link title="Rpc_auth_gssapi" rel="Chapter" href="Rpc_auth_gssapi.html"> <link title="Rpc_proxy" rel="Chapter" href="Rpc_proxy.html"> <link title="Rpc_intro" rel="Chapter" href="Rpc_intro.html"> <link title="Rpc_mapping_ref" rel="Chapter" href="Rpc_mapping_ref.html"> <link title="Rpc_intro_gss" rel="Chapter" href="Rpc_intro_gss.html"> <link title="Rpc_ssl" rel="Chapter" href="Rpc_ssl.html"> <link title="Rpc_xti_client" rel="Chapter" href="Rpc_xti_client.html"> <link title="Shell_sys" rel="Chapter" href="Shell_sys.html"> <link title="Shell" rel="Chapter" href="Shell.html"> <link title="Shell_uq" rel="Chapter" href="Shell_uq.html"> <link title="Shell_fs" rel="Chapter" href="Shell_fs.html"> <link title="Shell_intro" rel="Chapter" href="Shell_intro.html"> <link title="Netsmtp" rel="Chapter" href="Netsmtp.html"> <link title="Intro" rel="Chapter" href="Intro.html"> <link title="Platform" rel="Chapter" href="Platform.html"> <link title="Foreword" rel="Chapter" href="Foreword.html"> <link title="Ipv6" rel="Chapter" href="Ipv6.html"> <link title="Regexp" rel="Chapter" href="Regexp.html"><link title="Arguments -- data sent to the script" rel="Section" href="#3_Argumentsdatasenttothescript"> <link title="Self-referencing URL" rel="Section" href="#3_SelfreferencingURL"> <link title="Outputting" rel="Section" href="#3_Outputting"> <title>Ocamlnet 3 Reference Manual : Netcgi.cgi</title> </head> <body> <div class="navbar"><a class="pre" href="Netcgi.cgi_environment-c.html" title="Netcgi.cgi_environment">Previous</a> <a class="up" href="Netcgi.html" title="Netcgi">Up</a> <a class="post" href="Netcgi.cgi_activation-c.html" title="Netcgi.cgi_activation">Next</a> </div> <h1>Class type <a href="type_Netcgi.cgi.html">Netcgi.cgi</a></h1> <pre><span id="TYPEcgi"><span class="keyword">class type</span> cgi</span> = <code class="code">object</code> <a href="Netcgi.cgi-c.html">..</a> <code class="code">end</code></pre><div class="info"> Object symbolizing a CGI-like request/response cycle. <p> This is the minimal set of services a connector must provide. Additional methods may be defined for specific connectors.<br> </div> <hr width="100%"> <h3 id="3_Argumentsdatasenttothescript">Arguments -- data sent to the script</h3><pre><span id="METHODargument"><span class="keyword">method</span> argument</span> : <code class="type">string -> <a href="Netcgi.cgi_argument-c.html">cgi_argument</a></code></pre><div class="info"> <code class="code">#argument name</code> returns the value of the argument named <code class="code">name</code>. If the argument appears several times, only one of its instances is used.<br> <b>Raises</b> <code>Not_found</code> if no such argument exists.<br> </div> <pre><span id="METHODargument_value"><span class="keyword">method</span> argument_value</span> : <code class="type">?default:string -> string -> string</code></pre><div class="info"> <code class="code">#argument_value</code> returns the value of the argument as a string. If the argument does not exist, the <code class="code">default</code> is returned.<br> </div> <div class="param_info"><code class="code">default</code> : defaults to <code class="code">""</code>.</div> <pre><span id="METHODargument_exists"><span class="keyword">method</span> argument_exists</span> : <code class="type">string -> bool</code></pre><div class="info"> <code class="code">#argument_exists</code> returns <code class="code">false</code> if the named parameter is missing and <code class="code">true</code> otherwise.<br> </div> <pre><span id="METHODmultiple_argument"><span class="keyword">method</span> multiple_argument</span> : <code class="type">string -> <a href="Netcgi.cgi_argument-c.html">cgi_argument</a> list</code></pre><div class="info"> <code class="code">#multiple_argument name</code> returns all the values of the argument named <code class="code">name</code>.<br> </div> <pre><span id="METHODarguments"><span class="keyword">method</span> arguments</span> : <code class="type"><a href="Netcgi.cgi_argument-c.html">cgi_argument</a> list</code></pre><div class="info"> The complete list of arguments.<br> </div> <pre><span id="METHODenvironment"><span class="keyword">method</span> environment</span> : <code class="type"><a href="Netcgi.cgi_environment-c.html">cgi_environment</a></code></pre><div class="info"> The environment object. This object is the "outer layer" of the activation object that connects it with real I/O channels.<br> </div> <pre><span id="METHODrequest_method"><span class="keyword">method</span> request_method</span> : <code class="type">[ `DELETE | `GET | `HEAD | `POST | `PUT of <a href="Netcgi.cgi_argument-c.html">cgi_argument</a> ]</code></pre><div class="info"> The HTTP method used to make the request.<br> </div> <pre><span id="METHODfinalize"><span class="keyword">method</span> finalize</span> : <code class="type">unit -> unit</code></pre><div class="info"> This method calls <code class="code">#finalize</code> for every CGI argument (including the possible one of PUT) to ensure that all files are deleted. It also executes all functions registered with <code class="code">#at_exit</code>. It does not close the in/out channels, however. This method is not registered in the garbage collector, and it is a bad idea to do so. However, all connectors offered in Netcgi automatically call <code class="code">#finalize</code> at the end of the request cycle (even when its terminated by an uncaught exception when <code class="code">#config.default_exn_handler</code> is true) so you do not have to worry much about calling it yourself.<br> </div> <h3 id="3_SelfreferencingURL">Self-referencing URL</h3><pre><span id="METHODurl"><span class="keyword">method</span> url</span> : <code class="type">?protocol:<a href="Nethttp.html#TYPEprotocol">Nethttp.protocol</a> -><br> ?with_authority:<a href="Netcgi.html#TYPEother_url_spec">other_url_spec</a> -><br> ?with_script_name:<a href="Netcgi.html#TYPEother_url_spec">other_url_spec</a> -><br> ?with_path_info:<a href="Netcgi.html#TYPEother_url_spec">other_url_spec</a> -><br> ?with_query_string:<a href="Netcgi.html#TYPEquery_string_spec">query_string_spec</a> -> unit -> string</code></pre><div class="info"> Returns the URL of the current CGI-like script. (Note that it may differ from the actual URL that requested the script if, for example, rewriting rules were specified in the web server configuration.)<br> </div> <div class="param_info"><code class="code">protocol</code> : The URL scheme. By default, the URL scheme is used that is described in the environment</div> <div class="param_info"><code class="code">with_authority</code> : Whether to include authority part (e.g. http or https) of the URL, and if yes, from which source. Default: <code class="code">`Env</code>.</div> <div class="param_info"><code class="code">with_script_name</code> : Whether to include the part of the URL path identifying the CGI script, and if yes, from which source. Default: <code class="code">`Env</code>.</div> <div class="param_info"><code class="code">with_path_info</code> : Whether to include the rest of the URL path exceeding the script name, and if yes, from which source. Default: <code class="code">`Env</code>.</div> <div class="param_info"><code class="code">with_query_string</code> : Whether to include a query string, and if yes, which one. Only arguments with <code class="code">#store</code> being <code class="code">`Memory</code> will be added. Default: <code class="code">`None</code>, i.e. no query string.</div> <h3 id="3_Outputting">Outputting</h3><pre><span id="METHODset_header"><span class="keyword">method</span> set_header</span> : <code class="type">?status:<a href="Nethttp.html#TYPEhttp_status">Nethttp.http_status</a> -><br> ?content_type:string -><br> ?content_length:int -><br> ?set_cookie:<a href="Nethttp.html#TYPEcookie">Nethttp.cookie</a> list -><br> ?set_cookies:<a href="Netcgi.Cookie.html#TYPEt">Cookie.t</a> list -><br> ?cache:<a href="Netcgi.html#TYPEcache_control">cache_control</a> -><br> ?filename:string -><br> ?language:string -><br> ?script_type:string -><br> ?style_type:string -> ?fields:(string * string list) list -> unit -> unit</code></pre><div class="info"> Sets the header (removing any previous one). When the output channel supports transactions, it is possible to set the header (possibly several times) until the <code class="code">#out_channel</code> is commited for the first time or <code class="code">#env#send_output_header()</code> is called. When there is no support for transactions, the header must be set before the first byte of output is written. <p> If <code class="code">#set_header</code> is called a second time, it will overwrite <i>all</i> the header fields.<br> </div> <div class="param_info"><code class="code">status</code> : Sets the HTTP status of the reply according to <a href="http://www.w3.org/Protocols/rfc2616">RFC 2616</a>. Defaults to "no status", but the server normally complements an <code class="code">`Ok</code> status in this case.</div> <div class="param_info"><code class="code">content_type</code> : Sets the content type. Defaults to <code class="code">"text/html"</code>.</div> <div class="param_info"><code class="code">content_length</code> : Sets the content length (in bytes). Default: No such field.</div> <div class="param_info"><code class="code">set_cookie</code> : Deprecated, use <code class="code">set_cookies</code>.</div> <div class="param_info"><code class="code">set_cookies</code> : Sets a number of cookies. Default: <code class="code">[]</code>. Remember that the browser may not support more than 20 cookies per web server. You can query the cookies using <code class="code">env#cookies</code> and <code class="code">env#cookie</code>. If you set cookies, you want to think about an appropriate <code class="code">cache</code> setting. You may also want to add a <a href="http://www.w3.org/P3P/">P3P</a> header (Platform for Privacy Preferences) -- otherwise your cookies may be discarded by some browsers.</div> <div class="param_info"><code class="code">cache</code> : Sets the cache behavior for replies to GET requests. The default is <code class="code">`Unspecified</code>. <b>It is strongly recommended to specify the caching behaviour!!!</b> You are on the safe side with <code class="code">`No_cache</code>, forcing every page to be regenerated. If your data do not change frequently, <code class="code">`Max_age n</code> tells the caches to store the data at most <code class="code">n</code> seconds.</div> <div class="param_info"><code class="code">filename</code> : Sets the filename associated with the page. This filename is taken for the "save as..." dialog. Default: <code class="code">""</code>, i.e. no filename. Note: It is bad practice if the filename contains problematic characters (backslash, double quote, space), or the names of directories. It is recommended that you set <code class="code">content_type</code> to "application/octet-stream" for this feture to work with most browsers and, if possible, to set <code class="code">content_length</code> because that usually improves the download dialog.)</div> <div class="param_info"><code class="code">script_type</code> : Sets the language of the script tag (for HTML replies). It is recommended to use this field if there are <code class="code">ONXXX</code> attributes containing scripts before the first <code class="code"><SCRIPT></code> element, because you cannot specify the script language for the <code class="code">ONXXX</code> attributes otherwise. <code class="code">script_type</code> must be a media type, e.g. "text/javascript". Default: no language is specified.</div> <div class="param_info"><code class="code">style_type</code> : Sets the language of the style tag (for HTML replies). It is recommended to use this field if there are <code class="code">STYLE</code> attributes containing scripts before the first <code class="code"><STYLE></code> element, because you cannot specify the style language for the <code class="code">STYLE</code> attributes otherwise. <code class="code">style_type</code> must be a media type, e.g. "text/css". Default: no language is specified.</div> <div class="param_info"><code class="code">fields</code> : Sets additional fields of the header. Default: <code class="code">[]</code>.</div> <pre><span id="METHODset_redirection_header"><span class="keyword">method</span> set_redirection_header</span> : <code class="type">?set_cookies:<a href="Netcgi.Cookie.html#TYPEt">Cookie.t</a> list -><br> ?fields:(string * string list) list -> string -> unit</code></pre><div class="info"> Sets the header such that a redirection to the specified URL is performed. If the URL begins with "http:" the redirection directive is passed back to the client, and the client will repeat the request for the new location (with a GET method). If the URL begins with "/", the server performs the redirection, and it is invisible for the client.<br> </div> <pre><span id="METHODoutput"><span class="keyword">method</span> output</span> : <code class="type"><a href="Netchannels.trans_out_obj_channel-c.html">Netchannels.trans_out_obj_channel</a></code></pre><div class="info"> <span class="warning">Deprecated.</span>Use <code class="code">#out_channel</code> instead.<br> </div> <pre><span id="METHODout_channel"><span class="keyword">method</span> out_channel</span> : <code class="type"><a href="Netchannels.trans_out_obj_channel-c.html">Netchannels.trans_out_obj_channel</a></code></pre><div class="info"> The output channel to which the generated content is intended to be written. The header is not stored in this channel, so <code class="code">#pos_out</code> returns the size of the DATA in bytes (useful to set Content-Length). Note that HEAD requests must not send back a message body so, in this case, all data sent to this channel is discarded. This allows your scripts to work unmodified for GET, POST and HEAD requests. <p> The output channel may have transactional semantics, and because of this, it is an <code class="code">trans_out_obj_channel</code>. Implementations are free to support transactions or not. <p> After all data have been written, the method <code class="code">#commit_work()</code> <b>must</b> be called, even if there is no support for transactions. <p> Simple Example: <pre class="codepre"><code class="code"> cgi # out_channel # output_string "Hello world!\n"; cgi # out_channel # commit_work() </code></pre> <p> Example for an error handler and a transaction buffer: If an error happens, it is possible to roll the channel back, and to write the error message. <pre class="codepre"><code class="code"> try cgi # set_header ... (); cgi # out_channel # output_string "Hello World!"; ... cgi # out_channel # commit_work(); with err -> cgi # out_channel # rollback_work(); cgi # set_header ... (); cgi # out_channel # output_string "Software error!"; ... cgi # out_channel # commit_work(); </code></pre><br> </div> <pre><span id="METHODat_exit"><span class="keyword">method</span> at_exit</span> : <code class="type">(unit -> unit) -> unit</code></pre><div class="info"> <code class="code">#at_exit f</code> registers the function <code class="code">f</code> to be executed when <code class="code">#finalize</code> is called (which is done automatically when the request finishes). The functions are executed in the reverse order in which they were registered.<br> </div> </body></html>