国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

HTTP 中 POST 提交數(shù)據(jù)的四種方式詳解

這篇具有很好參考價值的文章主要介紹了HTTP 中 POST 提交數(shù)據(jù)的四種方式詳解。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

HTTP 中 POST 提交數(shù)據(jù)的四種方式詳解

首先說一下為什么寫這篇文章,以前寫客戶端的時候,要經(jīng)常調(diào)用后端的接口,一般很多公司的接口,都是統(tǒng)一 POST 提交方式

服務(wù)端響應(yīng)的是 JSON 格式字符串,方便統(tǒng)一管理,當(dāng)時對 POST 不太清楚,開始的時候,不覺得有啥

但是真正等到自己寫一個獨立的技術(shù)社區(qū)的時候,也就是?www.helloworld.net?,需要上傳,需要表單提交等

才發(fā)現(xiàn),不懂這些,用到了的時候,很是費勁,很耽誤時間。

下面就當(dāng)是復(fù)習(xí)了,學(xué)習(xí)一下?GET?,?POST?這兩種最常用的提交方式

HTTP 提交方式有哪些?

HTTP 請求方法有 9 種,分別是

序號 方法 描述
1 GET 請求指定的頁面信息,并返回實體主體。
2 HEAD 類似于 GET 請求,只不過返回的響應(yīng)中沒有具體的內(nèi)容,用于獲取報頭
3 POST 向指定資源提交數(shù)據(jù)進行處理請求(例如提交表單或者上傳文件)。數(shù)據(jù)被包含在請求體中。POST 請求可能會導(dǎo)致新的資源的建立和 / 或已有資源的修改。
4 PUT 從客戶端向服務(wù)器傳送的數(shù)據(jù)取代指定的文檔的內(nèi)容。
5 DELETE 請求服務(wù)器刪除指定的頁面。
6 CONNECT HTTP/1.1 協(xié)議中預(yù)留給能夠?qū)⑦B接改為管道方式的代理服務(wù)器。
7 OPTIONS 允許客戶端查看服務(wù)器的性能。
8 TRACE 回顯服務(wù)器收到的請求,主要用于測試或診斷。
9 PATCH 是對 PUT 方法的補充,用來對已知資源進行局部更新 。

最常用的還是?GET?,?POST

HTTP 的組成部分

我們知道,http 是一個通信協(xié)議,啥叫通信協(xié)議,通信嘛,就是兩個人要溝通,協(xié)議嘛,就是怎么溝通

比如我說 A,你知道我餓了想吃東西了,我再說?A 米飯, 你就知道我餓了,并且想吃米飯了。

對的,協(xié)議就是雙方提前商量好的溝通的內(nèi)容的格式

HTTP 通信協(xié)議就是?HTTP客戶端和?HTTP服務(wù)端?雙方規(guī)定好的格式

那么這個 HTTP 消息,有哪幾部分組成呢

很簡單,HTTP 消息包含兩部分

  • 請求頭
  • 請求體

比如我們在瀏覽器中發(fā)一個請求?www.helloworld.net?回車,此時我們發(fā)的是 GET 請求

那么請求頭是:

GET / HTTP/2
Host: www.helloworld.net
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:106.0) Gecko/20100101 Firefox/106.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Cookie: Hm_lvt_c7e77fd22dddf4a169b8d6f4807c5a4c=1668406379; Hm_lpvt_c7e77fd22dddf4a169b8d6f4807c5a4c=1668406379
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: none
Sec-Fetch-User: ?1
If-None-Match: "d696-1nnZwKI6/LZalqvEzQx9IFil/tw"
TE: trailers

注意:?HTTP 的 GET 請求,是沒有請求體的,這也就是為什么有些公司統(tǒng)一封裝請求為 POST, 而不是 GET 的原因了

因為 POST 是有請求體的,可以帶大量的數(shù)據(jù),GET 因為沒有請求體,攜帶參數(shù)只能放在 URL 中,能帶的數(shù)據(jù)量是比較少的。

GET 請求方法

GET?訪求方法最常用,也是最簡單的一種,像其語義一樣,GET 就是獲取文件的意思

所以 GET 請求就是獲取服務(wù)器上的某個資源 ,使用也很簡單,我們記住下面兩點就行了

  • GET 傳參數(shù)只能在 url 后面帶上參數(shù),比如?http://www.helloworld.net?name=tom&age=23

? 服務(wù)器收到請求就可以解析出來 url 后面帶的參數(shù)了,name = tom , age = 23

  • 還有一點,很少有人說,就是上面我們說的,GET 請求是沒有請求體的

下面我們重點看一下 POST 請求

POST 請求方法

