Url rewriting 在两个不同的连接处理程序调用中使用相同的指针地址
我正在重写url并用Sakege进行测试,但我遇到了一个问题 有时,gwan在处理程序连接中对主函数的2次调用使用相同的地址。 为了在两个调用之间产生差异,我使用一个带rand()的整数 在下面的示例中,我们发现两个电话的相同地址非常接近Url rewriting 在两个不同的连接处理程序调用中使用相同的指针地址,url-rewriting,g-wan,Url Rewriting,G Wan,我正在重写url并用Sakege进行测试,但我遇到了一个问题 有时,gwan在处理程序连接中对主函数的2次调用使用相同的地址。 为了在两个调用之间产生差异,我使用一个带rand()的整数 在下面的示例中,我们发现两个电话的相同地址非常接近 init 1412811699 : buff 0x10d3760 -> GET /imagesproduitnew-100018-imagesgallery/BIG-1.jpg HTTP/1.1 init 687109171 : buff 0x10d3
init 1412811699 : buff 0x10d3760 -> GET /imagesproduitnew-100018-imagesgallery/BIG-1.jpg HTTP/1.1
init 687109171 : buff 0x10d3760 -> GET /imagesproduitnew-100018-imagesgallery/BIG-1.jpg HTTP/1.1
regex OK 1412811699 : buff 0x10d3760 -> GET /imagesproduitnew-100018-imagesgallery/BIG-1.jpg HTTP/1.1
extarctPart 1412811699 : buff 0x10d3760 -> GET /imagesproduitnew-100018-imagesgallery/BIG-1.jpg HTTP/1.1
regex OK 687109171 : buff 0x10d3760 -> GET /imagesproduitnew-100018-imagesgallery/BIG-1.jpg HTTP/1.1
rewriteJPG 1412811699 : buff 0x10d3760 -> GET /imagesproduitnew-100018-imagesgallery/BIG-1.jpg HTTP/1.1
xbufreplace 1412811699 : buff 0x10d3760 -> GET /imagesproduitnew/imagesgallery/BIG/100018.jpg HTTP/1.1
-- HERE buffer is changed by the previous step because both have the same address --
extarctPart 687109171 : buff 0x10d3760 -> GET /imagesproduitnew/imagesgallery/BIG/100018.jpg HTTP/1.1
为了解决这个问题,我使用了另一台服务器提供的不同URL列表
谢谢你的帮助
我需要重写URL: /-100018 imagesgallery/BIG-1.jpg必须发送到文件/imagesproduitnew/imagesgallery/BIG/100018.jpg 我的代码:
int main(int argc, char *argv[])
{
const long state = (long)argv[0];
if(state == HDL_AFTER_READ)
{
int test = rand();
xbuf_t *read_xbuf = (xbuf_t*)get_env(argv, READ_XBUF);
printf ("init %i : buff %p -> %s\n", test, read_xbuf->ptr, read_xbuf->ptr);
//function to test if URL needs to be rewrite
if(regexRewriteJPG(read_xbuf->ptr) == 0){
printf ("regex OK %i : buff %p -> %s\n", test, read_xbuf->ptr, read_xbuf->ptr);
char *URL;
char *newURL;
//extractPart, extract the URL from buffer (/imagesproduitnew-100018-imagesgallery/BIG-1.jpg for exemple)
URL = extractPart(read_xbuf->ptr, str_regexJPG);
printf ("extarctPart %i : buff %p -> %s\n", test, read_xbuf->ptr, read_xbuf->ptr);
if(URL){
//rewriteJPG return the reel path of the file (/imagesproduitnew/imagesgallery/BIG/100018.jpg for exemple)
newURL = rewriteJPG(URL);
printf ("rewriteJPG %i : buff %p -> %s\n", test, read_xbuf->ptr, read_xbuf->ptr);
if(newURL){
xbuf_repl(read_xbuf, URL, newURL);
printf ("xbufreplace %i : buff %p -> %s\n", test, read_xbuf->ptr, read_xbuf->ptr);
free(newURL);
}
else{
printf("newURL is NULL\n");
}
free(URL);
}
else{
printf("URL is NULL\n");
}
}
printf ("END %i : buff %p -> %s\n", test, read_xbuf->ptr, read_xbuf->ptr);
}
return 255; // execute next connection
}
自定义处理程序变量的printf()
转储肯定有意义。。。一旦有人可以访问处理程序的源代码
如果“处理程序连接中主函数的2次调用的相同地址”是指READ\u XBUF
地址,请记住:
- G-WAN内部缓冲区被动态地重新使用以处理请求(它们在连接的生命周期内不会被连接)
将显示连续(以及并发)连接printf()
- 在处理程序中每个处理步骤的开始和停止计时之前,使用计时器不会让您知道请求是并发的还是顺序的
printf()
转储自定义处理程序的变量肯定有意义。。。一旦有人可以访问处理程序的源代码
如果“处理程序连接中主函数的2次调用的相同地址”是指READ\u XBUF
地址,请记住:
- G-WAN内部缓冲区被动态地重新使用以处理请求(它们在连接的生命周期内不会被连接)
将显示连续(以及并发)连接printf()
- 在处理程序中每个处理步骤的开始和停止计时之前,使用计时器不会让您知道请求是并发的还是顺序的
这将帮助其他人回答您的问题。只是一句话,但您的URL映射:
/-100018-imagesgallery/BIG-1.jpg
…的逻辑性和RESTFUL性低于文件系统目标:
/imagesproduitnew/imagesgallery/BIG/100018.jpg
…因为它打破了资源的层次结构
此外,使用文件系统映射可以避免使用速度较慢的正则表达式库
我并不是说你“做错了”,我只是指出有很多方法可以实现你的目标,而不必解决这个不直观的URI映射所产生的问题
如果您确实需要在URI中反转“100018”
和“imagesgallery”
,则无需使用正则表达式即可轻松快速地完成
如果此URI映射旨在隐藏资源的实际路径,则使用类似以下URI的内容:
/imagesproduitnew/imagesgallery/BIG/100018.jpg
由处理程序进行如下修改:
/imagesproduitnew/imagesgallery/BIG/957345.jpg
转换可以通过一个非常简单的操作完成,比如XORing资源名
这就是为什么在尝试做不一定是最佳解决方案的事情之前,质疑初始目标是一个好主意。只是一句话,但你的URL映射:
/-100018-imagesgallery/BIG-1.jpg
…的逻辑性和RESTFUL性低于文件系统目标:
/imagesproduitnew/imagesgallery/BIG/100018.jpg
…因为它打破了资源的层次结构
此外,使用文件系统映射可以避免使用速度较慢的正则表达式库
我并不是说你“做错了”,我只是指出有很多方法可以实现你的目标,而不必解决这个不直观的URI映射所产生的问题
如果您确实需要在URI中反转“100018”
和“imagesgallery”
,则无需使用正则表达式即可轻松快速地完成
如果此URI映射旨在隐藏资源的实际路径,则使用类似以下URI的内容:
/imagesproduitnew/imagesgallery/BIG/100018.jpg
由处理程序进行如下修改:
/imagesproduitnew/imagesgallery/BIG/957345.jpg
转换可以通过一个非常简单的操作完成,比如XORing资源名
这就是为什么在尝试做一些不一定是最佳解决方案的事情之前,质疑初始目标是一个好主意。我同意这不是最好的主意,但这是我的项目的要求,我无法决定!除非你有更好的方法,否则我将无法使用gwan。鉴于此处理程序的性质(满足所有请求),我会要求G-WAN团队帮助你编写一个优化版本,使你更容易专注于应用程序本身。我同意这不是最好的主意,但这是我项目的一个要求,我不能决定!除非您有更好的方法,否则我将无法使用gwan。鉴于此处理程序的性质(满足所有请求),我将要求G-WAN团队帮助您编写一个优化版本,使您更容易专注于应用程序本身。