2011-04-28 172 views
0

在接收HTTP响应时出现Response is null错误。
我正在开发一个使用行套接字的示例小型HTTP服务器CHTTP发送对OPTIONS请求的响应[C]

我的应用程序中实际上有2个服务器,一个是我用于提供HTML页面的标准Apache服务器,而我的小型服务器将只响应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 

我不知道应该是HTTP实际响应e根据OPTIONS的要求发送。
在此之后,我感到我已经从JavaScript发送我的实际POST请求,然后我进行回应与

HTTP/1.1 200 OK\n\n 

,然后在浏览器端出现错误Response is null

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

回答

0

这个问题已经发生,通过我们的服务器处理OPTIONS请求后,任何后续请求提出,出于某种原因,需要与“访问控制允许来源地回应道分别为:* “以及其他正常的标题和响应正文。

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

2

很难理解你的问题,但我相信你都指向这个作为回应给你的麻烦:

HTTP/1.1 200 OK\n\n 

你应该包括其他领域,尤其是内容长度和Content-Type。如果你打算建立你自己的HTTP服务器,那么你应该查看protocol specifications。这就是说,为什么你需要更换HTTP服务器而不是使用CGI或其他服务器端语言(PHP,Java等),这并不是一成不变的。这显着降低了您的便携性和可维护性。

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