Commit e90319a1 by xiongziliang

http服务器支持OPTIONS命令

parent 2b592780
...@@ -53,12 +53,23 @@ HttpSession::~HttpSession() { ...@@ -53,12 +53,23 @@ HttpSession::~HttpSession() {
TraceP(this); TraceP(this);
} }
void HttpSession::Handle_Req_OPTIONS(int64_t &content_len){
KeyValue header;
header.emplace("Allow","GET, POST, OPTIONS");
header.emplace("Access-Control-Allow-Origin","*");
header.emplace("Access-Control-Allow-Credentials","true");
header.emplace("Access-Control-Request-Methods","GET, POST, OPTIONS");
header.emplace("Access-Control-Request-Headers","Accept,Accept-Language,Content-Language,Content-Type");
sendResponse( "200 OK" , true, nullptr,header);
}
int64_t HttpSession::onRecvHeader(const char *header,uint64_t len) { int64_t HttpSession::onRecvHeader(const char *header,uint64_t len) {
typedef void (HttpSession::*HttpCMDHandle)(int64_t &); typedef void (HttpSession::*HttpCMDHandle)(int64_t &);
static unordered_map<string, HttpCMDHandle> s_func_map; static unordered_map<string, HttpCMDHandle> s_func_map;
static onceToken token([]() { static onceToken token([]() {
s_func_map.emplace("GET",&HttpSession::Handle_Req_GET); s_func_map.emplace("GET",&HttpSession::Handle_Req_GET);
s_func_map.emplace("POST",&HttpSession::Handle_Req_POST); s_func_map.emplace("POST",&HttpSession::Handle_Req_POST);
s_func_map.emplace("OPTIONS",&HttpSession::Handle_Req_OPTIONS);
}, nullptr); }, nullptr);
_parser.Parse(header); _parser.Parse(header);
...@@ -66,7 +77,8 @@ int64_t HttpSession::onRecvHeader(const char *header,uint64_t len) { ...@@ -66,7 +77,8 @@ int64_t HttpSession::onRecvHeader(const char *header,uint64_t len) {
string cmd = _parser.Method(); string cmd = _parser.Method();
auto it = s_func_map.find(cmd); auto it = s_func_map.find(cmd);
if (it == s_func_map.end()) { if (it == s_func_map.end()) {
sendResponse("403 Forbidden", true); WarnL << "不支持该命令:" << cmd;
sendResponse("405 Not Allowed", true);
return 0; return 0;
} }
......
...@@ -108,6 +108,8 @@ protected: ...@@ -108,6 +108,8 @@ protected:
private: private:
void Handle_Req_GET(int64_t &content_len); void Handle_Req_GET(int64_t &content_len);
void Handle_Req_POST(int64_t &content_len); void Handle_Req_POST(int64_t &content_len);
void Handle_Req_OPTIONS(int64_t &content_len);
bool checkLiveFlvStream(const function<void()> &cb = nullptr); bool checkLiveFlvStream(const function<void()> &cb = nullptr);
bool checkWebSocket(); bool checkWebSocket();
bool emitHttpEvent(bool doInvoke); bool emitHttpEvent(bool doInvoke);
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论