web服务器读写权限可能会引起HttpSendRequest返回错误码12152

简介:

web服务器为Aapache(运行在linux上)扩展模块(参看这里),将收到来自客户端的POST请求文本写到某个目录中,客户端发送代码如下(不完整):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
strcpy (szURL,  "http://www.xxx.com" ) // xxx 仅仅为了说明问题
if  (!::InternetCheckConnection(szURL, FLAG_ICC_FORCE_CONNECTION, 0))
     return  FALSE;
TCHAR  szModuleFile[MAX_PATH] = {0};
::GetModuleFileName(NULL, szModuleFile, MAX_PATH);
LPCTSTR  lpPath = ::PathFindFileName(szModuleFile);
HINTERNET hOpen = ::InternetOpen(lpPath, INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY, NULL, NULL, 0);
if  (NULL == hOpen)
     return  FALSE;
HINTERNET hConnect = ::InternetConnect(hOpen, lpDomain, dwPort, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 0);
if  (NULL == hConnect)
     goto  FUN_END2;
LPCTSTR  szAccept[] = {_T( "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" ), NULL};
DWORD  dwFlag = INTERNET_FLAG_NO_CACHE_WRITE | INTERNET_FLAG_RELOAD | INTERNET_FLAG_KEEP_CONNECTION;
HINTERNET hOpenRequest = ::HttpOpenRequest(hConnect, _T( "POST" ), _T( "my_app" ),
     _T( "HTTP/1.1" ), szURL, szAccept, dwFlag, 0);  // my_app是apache扩展C++模块.
if  (NULL == hOpenRequest)
     goto  FUN_END1;
BOOL  bRet = FALSE;
TCHAR  headerContentLength[64];
_stprintf(headerContentLength, _T( "Content-Length: %d\r\n\r\n" ), nLen);
// 这个语句向http://www.xxx.com/my_app发送数据.
bRet = ::HttpSendRequest(hOpenRequest, headerContentLength, _tcslen(headerContentLength), utf8PostData, nLen);
DWORD  dwErr = ::GetLastError();
if  (!bRet)   goto  FUN_END1;
TCHAR  szBuff[BUF_LEN_1024] = {0};
DWORD  dwBuffSize = BUF_LEN_1024* sizeof (szBuff)-2;
bRet = ::HttpQueryInfo(hOpenRequest, HTTP_QUERY_STATUS_CODE, ( LPVOID )szBuff, &dwBuffSize, NULL);
//Reference to http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
int  nStatusCode = _tstoi(szBuff);
//if (nStatusCode<200 || 206<nStatusCode)
if  (200 != nStatusCode)
     bRet = FALSE;
......

在调试过程中发现,HttpSendRequest总是返回FALSE,错误码为12152(MSDN定义,ERROR_HTTP_INVALID_SERVER_RESPONSE,The server response could not be parsed).经过抓包可知,网络正常,3次握手,4次分手都正常,说明apache确实收到了这份数据,通过浏览器访问http://www.xxx.com/my_app也正常.  

 有不少网友说该错误可能发生在客户端或者系统,例如杀毒软件,网络异常等等,现这里不是这种问题,经过调查发现,错误竟然出在服务端读写权限上.扩展模块my_app会将收到的数据写到目录log,但log的权限开始是"drwxr-xr-x.",后来修改了权限(chmod ugo+w log)为"drwxrwxrwx."竟然可以了.

 从这个错误可以看出,当apache不能处理某个http请求时,不会将相应的数据传递给C++扩展模块,而是返回错误(12152)给发送程序.

 











本文转自jetyi51CTO博客,原文链接:http://blog.51cto.com/jetyi/1254778 ,如需转载请自行联系原作者





相关文章
|
3天前
|
Apache Windows
windows 一键安装apache服务器 windows傻瓜式安装apache2 web服务器管理软件
windows 一键安装apache服务器 windows傻瓜式安装apache2 web服务器管理软件
|
3天前
|
Windows
win10家庭版安装iis 微软web服务器 windows安装IIS web服务器
win10家庭版安装iis 微软web服务器 windows安装IIS web服务器
|
4天前
|
Java 关系型数据库 MySQL
【JavaEE进阶】部署Web项目到Linux服务器
【JavaEE进阶】部署Web项目到Linux服务器
|
17天前
|
网络协议 数据格式 Python
Python进阶---HTTP协议和Web服务器
Python进阶---HTTP协议和Web服务器
21 4
|
17天前
|
弹性计算 关系型数据库 MySQL
【阿里云弹性计算】从零搭建:基于阿里云ECS的高性能Web服务部署实践
【5月更文挑战第21天】本文介绍了如何使用阿里云ECS搭建高性能Web服务。首先,注册阿里云账号购买ECS实例,选择合适配置。接着,通过SSH连接实例,更新系统并安装Apache、PHP和MySQL。创建网站目录,上传代码,配置数据库和PHP。然后,启用Gzip压缩和KeepAlive,调整Apache并发连接数以优化性能。此教程为在阿里云上构建高效Web服务提供了基础指南。
125 5
|
21天前
|
JavaScript 前端开发 Java
web服务器是什么
web服务器是什么
67 0
|
22天前
|
应用服务中间件 网络安全 Apache
构建高性能Web服务器:Nginx vs Apache
【5月更文挑战第16天】Nginx与Apache是两种主流Web服务器,各具优势。Nginx以其轻量级、高并发处理能力和反向代理功能见长,适合大型网站和高并发场景;而Apache以功能丰富、稳定性强闻名,适合企业网站和需要多种Web服务功能的场景。在性能上,Nginx处理高并发更优,Apache则可能在高负载时遭遇瓶颈。在选择时,应根据实际需求权衡。
|
23天前
|
JSON JavaScript API
使用 Node.js 开发一个简单的 web 服务器响应 HTTP post 请求
使用 Node.js 开发一个简单的 web 服务器响应 HTTP post 请求
42 1
|
23天前
|
JSON JavaScript 中间件
使用 Node.js 开发一个简单的 web 服务器响应 HTTP get 请求
使用 Node.js 开发一个简单的 web 服务器响应 HTTP get 请求
16 2
|
2天前
|
关系型数据库 MySQL PHP
PHP的生命周期:从诞生到现代Web开发
本文将探索PHP的发展历程,从其最初的设计目标到成为现代Web开发的核心语言。我们将深入了解PHP如何适应不断变化的技术环境,并保持其在开发者社区中的受欢迎程度。