POST 是提交的意思,如果我們需要向服務(wù)器提交一些數(shù)據(jù),就可以使用 POST 方法

雖然 POST 是提交的意思,協(xié)議規(guī)定的也是用 POST 提交數(shù)據(jù),但是現(xiàn)在很多公司并沒有這樣搞

查詢也會用 POST,其實它只是個單詞,服務(wù)端收到 請求后,是查詢資源,還是刪除資源,還是提交

都可以的,只是看你們公司前后端怎么規(guī)定即可。

下面我們看看 POST 有哪幾種提交數(shù)據(jù)的方式

第一種?application/x-www-form-urlencoded

這也是 POST 默認(rèn)的一種方式 ,對應(yīng)的請求頭中的?Content-Type?為?application/x-www-form-urlencoded

我們從瀏覽器中抓取?www.helloworld.net?上的幾個請求方式,為例,如下

## 請求頭
POST /v1/special/getSpecialCateList HTTP/2
Host: tiger-api.helloworld.net
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:106.0) Gecko/20100101 Firefox/106.0
Accept: application/json, text/plain, */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Content-Type: application/x-www-form-urlencoded
Authorization: 
token: 
ts: 1668407094
sign: d41d8cd98f00b204e9800998ecf8427e
deviceType: pc
Origin: https://www.helloworld.net
Connection: keep-alive
Referer: https://www.helloworld.net/
Cookie: Hm_lvt_c7e77fd22dddf4a169b8d6f4807c5a4c=1668406379; Hm_lpvt_c7e77fd22dddf4a169b8d6f4807c5a4c=1668406398
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-site
Content-Length: 0

## 請求體
action=10&pageNum=1&pageSize=10&uuid=15139897

此種方式,一般是提交 key, value 的值。

第二種:multipart/form-data

我之前把這種當(dāng)作了上面的那種,后來寫文件上傳的時候,查了一下,原來 不是

這種提交方法一般是上傳文件用的多。通常是用在客戶端向服務(wù)端傳送大文件數(shù)據(jù),如:圖片或者文件。

首先來解釋下什么它的編碼方式,首先會生成一個很長的?boundary?字符串分界線,表明下面的都是表單內(nèi)容,然后緊接著跟的是表單中的第一個鍵值對中的名稱,而后一個換行,跟著值。然后再生成一個?boundary?字符串分界線,用于分割不同的鍵值。之后就重復(fù)以上操作,詳細(xì)的流程請看下方的例子。

同樣我們以?www.helloworld.net?舉例,我們從里面找個接口,抓取一下,看看

# 請求頭
POST http://www.helloworld.net/xyz HTTP/1.1
Host: www.helloworld.net
User-Agent: python-requests/2.24.0
Accept-Encoding: gzip, deflate
Accept: */*
Content-Type: multipart/form-data; boundary=e42346452as650adf2345fadade
Content-Length: 222
Connection: keep-alive

# 請求體
--e42346452as650adf2345fadade
Content-Disposition: form-data; name="field0"

value1
--e42346452as650adf2345fadade
Content-Disposition: form-data; name="field1"

value2
--e42346452as650adf2345fadade--
Content-Disposition: form-data; name="field2"; filename="filename"
Content-Type: text/plain

--e42346452as650adf2345fadade--

從上面我們可以知道,在請求頭中的?Content-Type?中,有一個?boundary=e42346452as650adf2345fadade

這個 boundary 后面的字符串都是隨機生成的。用于請求體中數(shù)據(jù)的分段的。

其實就是個分隔符的作用。

第三種:application/json

這種就是我們現(xiàn)在用的最多的了,而且也非常方便

在請求頭中設(shè)置?content-type=application/json, 就表明請求體中的內(nèi)容格式為 json 格式

同樣的,服務(wù)端在響應(yīng)的時候,順應(yīng)頭中也會添加一個?content-type=application/json

同樣的也是告訴客戶端,我響應(yīng)給你的響應(yīng)體中的內(nèi)容,格式同樣為 json 格式

同的樣我們也參照?www.helloworld.net?中的一個請求,如下

## 請求頭
POST /v1/special/getSpecialList HTTP/2
Host: tiger-api.helloworld.net
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:106.0) Gecko/20100101 Firefox/106.0
Accept: application/json, text/plain, */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Content-Type: application/json
Authorization: 
token: 
ts: 1668408188
sign: 08fab32346193fa92037b5ca5f9ed592
deviceType: pc
Content-Length: 30
Origin: https://www.helloworld.net
Connection: keep-alive
Referer: https://www.helloworld.net/
Cookie: Hm_lvt_c7e77fd22dddf4a169b8d6f4807c5a4c=1668406379,1668408042,1668408051; Hm_lpvt_c7e77fd22dddf4a169b8d6f4807c5a4c=1668408051
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-site
TE: trailers

