中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

企業(yè)如何免費(fèi)做網(wǎng)站商業(yè)公司的域名

企業(yè)如何免費(fèi)做網(wǎng)站,商業(yè)公司的域名,政府網(wǎng)站開發(fā)建設(shè)方案,分類模板wordpress去光榮地受傷, 去勇敢地痊愈自己。 --- 簡嫃 《水問》--- 從零開始學(xué)習(xí)http協(xié)議 1 知識回顧2 認(rèn)識網(wǎng)絡(luò)重定向3 http請求方法3.1 http常見請求方法3.2 postman工具進(jìn)行請求3.3 處理GET和POST參數(shù) 1 知識回顧 前面兩篇文章中我們學(xué)習(xí)并實(shí)現(xiàn)了http協(xié)議下的請求與應(yīng)…

在這里插入圖片描述

去光榮地受傷,
去勇敢地痊愈自己。
--- 簡嫃 《水問》---

從零開始學(xué)習(xí)http協(xié)議

  • 1 知識回顧
  • 2 認(rèn)識網(wǎng)絡(luò)重定向
  • 3 http請求方法
    • 3.1 http常見請求方法
    • 3.2 postman工具進(jìn)行請求
    • 3.3 處理GET和POST參數(shù)

1 知識回顧

前面兩篇文章中我們學(xué)習(xí)并實(shí)現(xiàn)了http協(xié)議下的請求與應(yīng)答:

  • http請求包括四個部分:請求行 , 報(bào)頭 , 空行 , 請求正文。請求行中的URL是客戶端想要獲取的資源,這是對于服務(wù)器來說最重要的部分,服務(wù)器后續(xù)通過URL在網(wǎng)絡(luò)根目錄中搜索對應(yīng)的資源,然后通過應(yīng)答報(bào)文返回。
  • http應(yīng)答包括四個部分:狀態(tài)行 , 報(bào)頭 , 空行 , 應(yīng)答正文。應(yīng)答正文中包含從服務(wù)器返回的實(shí)際內(nèi)容,如HTML頁面、圖片或其他數(shù)據(jù)。
  • 請求與應(yīng)答中的報(bào)頭都是用于傳輸請求和應(yīng)答的一些基礎(chǔ)信息,以鍵值對的形式儲存。

http協(xié)議作為通信協(xié)議,必然要支持序列化與反序列化。我們需要做的是服務(wù)器的操作,只需要進(jìn)行請求的反序列化和應(yīng)答的序列化就可以了,請求的序列化和應(yīng)答的反序列化是瀏覽器(客戶端)需要考慮的。要做到序列化和反序列化需要按照請求和應(yīng)答的結(jié)構(gòu),從字符串中讀取分離出來,具體操作可以參考之前的文章:

  1. 【計(jì)網(wǎng)】從零開始學(xué)習(xí)http協(xié)議 — http的請求與應(yīng)答
  2. 【計(jì)網(wǎng)】從零開始學(xué)習(xí)http協(xié)議 — 通過http實(shí)現(xiàn)客戶端交互

實(shí)現(xiàn)了http協(xié)議中服務(wù)器的序列化和反序列化,接下來就可以加入一些資源來供客戶端獲取。
對于狀態(tài)行的http版本與http狀態(tài)碼,我們也有了初步的了解:

  1. http版本:瀏覽器和服務(wù)端需要互相告訴各自的版本號,進(jìn)而做到對應(yīng)的處理!因?yàn)閔ttp協(xié)議會不斷更新,不能保證對方是否更新協(xié)議!
  2. http狀態(tài)碼:狀態(tài)碼是服務(wù)器做出應(yīng)答時根據(jù)數(shù)據(jù)處理的情況返回給瀏覽器。每個狀態(tài)碼對應(yīng)一種情況!

2 認(rèn)識網(wǎng)絡(luò)重定向

狀態(tài)碼中3XX是代表重定向的:

