Commit b15cd865 by xiongziliang

新增HTTP HEAD命令的支持,目的是兼容一些播放器

parent 1c14239d
...@@ -53,14 +53,11 @@ HttpSession::~HttpSession() { ...@@ -53,14 +53,11 @@ HttpSession::~HttpSession() {
TraceP(this); TraceP(this);
} }
void HttpSession::Handle_Req_OPTIONS(int64_t &content_len){ void HttpSession::Handle_Req_HEAD(int64_t &content_len){
KeyValue header; //暂时全部返回200 OK,因为HTTP GET存在按需生成流的操作,所以不能按照HTTP GET的流程返回
header.emplace("Allow","GET, POST, OPTIONS"); //如果直接返回404,那么又会导致按需生成流的逻辑失效,所以HTTP HEAD在静态文件或者已存在资源时才有效
header.emplace("Access-Control-Allow-Origin","*"); //对于按需生成流的直播场景并不适用
header.emplace("Access-Control-Allow-Credentials","true"); sendResponse("200 OK", 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) {
...@@ -69,7 +66,7 @@ int64_t HttpSession::onRecvHeader(const char *header,uint64_t len) { ...@@ -69,7 +66,7 @@ int64_t HttpSession::onRecvHeader(const char *header,uint64_t len) {
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); s_func_map.emplace("HEAD",&HttpSession::Handle_Req_HEAD);
}, nullptr); }, nullptr);
_parser.Parse(header); _parser.Parse(header);
...@@ -268,8 +265,11 @@ bool HttpSession::checkLiveFlvStream(const function<void()> &cb){ ...@@ -268,8 +265,11 @@ bool HttpSession::checkLiveFlvStream(const function<void()> &cb){
return true; return true;
} }
void HttpSession::Handle_Req_GET(int64_t &content_len) { void HttpSession::Handle_Req_GET(int64_t &content_len) {
Handle_Req_GET_l(content_len, true);
}
void HttpSession::Handle_Req_GET_l(int64_t &content_len, bool sendBody) {
//先看看是否为WebSocket请求 //先看看是否为WebSocket请求
if(checkWebSocket()){ if(checkWebSocket()){
content_len = -1; content_len = -1;
......
...@@ -107,8 +107,9 @@ protected: ...@@ -107,8 +107,9 @@ protected:
void onWebSocketEncodeData(const Buffer::Ptr &buffer) override; void onWebSocketEncodeData(const Buffer::Ptr &buffer) override;
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_GET_l(int64_t &content_len, bool sendBody);
void Handle_Req_OPTIONS(int64_t &content_len); void Handle_Req_POST(int64_t &content_len);
void Handle_Req_HEAD(int64_t &content_len);
bool checkLiveFlvStream(const function<void()> &cb = nullptr); bool checkLiveFlvStream(const function<void()> &cb = nullptr);
bool checkWebSocket(); bool checkWebSocket();
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论