G-WAN - Как вернуть код состояния: 200 ОК, если URL запроса = 541+ символов? - PullRequest
1 голос
/ 14 апреля 2019

Я использую G-WAN Web App. Сервер v7.12.6.

Как вернуть действительный код состояния: 200 ОК, если URL запроса содержит 541+ символов, включая 25 параметров?

ajaxGet (URL, метод), где метод - GET или PUT (тот же результат)

URL запроса:

http://myWebsite.ca:xx/?createCompany.c&legalname=mycomp&dba=mycomp%20dba&www=www.myWebsite... 

createCompany.c

#pragma link "pq"
#include <stdlib.h>
#include <string.h>
#include "/usr/include/postgresql/libpq-fe.h"
#include "gwan.h"
//----------------------------------------------------------------------------

int main(int argc, char *argv[]) {

  u64 start = getus();
  PGconn *conn;
  PGresult *res;
  char DBrequestString [1000] = "";

  char *legal_name = 0, *dba = 0, *www = 0; //...+ 22 more

  xbuf_t *reply = get_reply(argv);

  get_arg("legalname=", &legal_name, argc, argv);
  get_arg("dba=", &dba, argc, argv);
  get_arg("www=", &www, argc, argv);
  //...+ 22 more

  char requestString[1000] = "SELECT create_company('%s','%s','%s', ... + 22 more);";
  sprintf(DBrequestString, requestString,legal_name, dba, www, ... + 22 more);

  conn = PQconnectdb("host=x port=x dbname=x user=x password=x");

  if (PQstatus(conn) != CONNECTION_OK){
    fprintf(stderr, "Connection to database failed: %s",PQerrorMessage(conn));
    PQfinish(conn);
    xbuf_cat(reply, "{\"message\":\"Connection to database failed !\"}");//message Json format
    return 200;
  }
  res = PQexec(conn, DBrequestString);

  printf(" --> %s\n",PQgetvalue(res, 0, 0));
  xbuf_cat(reply, PQgetvalue(res, 0, 0));//return one line Json format

  PQclear(res);
  PQfinish(conn);
  printf("TEMPS D'EXECUTION: %.2Fms\n\n",(getus() - start)/1000.0);
  return 200; //return OK
}

Ответы [ 2 ]

0 голосов
/ 15 апреля 2019

Спасибо за ваш быстрый ответ.

Я обновил скрипт createCompany.c для повышения лимита (согласно вашему примеру):

u32 *old_entity_size = (u32*)get_env(argv, MAX_ENTITY_SIZE);
u32  new_entity_size = 2 * 1024 * 1024; // 2 MiB    
*old_entity_size = new_entity_size; // raise the limit to 2 MiB

Возможно ли, что MAX_ENTITY_SIZE предназначен исключительно для POST-запроса?

Повышение лимита MAX_ENTITY_SIZE будет работать и для запросов GET / PUT?

На самом деле, я бы хотел, чтобы ограничение оставалось в качестве начальной настройки по умолчанию в G-WAN, что полезно для других скриптов .c, но для увеличения лимита для запросов GET / PUT только для этого конкретного скрипта createCompany.c

Какой-нибудь пример script.c как повысить лимит для READ_XBUF?

0 голосов
/ 15 апреля 2019

Хороший вопрос - у меня нет прав доступа к исходному коду, но просмотр G-WAN API на веб-сайте заставил меня подумать, что READ_XBUF или MAX_ENTITY_SIZE могут помочь.

Как правило, READ_XBUF будет использоваться в G-WAN HANDLER для увеличения (при необходимости) буфера соединения, в то время как MAX_ENTITY_SIZE - это однократная настройка, которую можно изменить в любое время (и даже досервер запускается, благодаря сценарию init.c).

Я думаю, что простое увеличение значения MAX_ENTITY_SIZE (цель которого состоит в том, чтобы предотвратить DoS-атаки на объект lage) сделало бы эту работу, потому что наиболее вероятно, чтоG-WAN автоматически увеличивает READ_XBUF для каждого запроса при чтении с клиента.

...