狀態(tài)碼含義
301Moved Permanently 永久重定向
302Found 臨時重定向
307Temporary Redirect 臨時重定向資源到新位置
308Permanent Redirect 永久重定向資源到新位置

其中大部分使用301 302,307 308很少使用!我們介紹一下臨時重定向和永久重定向。

首先,網(wǎng)絡(luò)中的重定向和文件的重定向概念上比較類似。一般來說,我們訪問對應(yīng)的網(wǎng)址會直接找到對應(yīng)的服務(wù)器進(jìn)程。當(dāng)這個服務(wù)器讓課客戶端重新進(jìn)行請求另一個服務(wù)器時,此時就是重定向!

舉個例子:學(xué)校南門口有一家非常好吃的餃子館,小明經(jīng)常去那里吃飯。后來因?yàn)榈缆肥┕栴},餃子館搬到看學(xué)校北門口,并為了讓老客戶可以找到新地址,在原來門店貼上新地址。小明這天去了,看到了這個告示,就知道應(yīng)該去北門口找到這家餃子館,這就是重定向!以后小明在想去餃子館應(yīng)該去老地址還是新地址呢?
這就需要分兩種情況:

  1. 如果餃子館是臨時搬到北門口,那么小明一個去原南門口的餃子館看看,再來決定是否去北門口。
  2. 如果餃子館是永久搬到北門口,那么下面不用猶豫,直接就去北門口就可以!

這里的兩種情況就是臨時重定向和永久重定向的區(qū)別:臨時重定向只修改一次,下次客戶端依然訪問原網(wǎng)址。永久重定向會永久修改,下次客戶端直接訪問新地址!

實(shí)際應(yīng)用中,也有實(shí)際的例子:

甲公司使用www.hello.com網(wǎng)址使用了很多年,積攢了很多用戶。后來甲公司將公司網(wǎng)址改成了www.world.com
那么下一次老用戶訪問原網(wǎng)址時,對老客戶進(jìn)行重定向訪問到新網(wǎng)址,并修改老客戶中瀏覽器中的對應(yīng)網(wǎng)址信息。這就是永久重定向!

永久重定向是給搜索引擎看的!每個搜索引擎都會抓取全國各個網(wǎng)站的網(wǎng)址信息,然后建立起鍵值對。每次搜索時就可以通過關(guān)鍵詞搜索到對應(yīng)的網(wǎng)站。這個抓取是不斷進(jìn)行的。當(dāng)一個網(wǎng)站的網(wǎng)址永久更改時,在原網(wǎng)址設(shè)置重定向到新網(wǎng)址,客戶端每次進(jìn)到原網(wǎng)址都要進(jìn)行一次重定向,每次都進(jìn)行重定向就太麻煩了!所以瀏覽器發(fā)現(xiàn)永久重定向之后就會修改內(nèi)部信息,下次就會直接訪問到新網(wǎng)址!
在這里插入圖片描述
我們可以在服務(wù)器中測試一下重定向!
我們在頁面中加入一個測試重定向的鏈接,這個鏈接會請求/redir資源,這個資源實(shí)際上并不存在,只是用來進(jìn)行是否進(jìn)行重定向的判斷依據(jù)!
在這里插入圖片描述

