G-WAN - 如果请求 URL = 541+ 个字符,如何返回状态码:200 OK?

Posted

技术标签:

【中文标题】G-WAN - 如果请求 URL = 541+ 个字符,如何返回状态码:200 OK?【英文标题】:G-WAN - How to return Status Code: 200 OK if request URL = 541+ characters? 【发布时间】:2019-09-04 19:08:56 【问题描述】:

我正在使用 G-WAN Web 应用程序。服务器 v7.12.6。

如果请求 URL 总共有 541+ 个字符,包括 25 个参数,如何返回有效状态码:200 OK?

ajaxGet(URL, method) 其中方法是 GET 或 PUT(相同的结果)

请求网址:

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

【问题讨论】:

【参考方案1】:

好问题 - 我现在无法访问源代码,但查看网站上的 G-WAN API 让我觉得 READ_XBUFMAX_ENTITY_SIZE 可能会有所帮助。

通常,READ_XBUF 将用于G-WAN HANDLER 以增加(如果需要)连接缓冲区,而MAX_ENTITY_SIZE 是一次性设置,可以随时更改(甚至在服务器启动之前,感谢init.c 脚​​本)。

我认为仅扩大 MAX_ENTITY_SIZE 值(其目的是防止大型实体 DoS 攻击)就可以完成这项工作,因为 G-WAN 很可能会在每个请求的基础上自动扩大 READ_XBUF从客户端读取。

【讨论】:

【参考方案2】:

感谢您的快速回复。

我更新了脚本 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 脚本很有用, 但仅针对此特定脚本 createCompany.c 提高 GET/PUT 请求的限制

任何 script.c 示例如何提高 READ_XBUF 的限制?

【讨论】:

handlers/main_rewrite.c 展示了如何在 G-WAN 增加 READ_XBUF 之前采取行动。我将不得不检查源代码以了解 MAX_ENTITY_SIZE Gill,感谢您让我们有机会免费使用 G-WAN。这是一个很棒的网络服务器。非常适合与 C 一起使用。从 2012 年开始使用 G-WAN,对于其他 Web 服务器永远不会改变。

以上是关于G-WAN - 如果请求 URL = 541+ 个字符,如何返回状态码:200 OK?的主要内容,如果未能解决你的问题,请参考以下文章

leetcode541

541-反转字符串 II

541. 反转字符串 II

541. 反转字符串 II

将C#dll与G-WAN一起使用

每日leetcode-数组-541. 反转字符串 II