## 請求體
action=10&pageNum=1&sortType=0

我們看一下響應(yīng)體:

{
  "code": 1,
  "data": {
    "hasMore": false,
    "list": [
      {
        "uuid": "5441523000",
        "title": "區(qū)塊鏈原理和應(yīng)用",
        "totalCount": 0,
        "chapterCount": 1,
        "readCount": 0,
        "subscribeCount": 1,
        "createTime": "0001-01-01T00:00:00Z",
        "status": 0,
        "profile": "1037883613",
        "nicker": "小天",
        "avatar": "https://img-hello-world.oss-cn-beijing.aliyuncs.com/imgs/d04d513fbea19f6cb7c3b4beee3c7f5e.jfif",
        "subscribed": false
      },
      {
        "uuid": "bbatgp",
        "title": "C語言編程(初級)",
        "totalCount": 0,
        "chapterCount": 19,
        "readCount": 2938,
        "subscribeCount": 1,
        "createTime": "0001-01-01T00:00:00Z",
        "status": 0,
        "profile": "80662724",
        "nicker": "Suzhou",
        "avatar": "https://img-hello-world.oss-cn-beijing.aliyuncs.com/imgs/d04d513fbea19f6cb7c3b4beee3c7f5e.jfif",
        "subscribed": false
      }
    ]
  },
  "message": "獲取數(shù)據(jù)成功",
  "errMessage": ""
}

第四種:text/xml

這個一直沒有遇到過,很少用

其實就是請求消息中,請求體中的內(nèi)容格式是純文本 xml 格式

此種我們就不作介紹

有興趣的可以下面自己查資料

綜上所述,HTTP 的 POST 四種方法以及 GET 的簡單介紹,我們總結(jié)如下:

  • GET 請求只能在 URL 中攜帶參數(shù),別說請求頭中也能帶參數(shù),請求頭中帶參數(shù),是所有的方法都可以的,不算是 GET 方法的

  • GET 請求是沒有請求體的

  • POST 提交數(shù)據(jù)有四種方式,分別如下:

      1. `application/x-www-form-urlencoded` , 也是默認(rèn)的方式,主要提交的數(shù)據(jù)是key, value 形式的
      2. `multipart/form-data` ,此種方式 是客戶端向服務(wù)端提交大數(shù)據(jù)用的,一般上傳文件等用到。
    

? 注意這種方式,會在請求頭中生成一個 boundary 字段,其對應(yīng)的值是一個隨機生成的字符串,用于分隔請求體中的數(shù)據(jù)用的

  1. application/json?此種方式,用的最多,也是最常用的方式,不過我在寫?www.helloworld.net?的過程中,很少用這種方式

    因為這種方式有一個缺點,就是服務(wù)端在解析的時候,需要創(chuàng)建大量的結(jié)構(gòu)體或者類。所以最后選擇了第一種的提交方式

  2. text/xml?這種就不怎么用了,請求體中是 xml 格式

簡單的介紹了一下 HTTP 的 GET,POST 的一些知識,希望對你們有用。文章來源地址http://www.zghlxwxcb.cn/news/detail-477131.html