這樣點(diǎn)入鏈接之后,就會再次發(fā)送請求/redir這個資源,我們可以在處理時進(jìn)行一個硬處理,當(dāng)客戶端訪問這個資源時進(jìn)行一個特殊處理:

	if (hreq.Path() == "wwwroot/redir"){// 進(jìn)行重定向LOG(DEBUG, "進(jìn)行重定向!!!\n");std::string redir_path = "https://www.qq.com"; // 重定向的新地址resp.AddCode(302, _code_to_desc[302]);resp.AddHeader("Location", redir_path);// resp.AddBody(content);}else{//...}

這樣進(jìn)行序列化返回給瀏覽器之后,瀏覽器會自動識別,然后就跳轉(zhuǎn)到新的網(wǎng)址中了!!!
在這里插入圖片描述
非常好玩,這個現(xiàn)象就是重定向!!!

3 http請求方法

3.1 http常見請求方法

在http請求中有請求行,請求行中有一個參數(shù):請求方法_method。這個請求方法到底是干什么用的呢?

http中有以下請求方法:

請求方法方法說明適配HTTP版本
GET請求指定的資源。一般用于信息查詢,不應(yīng)產(chǎn)生副作用。HTTP/1.0
POST向指定的資源提交數(shù)據(jù)進(jìn)行處理請求(例如提交表單或上傳文件)。HTTP/1.0
PUT向指定資源位置上傳其最新內(nèi)容。HTTP/1.0
DELETE請求服務(wù)器刪除Request-URI所標(biāo)識的資源。HTTP/1.0
HEAD類似于GET請求,但響應(yīng)體不會返回,用于獲取報(bào)頭信息。HTTP/1.0
OPTIONS用于描述目標(biāo)資源的通信選項(xiàng)。HTTP/1.1
TRACE回顯服務(wù)器收到的請求,主要用于測試或診斷。HTTP/1.1
CONNECT用于將連接改為管道方式的代理服務(wù)器。HTTP/1.1
PATCH對資源進(jìn)行部分修改。HTTP/1.1

其中最常見的就是GET方法和POST方法。 平時使用瀏覽器一般都是獲取資源,就是進(jìn)行GET。有時也會進(jìn)行登錄注冊,這時會向服務(wù)器發(fā)送資源,就是進(jìn)行POST!那么瀏覽器是如何進(jìn)行呢?
我們可以在服務(wù)器中加入打印客戶端請求方法,這樣我們可以看到:
在這里插入圖片描述
可以看到只要是獲取資源都是使用的GET方法!

3.2 postman工具進(jìn)行請求

那我們可以進(jìn)行GET方法了,怎么進(jìn)行POST方法呢?可以使用postman這個工具:

Postman提供了一個直觀的界面來構(gòu)建HTTP請求,包括設(shè)置請求頭、請求體、認(rèn)證等。
Postman允許用戶發(fā)送各種HTTP請求(如GET, POST, PUT, DELETE等)到API端點(diǎn),并檢查響應(yīng)。它支持測試腳本,可以自動驗(yàn)證響應(yīng)數(shù)據(jù)。

我們通過postman快速創(chuàng)建http請求,使用POST方法發(fā)送。
在這里插入圖片描述
這樣服務(wù)器就得到了POST方法的請求。
在這里插入圖片描述

GET方法不光可以獲取數(shù)據(jù),也可以向服務(wù)器發(fā)送數(shù)據(jù)。POST方法也可以向服務(wù)器推送數(shù)據(jù)!
我們可以在postman中加入兩個鍵值對:
在這里插入圖片描述
這樣我們再次請求時,就會發(fā)現(xiàn)我們可以通過url向服務(wù)器進(jìn)行傳參了!
在這里插入圖片描述

我們在使用POST方法試一試,POST方法需要再請求的正文中加入?yún)?shù):
在這里插入圖片描述
這樣服務(wù)器會得到一個請求,這個請求正文中包含了傳入的參數(shù)!
在這里插入圖片描述
總結(jié):

  • GET方法一般用來獲取靜態(tài)資源,也可以通過URL向服務(wù)器傳遞參數(shù)。
  • POST方法可以通過http請求的正文來進(jìn)行參數(shù)的傳遞。
  • URL傳參,參數(shù)的體量一定不大;正文傳參,參數(shù)的體量可以很大!

3.3 處理GET和POST參數(shù)

