日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 综合教程 >内容正文

综合教程

Http请求方法之Get、Post原理

發(fā)布時(shí)間:2023/12/13 综合教程 30 生活家
生活随笔 收集整理的這篇文章主要介紹了 Http请求方法之Get、Post原理 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

什么是HTTP?

  HTTP,即超文本傳輸協(xié)議,是一種實(shí)現(xiàn)客戶端和服務(wù)器之間通信的響應(yīng)協(xié)議,它是用作客戶端和服務(wù)器之間的請(qǐng)求。

  客戶端(瀏覽器)會(huì)向服務(wù)器提交HTTP請(qǐng)求;然后服務(wù)器向客戶端返回響應(yīng);其中響應(yīng)包含有關(guān)請(qǐng)求的狀態(tài)信息,還可能包含請(qǐng)求的內(nèi)容。

HTTP的常用方法

  1、GET方法

  GET方法用于使用給定的URI從給定服務(wù)器中檢索信息,即從指定資源中請(qǐng)求數(shù)據(jù)。使用GET方法的請(qǐng)求應(yīng)該只是檢索數(shù)據(jù),并且不應(yīng)對(duì)數(shù)據(jù)產(chǎn)生其他影響。

  在GET請(qǐng)求的URL中發(fā)送查詢字符串(名稱/值對(duì)),需要這樣寫:/test/demo_form.php?name1=value1&name2=value2

  說(shuō)明:GET請(qǐng)求是可以緩存的,我們可以從瀏覽器歷史記錄中查找到GET請(qǐng)求,還可以把它收藏到書簽中;且GET請(qǐng)求有長(zhǎng)度限制,僅用于請(qǐng)求數(shù)據(jù)(不修改)。

  注:因GET請(qǐng)求的不安全性,在處理敏感數(shù)據(jù)時(shí),絕不可以使用GET請(qǐng)求。

  2、POST方法

  POST方法用于將數(shù)據(jù)發(fā)送到服務(wù)器以創(chuàng)建或更新資源,它要求服務(wù)器確認(rèn)請(qǐng)求中包含的內(nèi)容作為由URI區(qū)分的Web資源的另一個(gè)下屬。

  POST請(qǐng)求永遠(yuǎn)不會(huì)被緩存,且對(duì)數(shù)據(jù)長(zhǎng)度沒(méi)有限制;我們無(wú)法從瀏覽器歷史記錄中查找到POST請(qǐng)求。

  3、HEAD方法

  HEAD方法與GET方法相同,但沒(méi)有響應(yīng)體,僅傳輸狀態(tài)行和標(biāo)題部分。這對(duì)于恢復(fù)相應(yīng)頭部編寫的元數(shù)據(jù)非常有用,而無(wú)需傳輸整個(gè)內(nèi)容。

  4、PUT方法

  PUT方法用于將數(shù)據(jù)發(fā)送到服務(wù)器以創(chuàng)建或更新資源,它可以用上傳的內(nèi)容替換目標(biāo)資源中的所有當(dāng)前內(nèi)容。

  它會(huì)將包含的元素放在所提供的URI下,如果URI指示的是當(dāng)前資源,則會(huì)被改變。如果URI未指示當(dāng)前資源,則服務(wù)器可以使用該URI創(chuàng)建資源。

  5、DELETE方法

  DELETE方法用來(lái)刪除指定的資源,它會(huì)刪除URI給出的目標(biāo)資源的所有當(dāng)前內(nèi)容。

  6、CONNECT方法

  CONNECT方法用來(lái)建立到給定URI標(biāo)識(shí)的服務(wù)器的隧道;它通過(guò)簡(jiǎn)單的TCP / IP隧道更改請(qǐng)求連接,通常實(shí)使用解碼的HTTP代理來(lái)進(jìn)行SSL編碼的通信(HTTPS)。

  7、OPTIONS方法

  OPTIONS方法用來(lái)描述了目標(biāo)資源的通信選項(xiàng),會(huì)返回服務(wù)器支持預(yù)定義URL的HTTP策略。

  8、TRACE方法

  TRACE方法用于沿著目標(biāo)資源的路徑執(zhí)行消息環(huán)回測(cè)試;它回應(yīng)收到的請(qǐng)求,以便客戶可以看到中間服務(wù)器進(jìn)行了哪些(假設(shè)任何)進(jìn)度或增量。

GET和POST請(qǐng)求都有哪些區(qū)別:

GET請(qǐng)求在URL中傳送的參數(shù)是有長(zhǎng)度限制的,而POST沒(méi)有。
GET比POST更不安全,因?yàn)閰?shù)直接暴露在URL上,所以不能用來(lái)傳遞敏感信息。而POST數(shù)據(jù)不會(huì)顯示在URL中。是放在Request body中。
對(duì)參數(shù)的數(shù)據(jù)類型,GET只接受ASCII字符,而POST沒(méi)有限制。
GET請(qǐng)求參數(shù)會(huì)被完整保留在瀏覽器歷史記錄里;相反,POST請(qǐng)求參數(shù)也不會(huì)被瀏覽器保留。
GET請(qǐng)求只能進(jìn)行url編碼(application/x-www-form-urlencoded),而POST支持多種編碼方式。
GET請(qǐng)求會(huì)被瀏覽器主動(dòng)緩存,而POST不會(huì),除非手動(dòng)設(shè)置。
GET在瀏覽器回退時(shí)是無(wú)害的,而POST會(huì)再次提交請(qǐng)求。