到了這里,關(guān)于HTTP 中 POST 提交數(shù)據(jù)的四種方式詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • MySQL入門必備:Linux中部署MySQL環(huán)境的四種方式詳解

    MySQL入門必備:Linux中部署MySQL環(huán)境的四種方式詳解

    目錄 一、倉庫安裝 二、本地安裝 三、Docker中安裝 四、源碼安裝 首先需要下載mysql軟件包: 1、進入MySQL官網(wǎng) 2、進入MySQL社區(qū)版下載 3、使用yum方式下載MySQL 4、下載對應(yīng)版本的軟件包 5、這里可以不登錄直接下載軟件包 6、復(fù)制下載鏈接 7、然后進入到linux命令行中使用命令下

    2024年02月07日
    瀏覽(23)
  • Flutter 中數(shù)據(jù)存儲的四種方式

    Flutter 中數(shù)據(jù)存儲的四種方式

    在 Flutter 中,存儲是指用于本地和遠(yuǎn)程存儲和管理數(shù)據(jù)的機制。以下是 Flutter 中不同存儲選項的概述和示例。 Shared Preferences(本地鍵值存儲) Shared Preferences 是一種在本地存儲少量數(shù)據(jù)(例如用戶首選項或設(shè)置)的簡單方法。 它適合以持久的方式存儲鍵值對。 shared_preferenc

    2024年02月03日
    瀏覽(16)
  • python接口自動化(十)--post請求四種傳送正文方式(詳解)

    python接口自動化(十)--post請求四種傳送正文方式(詳解)

    post請求我在python接口自動化(八)--發(fā)送post請求的接口(詳解)已經(jīng)講過一部分了,主要是發(fā)送一些較長的數(shù)據(jù),還有就是數(shù)據(jù)比較安全等。我們要知道post請求四種傳送正文方式首先需要先了解一下常見的四種編碼方式: HTTP 協(xié)議規(guī)定 POST 提交的數(shù)據(jù)必須放在消息主體(e

    2024年02月04日
    瀏覽(14)
  • application/json-常見的post提交數(shù)據(jù)的方式

    在http協(xié)議中規(guī)定了GET、HEAD、POST、PUT、DELETE、CONNECT 等請求方式,其中比較常用的就是post和get,其中post用來向服務(wù)器提交數(shù)據(jù),post只規(guī)定了提交的數(shù)據(jù)必須放在請求的主體中,但是并沒有規(guī)定傳輸數(shù)據(jù)的編碼方式。比較主流的有如下的幾種編碼方式。 1. application/x-www-form-url

    2024年02月13日
    瀏覽(18)
  • HTTP請求方法之POST請求的三種常見數(shù)據(jù)提交格式

    HTTP請求方法之POST請求的三種常見數(shù)據(jù)提交格式

    目錄 ?? application/x-www-form-urlencoded ?? multipart/form-data ?? application/json ?? 本文所講的 POST 請求是 HTTP/1.1 協(xié)議中規(guī)定的眾多 HTTP 請求方法的其中最常用的一個。一般使用 POST 請求方法向服務(wù)器發(fā)送數(shù)據(jù)(主要是一些創(chuàng)建更新操作),本文討論的是 POST 請求方法常用的三種數(shù)據(jù)

    2024年02月09日
    瀏覽(19)
  • View 的四種 OnClick 方式

    View 的四種 OnClick 方式

    嗨嘍,大家好!今天呢,我跟大家聊一聊Android 的View 的點擊事件onClick 。額,有點拗口(^_^) 。 看過我的文章的人可能會好奇,你怎么寫Android的文章了???說起這啊,就是我的血淚史了,此處省略一萬字.................... 廢話不多說,讓我們代碼走起,風(fēng)里來,雨里去,唯有代

    2023年04月15日
    瀏覽(17)
  • STM32的四種開發(fā)方式

    STM32的四種開發(fā)方式

    首先看下ST官方給出的四種開發(fā)方式的比較 寄存器開發(fā) 寄存器編程對于從51等等芯片過渡過來的小伙伴并不陌生,不管你是什么庫,最終操作的還是寄存器,所以對于標(biāo)準(zhǔn)庫、HAL庫、LL庫都是在寄存器上的編程,所以可以直接在各種庫中直接操作寄存器。 但寄存器開發(fā)方法到

    2024年02月11日
    瀏覽(24)
  • CSS中的四種定位方式

    CSS中的四種定位方式

    在CSS中定位有以下4種: 靜態(tài)定位 - static 相對定位 - relative 絕對定位 - absolute 固定定位 - fixed 靜態(tài)定位是css中的默認(rèn)定位方式,也就是沒有定位。在此定位方式中設(shè)置:top,bottom,left,right,z-index 這些屬性都是無效的。 相對位置前的位置: 相對位置后的位置: 可以看到該

    2024年02月08日
    瀏覽(19)
  • JavaScript中的四種枚舉方式

    JavaScript中的四種枚舉方式

    字符串和數(shù)字具有無數(shù)個值,而其他類型如布爾值則是有限的集合。 一周的日子(星期一,星期二,...,星期日),一年的季節(jié)(冬季,春季,夏季,秋季)和基本方向(北,東,南,西)都是具有有限值集合的例子。 當(dāng)一個變量有一個來自有限的預(yù)定義常量的值時,使用

    2024年02月03日
    瀏覽(24)
  • 創(chuàng)建多線程的四種方式

    創(chuàng)建多線程的四種方式

    ① 創(chuàng)建一個類繼承 Thread 類,重寫 run() 方法 ② 調(diào)用 start() 方法啟動線程 例: ① 創(chuàng)建類實現(xiàn) Runnable 接口,重寫 run() 方法 ② 以實現(xiàn)類作為構(gòu)造器參數(shù),創(chuàng)建一個線程( Thread )對象 ③ 調(diào)用 start() 方法啟動線程 例 注意:實現(xiàn)Runnable接口方式中,調(diào)用的不是Thread類的run()方法

    2024年02月10日
    瀏覽(19)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包