但是在用戶的實(shí)際使用中,用戶不可能像POSTMAN一樣可以手動選擇請求方法,那么實(shí)際應(yīng)用中,是通過前端的form表單完成GET和POST請求!

    <div><!-- 默認(rèn)就是GET --><form action="/login" method="POST">用戶名: <input type="text" name="username" value="."><br>密碼: <input type="password" name="userpasswd" value=""><br><input type="submit" value="提交"></form></div>

這里最后使用POST方法,因?yàn)槭褂肎ET方法,會將參數(shù)加入到URL中,這樣其他人可以就能夠看到用戶和密碼了,這樣可不行!
在這里插入圖片描述
那么服務(wù)器如何處理參數(shù)呢?這個action="/login" 又是什么含義呢?

  • 當(dāng)使用POST方法時,參數(shù)是寫在正文中的,那么直接直接按照規(guī)則進(jìn)行解析就可以了!
  • 如果使用GET方法,參數(shù)是加在URL中的。如果不做處理,會影響我們后續(xù)的很多操作,所以需要對URL進(jìn)行處理!將真正的URL提取出來,并在正文中儲存參數(shù)!
        // 解析參數(shù) --- 忽略大小寫進(jìn)行比較if (strcasecmp(_method.c_str(), "GET") == 0){//尋找 ?auto pos = _url.find(arg_sep);//包含?說明帶參數(shù)if(pos != std::string::npos) {_req_body_text = _url.substr(pos + arg_sep.size());_url.resize(pos);}}
    

這樣不管是使用的什么方法傳遞的參數(shù),我們都可以通過正文中獲取參數(shù)了!

接下來我們來看action="/login",這個資源我們并不存在啊?這個action需要怎么處理呢?

我們在httpserver中加入一系列的服務(wù)名稱與服務(wù)函數(shù)的哈希對應(yīng)。