Get請(qǐng)求有Request body么?如果有的話參數(shù)可以像Post請(qǐng)求一樣放在里面么?

  HTTP只是個(gè)行為準(zhǔn)則,而GET和POST本質(zhì)上就是TCP鏈接,并無(wú)差別。但是由于HTTP的規(guī)定和瀏覽器/服務(wù)器的限制,導(dǎo)致他們?cè)趹?yīng)用過(guò)程中體現(xiàn)出一些不同。

  如果給GET加上request body,給POST帶上url參數(shù),技術(shù)上是完全行的通的。

  如果你用GET服務(wù),在request body偷偷藏了數(shù)據(jù),不同服務(wù)器的處理方式也是不同的,有些服務(wù)器會(huì)幫你讀出數(shù)據(jù),有些服務(wù)器直接忽略。所以,雖然GET可以帶request body,卻不能保證一定能被接收到。

URL中傳送參數(shù)的長(zhǎng)度限制在Get和Post中都是怎么樣的呢?

  業(yè)界不成文的規(guī)定是,(大多數(shù))瀏覽器通常都會(huì)限制url長(zhǎng)度在2K個(gè)字節(jié),而(大多數(shù))服務(wù)器最多處理64K大小的url,超過(guò)的部分,恕不處理。如果你用GET服務(wù),在request body偷偷藏了數(shù)據(jù),不同服務(wù)器的處理方式也是不同的,有些服務(wù)器會(huì)幫你卸貨,讀出數(shù)據(jù),有些服務(wù)器直接忽略。

  所以,雖然GET可以帶request body,卻不能保證一定能被接收到

那GET 方法參數(shù)寫法是固定的嗎?

  在約定中,我們的參數(shù)是寫在 ? 后面,用 & 分割。如下:http://ip:port/project/getUserInfo?username=chenhhaha&age=26&sex=2

  我們知道,解析報(bào)文的過(guò)程是通過(guò)獲取 TCP 數(shù)據(jù),用正則等工具從數(shù)據(jù)中獲取 Header 和 Body,從而提取參數(shù)。

  比如header請(qǐng)求頭中添加token,來(lái)驗(yàn)證用戶是否登錄等權(quán)限問(wèn)題。

  也就是說(shuō),我們可以自己約定參數(shù)的寫法,只要服務(wù)端能夠解釋出來(lái)就行,萬(wàn)變不離其宗。

有人說(shuō)POST 比 GET 安全,因?yàn)閿?shù)據(jù)在地址欄上不可見(jiàn)

  從傳輸?shù)慕嵌葋?lái)說(shuō),他們都是不安全的,因?yàn)?HTTP 在網(wǎng)絡(luò)上是明文傳輸?shù)模灰诰W(wǎng)絡(luò)節(jié)點(diǎn)上捉包,就能完整地獲取數(shù)據(jù)報(bào)文。

  其實(shí),要想安全傳輸,就只有加密,也就是 HTTPS。

Get、Post請(qǐng)求發(fā)送的數(shù)據(jù)包有什么不同嗎?

  GET請(qǐng)求時(shí)產(chǎn)生一個(gè)TCP數(shù)據(jù)包;POST請(qǐng)求時(shí)產(chǎn)生兩個(gè)TCP數(shù)據(jù)包。

GET:瀏覽器會(huì)把http header和data一并發(fā)送出去,服務(wù)器響應(yīng)200(返回?cái)?shù)據(jù))
POST:瀏覽器先發(fā)送header,服務(wù)器響應(yīng)100 continue,瀏覽器再發(fā)送data,服務(wù)器響應(yīng)200 OK(返回?cái)?shù)據(jù))

  因?yàn)镻OST需要兩步,理論上時(shí)間上消耗的要多一點(diǎn),看起來(lái)GET比POST更有效,但并不是。

GET與POST都有自己的語(yǔ)義,不能隨便混用。
據(jù)研究,在網(wǎng)絡(luò)環(huán)境好的情況下,發(fā)一次包的時(shí)間和發(fā)兩次包的時(shí)間差別基本可以無(wú)視。而在網(wǎng)絡(luò)環(huán)境差的情況下,兩次包的TCP在驗(yàn)證數(shù)據(jù)包完整性上,有非常大的優(yōu)點(diǎn)。
并不是所有瀏覽器都會(huì)在POST中發(fā)送兩次包,F(xiàn)irefox就只發(fā)送一次。我去年用Chrome瀏覽器測(cè)試發(fā)現(xiàn)也是只發(fā)送一次,所以我認(rèn)為Get、POST性能差可以人為忽略。

總結(jié)

以上是生活随笔為你收集整理的Http请求方法之Get、Post原理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。