proxy-wasm / proxy-wasm-cpp-sdk

WebAssembly for Proxies (C++ SDK)
Apache License 2.0
139 stars 67 forks source link

How to modify HTTP header "Content-Length" in onRequestBody/onResponseBody #146

Open coolg92003 opened 1 year ago

coolg92003 commented 1 year ago

Current, I use WASM to modify request/response body: a 1) Assume the orignal message body: {"name":"cliff"} 'content-length', '16' 2) in onRequestBody() After modify, then the body size will be below 3 conditions: 1) the new body size == the original body size, Perfect in server side, got {"name":"world"} 2) the new body size > the original body size, this is also Ok, my solution is to remove "Content-Length" unconditionally when calling onRequestHeader() in server side, got {"name":"hello world"} 3) the new body size > the original body size I Can't handle this case. in server side, got {"name":"leo"}f"}, the additional ff is there the ugly way is to set requestbody from<f"}>, then server side get <{"name":"leo"} > then server side got extra 3 spaces. Therefore, would you help provide one way to modify the "Content-Length" in onRequestBody/onResponseBody after modify the message body.

Below is code: //std::string l_new_data("{\"new_data\":\"new_data_value_add_by_cliff\"}"); std::string l_new_data("{\"new\":\"new\"}"); size_t l_new_size = l_new_data.size(); WasmResult l_set_result = setBuffer(WasmBufferType::HttpRequestBody, 0, l_new_size, l_new_data, &l_new_size); LOG_TRACE(std::string(HSSC) + std::string("set status=") + (l_set_result == WasmResult::Ok ? std::string("Ok"):std::string("Not_ok"))); LOG_TRACE(std::string(HSSC) + std::string("After setBuffer(") + l_new_data + std::string("), pReqBodyBuffSize=")

Notes: no matter which way below, it doesn't work //addRequestHeader("Content-Length", std::to_string(l_new_size)); //removeRequestHeader("Content-Length");

thanks Cliff

coolg92003 commented 1 year ago

This is good link(https://github.com/proxy-wasm/proxy-wasm-cpp-sdk/issues/127), but it doesn't meet the need

coolg92003 commented 1 year ago

After reading https://github.com/proxy-wasm/proxy-wasm-cpp-sdk/issues/124, think it is reasonable to remove "Content-Length" because after modifying Request Body in onRequestBody(), there is no chance to modify "Content-Length" since it has been sent out