using func_t = std::function<HttpResponse(HttpRequest)>;std::unordered_map<std::string , func_t> server_list;void InsertService(const std::string servicename , func_t f){//加入網(wǎng)絡(luò)根目錄!std::string s = prefixpath + servicename;_server_list[s] = f;}

那么對于"/login"我們可以插入一個:

hserver.InsertService("/login" , login);

那么服務(wù)器可以在處理請求之后,進(jìn)行特殊處理。識別出來action是"/login"時,就可以去執(zhí)行func_t函數(shù),然后可以返回對應(yīng)的應(yīng)答!

        if (hreq.Path() == "wwwroot/redir"){// 進(jìn)行重定向LOG(DEBUG, "進(jìn)行重定向!!!\n");//...}else if (!hreq.GetRequestBody().empty()){if (IsServiceExists(hreq.Path())){resp = _server_list[hreq.Path()](hreq);}}

這樣就實(shí)現(xiàn)了對action的處理!!!所以http不光可以處理靜態(tài)資源,也可以處理函數(shù)!

我們就可以設(shè)計(jì)一個處理login的方法:


HttpResponse Login(HttpRequest &req)
{HttpResponse resp;std::cout << "外部已經(jīng)拿到了參數(shù)了: " << std::endl;req.GetRequestBody();std::cout << "####################### " << std::endl;resp.AddCode(200, "OK");resp.AddBody("<html><h1>result done!</h1></html>");// username=helloworld&userpasswd=123456//可以進(jìn)行很多種的操作!// 1. pipe// 2. dup2// 3. fork();// 4. 其他進(jìn)程執(zhí)行 -> exec* -> python, PHP, 甚至是Java!return resp;
}

這樣我們能處理不同的action了:
在這里插入圖片描述
通過這種方式,我們可以通過回調(diào)函數(shù)func_t進(jìn)行可以進(jìn)行很多操作了:

  1. pipe創(chuàng)建管道
  2. dup2進(jìn)行重定向
  3. fork創(chuàng)建子進(jìn)程
  4. exec*系列進(jìn)行進(jìn)程替換

因?yàn)镃++語言處理業(yè)務(wù)并不擅長,但是c++處理底層十分快速!所以我們可以通過管道或者新的進(jìn)程將數(shù)據(jù)交給python或者java這樣的web語言來處理,然后在將數(shù)據(jù)返回給服務(wù)器,服務(wù)器處理好之后將http應(yīng)答交給客戶端!
這樣服務(wù)器中各種語言的關(guān)系我們也就大概了解了!!!

我們可以來看一個瀏覽器的實(shí)例:
在這里插入圖片描述
其中的https://cn.bing.com/search?q=helloworld,我們可以大致了解其中的原理:

  1. /s應(yīng)該就是search服務(wù),告訴服務(wù)器去執(zhí)行搜索服務(wù),這個服務(wù)不確定是什么語言進(jìn)行的!
  2. 參數(shù)q=helloworld,是使用GET方法傳給服務(wù)器的!也就是我們要搜索的內(nèi)容!

通過F12查看頁面信息我們也能找到對應(yīng)的form表單:
在這里插入圖片描述
這里的action就是/search

http://www.risenshineclean.com/news/7926.html

相關(guān)文章:

  • wordpress 制作portfolioseo管理與優(yōu)化期末試題
  • gta5買別墅的網(wǎng)站正在建設(shè)企業(yè)培訓(xùn)機(jī)構(gòu)哪家最好
  • 鄭州做網(wǎng)站公司有多少泰州網(wǎng)站建設(shè)優(yōu)化
  • 做網(wǎng)站別名解析的目的是什么友情鏈接交換形式
  • 黑龍江做網(wǎng)站的公司seo咨詢推廣找推推蛙
  • 租服務(wù)器的網(wǎng)站北京seo關(guān)鍵詞優(yōu)化外包
  • 網(wǎng)站建設(shè)時間如何查詢網(wǎng)店推廣營銷方案
  • 網(wǎng)站建設(shè) 流程網(wǎng)站建設(shè)的技術(shù)支持
  • 安全無毒做網(wǎng)站網(wǎng)絡(luò)推廣策劃案
  • 網(wǎng)站截圖怎么做網(wǎng)推app怎么推廣
  • 重慶網(wǎng)站優(yōu)化服務(wù)優(yōu)化關(guān)鍵詞排名提升
  • 永久免費(fèi)erp長沙百度網(wǎng)站排名優(yōu)化
  • 網(wǎng)站建設(shè)寬帶seo優(yōu)化排名百度教程
  • 北京市順義區(qū)住房和建設(shè)委員會網(wǎng)站自助建站免費(fèi)建站平臺
  • 毛片a做片在線觀看網(wǎng)站有哪些鄭州seo優(yōu)化公司
  • 河南省建設(shè)工程一體化平臺常州seo招聘
  • wordpress+魅族天津債務(wù)優(yōu)化公司
  • 淘客怎么做推廣網(wǎng)站電商運(yùn)營是做什么的
  • 完整的活動策劃方案seo外鏈推廣工具下載
  • 做網(wǎng)站多久能盈利營銷咨詢顧問
  • 好網(wǎng)站目錄汽車軟文廣告
  • php做購物網(wǎng)站武漢seo首頁優(yōu)化報(bào)價
  • 做英文企業(yè)網(wǎng)站濟(jì)南網(wǎng)站seo公司
  • 求生之路2怎么做非官方網(wǎng)站東莞做網(wǎng)站公司
  • 分類網(wǎng)站怎么做seo百度ocpc如何優(yōu)化
  • 專門做淘寶優(yōu)惠券的網(wǎng)站醫(yī)院線上預(yù)約
  • 廈門市網(wǎng)站建設(shè)公司廈門百度推廣開戶
  • 北京微信公眾號仁茂網(wǎng)絡(luò)seo
  • 營銷型網(wǎng)站策劃設(shè)計(jì)銀川seo優(yōu)化
  • 做網(wǎng)站首頁站長工具使用方法