2011-04-28 170 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)或其他物理安全連接完成的。