Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
VMOD_BODYACCESS(3)					    VMOD_BODYACCESS(3)

NAME
       vmod_bodyaccess - Varnish Module	for request body access

SYNOPSIS
	  import bodyaccess [as	name] [from "path"]

	  INT rematch_req_body(STRING re)

	  VOID hash_req_body()

	  INT len_req_body()

	  VOID log_req_body(STRING prefix, INT length)

DESCRIPTION
       Varnish module that lets	you access the request body.

       VCL example:

	  vcl 4.0;
	  import std;
	  import bodyaccess;

	  backend default { .host = "192.0.2.11"; .port	= "8080"; }

	  sub vcl_recv {
		  if (req.method == "POST") {
			  set req.http.x-method	= req.method;
			  if (std.cache_req_body(110KB)) {
				  set req.http.x-len = bodyaccess.len_req_body();
				  set req.http.x-re = bodyaccess.rematch_req_body("Regex");
				  bodyaccess.log_req_body("PREFIX:", 3);
			  }
		  }
	  return(hash);
	  }

	  sub vcl_hash {
		  bodyaccess.hash_req_body();
		  return (lookup);
	  }

	  sub vcl_backend_fetch	{
		  set bereq.method = bereq.http.x-method;
	  }

	  sub vcl_deliver {
		  set resp.http.x-len =	req.http.x-len;
		  set resp.http.x-re = req.http.x-re;
	  }

       N.B.  The request body must be retrieved	before doing any operations on
       it.  It can be buffered using the cache_req_body() function from	 libv-
       mod_std.

       These  functions	applies	only to	standard REST methods.	Caching	is not
       allowed on PUT requests.

   INT rematch_req_body(STRING re)
       Description
	      Returns -1 if an error occurrs.  Returns 0 if the	 request  body
	      doesn't  contain	the  string re.	 Returns 1 if the request body
	      contains the string re.

	      Note that	the comparison is case sensitive and the request  body
	      must be buffered.

       Example

		 | std.cache_req_body(1KB);
		 |
		 | if (bodyaccess.rematch_req_body("FOO") == 1)	{
		 |    std.log("is true");
		 | }

   VOID	hash_req_body()
       Description
	      Adds  available request body bytes to the	lookup hash key.  Note
	      that this	function can only be used in vcl_hash and the  request
	      body must	be buffered.

       Example

		 | sub vcl_recv	{
		 |     std.cache_req_body(1KB);
		 | }
		 |
		 | sub vcl_hash{
		 |     bodyaccess.hash_req_body();
		 | }

   INT len_req_body()
       Description
	      Returns the request body length or -1 if an error	occurs.

	      Note that	the request body must be buffered.

       Example

		 | std.cache_req_body(1KB);
		 | set req.http.x-len =	bodyaccess.len_req_body();

   VOID	log_req_body(STRING prefix="", INT length=200)
       Description
	      Log  the	request	body to	the VSL, making	it available for other
	      components.  When	logging, it takes an optional prefix and a max
	      line length, so the body could be	split up across	multiple lines
	      as there is a limit to how large a single	line can be.

       Example

		 | std.cache_req_body(1KB);
		 | bodyaccess.log_req_body("PREFIX:", 3);

							    VMOD_BODYACCESS(3)

NAME | SYNOPSIS | DESCRIPTION

Want to link to this manual page? Use this URL:
<https://www.freebsd.org/cgi/man.cgi?query=vmod_bodyaccess&sektion=3&manpath=FreeBSD+12.2-RELEASE+and+Ports>

home | help