HTTP发送对OPTIONS请求的响应[C]

时间:2011-04-28 10:36:30

标签: c++ c

接收HTTP响应时出现Response is null错误 我正在使用行套接字在C中开发一个示例小型HTTP服务器。

我的应用程序中实际上有两台服务器,一台是标准的Apache服务器,我用它来提供HTML页面,我的小型服务器只响应HTML页面中Javascript发送的XMLHttpRequest

我发送JavaScript请求如下:

var sendReq = new XMLHttpRequest();
endReq.open("POST", "http://localhost:10000/", true);
sendReq.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
sendReq.onreadystatechange = handleResult;
var param = "REQUEST_TYPE=2002&userName=" + userName.value;
param += "&password=" + password.value;
sendReq.send(param);

当我发送此请求时,我在服务器代码中收到以下请求:

OPTIONS / HTTP/1.1
Host: localhost:10000
User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.3) Gecko/20100423 Ubuntu/10.04 (lucid) Firefox/3.6.3
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Origin: http://localhost:7777
Access-Control-Request-Method: POST

我使用套接字写功能回复了此请求:

HTTP/1.1 200 OK\n
Access-Control-Allow-Origin: *\n
Server: PSL/1.0 (Unix) (Ubuntu/Linux)\n
Access-Control-Allow-Methods: POST, GET, OPTIONS\n
Accept-Ranges: bytes\n
Content-Length: 438\nConnection: close\n
Content-Type: text/html; charset=UTF-8\n\n

我不知道应OPTIONS请求发送的HTTP实际响应应该是什么 在此之后,我收到了我从JavaScript发送的实际POST请求,然后我回复

HTTP/1.1 200 OK\n\n

然后在浏览器端获取错误Response is null

那么如何使用“C”中的行套接字将报头/数据作为HTTP响应发送,以及如何响应OPTIONS请求。有人可以举一些例子来解释我吗?

3 个答案:

答案 0 :(得分:2)

很难理解你的问题,但我相信你指的是这个回应给你带来麻烦:

HTTP/1.1 200 OK\n\n

您应该包括其他字段,尤其是Content-Length和Content-Type。如果您要构建自己的HTTP服务器,则应查看protocol specifications

也就是说,为什么你需要更换HTTP服务器而不是使用CGI或其他服务器端语言(PHP,Java等),这一点都不清楚。这大大降低了您的可移植性和可维护性。

最后,您似乎在请求中传输密码。确保这只能通过某种加密(HTTPS)或物理安全连接来完成。

答案 1 :(得分:1)

我不确定你在问什么,但你可能会发现以下内容:

HTTP Made Really Easy

HTTP/1.1 rfc2616.txt

MAMA - Opera Developer Community

我在编写HTTP客户端时发现它们非常有用。

答案 2 :(得分:0)

在我们的服务器处理 OPTIONS 请求之后出现此问题,由于某种原因,任何后续请求都是必需以“回复> Access-Control-Allow-Origin:* “以及其他正常标题和响应正文。

在我们的回复中提供此行后,我总是在我的javascript中获得所需的responseText / responseXML。