API測試基礎之http協議

http簡介:
http(超文本傳輸協議)是一個簡單的請求-響應協議,它通常運行在TCP(傳輸控制協議)之上。它指定了客戶端可能發送給服務器什么樣的消息以及得到什么樣的響應。請求和響應消息的頭以ASCII碼形式給出;而消息內容則具有一個類似MIME的格式。這個簡單模型是早期Web成功的有功之臣,因為它使得開發和部署是那么的直截了當。(百度百科)

http傳輸過程:
http報文結構:
1.請求行

2.請求頭

3.空行

4.消息主體

下圖為http請求的報文結構

?下圖為http響應報文結構

請求行
格式為:

Method Request-URI HTTP-Version 結尾符

結尾符一般用\r\n

請求頭
通用報頭

既可以出現在請求報頭,也可以出現在響應報頭中

Date:表示消息產生的日期和時間

Connection:允許發送指定連接的選項,例如指定連接是連續的,或者指定“close”選項,通知服務器,在響應完成后,關閉連接

Cache-Control:用于指定緩存指令,緩存指令是單向的(響應中出現的緩存指令在請求中未必會出現),且是獨立的(一個消息的緩存指令不會影響另一個消息處理的緩存機制)

請求報頭

請求報頭通知服務器關于客戶端求求的信息,典型的請求頭有:

Host:請求的主機名,允許多個域名同處一個IP地址,即虛擬主機

User-Agent:發送請求的瀏覽器類型、操作系統等信息

Accept:客戶端可識別的內容類型列表,用于指定客戶端接收那些類型的信息

Accept-Encoding:客戶端可識別的數據編碼

Accept-Language:表示瀏覽器所支持的語言類型

Connection:允許客戶端和服務器指定與請求/響應連接有關的選項,例如這是為Keep-Alive則表示保持連接。

Transfer-Encoding:告知接收端為了保證報文的可靠傳輸,對報文采用了什么編碼方式。

響應報頭

用于服務器傳遞自身信息的響應,常見的響應報頭:

Location:用于重定向接受者到一個新的位置,常用在更換域名的時候

Server:包含可服務器用來處理請求的系統信息,與User-Agent請求報頭是相對應的

實體報頭

實體報頭用來定于被傳送資源的信息,既可以用于請求也可用于響應。請求和響應消息都可以傳送一個實體,常見的實體報頭為:

Content-Type:發送給接收者的實體正文的媒體類型

Content-Lenght:實體正文的長度

Content-Language:描述資源所用的自然語言,沒有設置則該選項則認為實體內容將提供給所有的語言閱讀

Content-Encoding:實體報頭被用作媒體類型的修飾符,它的值指示了已經被應用到實體正文的附加內容的編碼,因而要獲得Content-Type報頭域中所引用的媒體類型,必須采用相應的解碼機制。

Last-Modified:實體報頭用于指示資源的最后修改日期和時間

Expires:實體報頭給出響應過期的日期和時間

空行
http協議規定的格式,一般采用\r\n

消息主體
一般用于http的post method。通過實體報頭規定消息主體的格式內容、

例如 Content-Type=text/plain

該實體報頭規定了消息主體的數據是純文本格式

常見的還有

Content-Type=application/x-www-form-urlencoded,定義為Key=value格式

Content-Type=application/json,定義為序列化為的json字符串

Content-Type= multipart/form-data,定義為表單數據提交,該格式比較復雜,詳細解釋一下。

multipart/form-data

該格式是post的常見提交方式,也就是說是由post方法來組合實現的

使用該提交方法需要規定一個內容分割符用于分割請求體中的多個post的內容,如文件內容和文本內容自然需要分割開來,不然接收方就無法正常解析和還原這個文件了。具體的頭信息如下:

Content-Type: multipart/form-data; boundary=${bound}

其中${bound}是自定義的分隔符,一般情況用一長串不會和業務數據重復的字符串表示 ,例如9431149156168

分割符前面需要加上--

最后的分割符后面也需要加上—

所有的數據請求頭和數據之間都用\r\n\r\n分開,兩個數據間用 --${bound}\r\n分開

響應碼
1XX: 信息提示

2XX: 成功響應

3XX: 重定向

4XX: 客戶端錯誤

5XX: 服務器端錯誤

實例

POST /bucketname HTTP/1.1
Host: Host Server
User-Agent: browser_data
Accept: file_types
Accept-Language: Regions
Accept-Encoding: encoding
Accept-Charset: character_set
Keep-Alive: 300
Connection: keep-alive
Content-Type: multipart/form-data; boundary=9431149156168
Content-Length: 123456
--9431149156168
Content-Disposition: form-data; name="key"<br>
acl
--9431149156168
Content-Disposition: form-data; name="success_action_redirect"<br>
success_redirect
--9431149156168
Content-Disposition: form-data; name="content-Type"<br>
text/plain
--9431149156168
Content-Disposition: form-data; name="x-amz-meta-uuid"<br>
uuid
--9431149156168
Content-Disposition: form-data; name="x-amz-meta-tag"<br>
metadata
--9431149156168--

最后感謝每一個認真閱讀我文章的人,看著粉絲一路的上漲和關注,禮尚往來總是要有的,雖然不是什么很值錢的東西,如果你用得到的話可以直接拿走!

軟件測試面試文檔

我們學習必然是為了找到高薪的工作,下面這些面試題是來自阿里、騰訊、字節等一線互聯網大廠最新的面試資料,并且有字節大佬給出了權威的解答,刷完這一套面試資料相信大家都能找到滿意的工作。

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/207622.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/207622.shtml
英文地址,請注明出處:http://en.pswp.cn/news/207622.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

遠程控制如何賦能智能制造?貝銳向日葵制造業場景案例解析

隨著數字化轉型在制造業的不斷深入&#xff0c;企業在產線端也逐漸投入更多智能化設備&#xff0c;數字化、智能化設備其中一個比較顯著的優勢就是可以依托互聯網實現遠程運維和調試&#xff0c;大大提升產線設備的穩定性和工作效率&#xff1b;而遠程調試運維一個重要的實現方…

人工智能原理復習--搜索策略(一)

文章目錄 上一篇搜索概述一般圖搜索盲目搜索下一篇 上一篇 人工智能原理復習–確定性推理 搜索概述 問題求解分為兩大類&#xff1a;知識貧乏系統&#xff08;依靠搜索技術解決&#xff09;、知識豐富系統&#xff08;依靠推理技術&#xff09; 兩大類搜索技術&#xff1a; …

海思3516DV500下的目標識別算法運行評估,包含yolov7,yolov8

目前在3516DV500下&#xff0c;自己訓練的模型的評估實測結果。根據實際模型會有些許差異。 涉及到技術細節的部分因為商業用途&#xff0c;有部分省略。如需相關技術服務項目合作可私信聯系。 我司推出的目標識別跟蹤模塊&#xff0c;支持熱紅外、可見光主流多光譜視頻輸入與目…

WeiPHP 微信開發平臺 SQL注入漏洞復現

0x01 產品簡介 weiphp 是一個開源,高效,簡潔的微信開發平臺,基于 oneThink 內容管理框架實現。 0x02 漏洞概述 weiphp 微信開發平臺 _send_by_group、 wp_where、 get_package_template等接口處存在 SQL 注入漏洞,攻擊者利用此漏洞可獲取數據庫中的信息(例如,管理員后臺…

三數組最小距離:2020年408算法題

算法思想 算法實現 #define INT_MAX 0x7fffffff //c語言int類型最大值 //計算絕對值 int abs(int a){if(a<0) return -a;else return a; } //判斷a是否為3個數中最小值 bool isMin(int a,int b,int c){if(a<b&&a<c) return true;return false; }//主函數 in…

RepidJson中Writer類、FilewriteStream類、 PrettyWriter類的區別

rapidjson是一個C的JSON解析庫&#xff0c;可以用于解析和序列化JSON數據。 Writer是rapidjson中一種基本的輸出流&#xff0c;用于將JSON數據輸出到字符串或文件中。 FileWriteStream是一個Writer的子類&#xff0c;它專門用于將JSON數據輸出到文件中。相比于普通的Writer&a…

平臺工程文化:軟件開發的創新路徑和協作之道

在快速發展的軟件開發領域&#xff0c;具有前瞻性思維的企業組織正在擁抱平臺工程文化的變革力量。這種創新方法強調創建共享平臺、工具和實踐&#xff0c;使開發人員能夠更快、更高效地交付高質量的軟件。在本文中&#xff0c;我們將深入探討平臺工程文化的核心原則和深遠的好…

C語言期末考試復習PTA數據類型及表達式-分支結構程序-循環結構-數組經典選擇題

目錄 第一章&#xff1a;C語言數據類型和表達式 第一題&#xff1a; 第二題&#xff1a; 第三題&#xff1a; 第四題&#xff1a; 第五題&#xff1a; 第六題&#xff1a; 第七題&#xff1a; 第八題&#xff1a; 第九題&#xff1a; 第二章&#xff1a;分支結構程序…

打包 抖音直播云游戲

抖音直播云游戲 oaid資源中的bcpkix-jdk15to18-1.68.jar與抖音云游戲的資源沖突。 其實資源名稱是一樣的&#xff0c;拷貝時資源名稱有變化。 為解決此問題&#xff0c;需要規范化文件的資源名稱&#xff0c;將.置為_ Error: Command failed: cmd /c echo off && Chc…

NoSuchColumnFamilyException: org.apache.hadoop.hbase.regionserv

問題 在IDEA運行HBASE腳本時出現如下報錯&#xff1a; org.apache.hadoop.hbase.regionserver.NoSuchColumnFamilyException: org.apache.hadoop.hbase.regionserver.NoSuchColumnFamilyException: Column family table does not exist in region hbase:meta,,1.1588230740 i…

Java多線程并發(二)

四種線程池 Java 里面線程池的頂級接口是 Executor&#xff0c;但是嚴格意義上講 Executor 并不是一個線程池&#xff0c;而只是一個執行線程的工具。真正的線程池接口是 ExecutorService。 newCachedThreadPool 創建一個可根據需要創建新線程的線程池&#xff0c;但是在以前…

深入了解數據庫鎖:類型、應用和最佳實踐

目錄 1. 引言 2. 數據庫鎖的基本概念 2.1 悲觀鎖和樂觀鎖 2.2 排他鎖和共享鎖 3. 悲觀鎖的應用場景 3.1 長事務和大事務 3.2 并發修改 3.3 數據庫死鎖 4. 悲觀鎖的最佳實踐 4.1 精細控制鎖的粒度 4.2 避免死鎖 4.3 考慮樂觀鎖 5. 案例分析 5.1 銀行系統的轉賬操作…

【GEE筆記】隨機森林特征重要性計算并排序

隨機森林是一種基于多個決策樹的集成學習方法&#xff0c;可以用于分類和回歸問題。在gee中可以使用ee.Classifier.smileRandomForest()函數來創建一個隨機森林分類器&#xff0c;并用它來對影像進行分類。 隨機森林分類器有一個重要的屬性&#xff0c;就是可以計算每個特征&a…

人工智能虛擬化環境

人工智能虛擬化環境通過模擬、管理和優化計算資源、數據資源和軟件環境&#xff0c;可以為人工智能算法和應用提供更加高效、靈活和可靠的運行平臺。本文將探討人工智能虛擬化環境的概念、技術和應用&#xff0c;并展望其在人工智能領域的未來發展。 首先&#xff0c;人工智能…

LVGL的學習

該LVGL基于LVGL的8.2版本 開關的控件Demo lv_obj_t* switch_obj lv_switch_create(lv_scr_act());lv_obj_set_size(switch_obj, 120, 60);lv_obj_align(switch_obj, LV_ALIGN_CENTER, 0, 0); 對象&#xff1a; 對于這一類對象&#xff0c;他們有共同的屬性的幾個特征。 創建部…

.NET使用分布式網絡爬蟲框架DotnetSpider快速開發爬蟲功能

前言 前段時間有同學在微信群里提問&#xff0c;要使用.NET開發一個簡單的爬蟲功能但是沒有做過無從下手。今天給大家推薦一個輕量、靈活、高性能、跨平臺的分布式網絡爬蟲框架&#xff08;可以幫助 .NET 工程師快速的完成爬蟲的開發&#xff09;&#xff1a;DotnetSpider。 注…

Vue3組件使用問題

Vue3組件學習 文章目錄 Vue3組件學習一、Message 全局提示組件返回數據換行問題二、DatePicker 日期選擇框組件限制選定年份問題 一、Message 全局提示組件返回數據換行問題 問題&#xff1a;使用中發現僅僅通過寫入\n或<br/>&#xff0c;無法實現回車顯示的結果。 解決…

java中synchronized關鍵字的用法

在java編程中&#xff0c;經常需要用到同步&#xff0c;而用得最多的也許是synchronized關鍵字了&#xff0c;下面看看這個關鍵字的用法。因為synchronized關鍵字涉及到鎖的概念&#xff0c;所以先來了解一些相關的鎖知識。java的內置鎖&#xff1a;每個java對象都可以用做一個…

在Pytorch中使用Tensorboard可視化訓練過程

這篇是我對嗶哩嗶哩up主 霹靂吧啦Wz 的視頻的文字版學習筆記 感謝他對知識的分享 本節課我們來講一下如何在pytouch當中去使用我們的tensorboard 對我們的訓練過程進行一個可視化 左邊有一個visualizing models data and training with tensorboard 主要是這么一個教程 那么這里…

Flutter一直 Running Gradle task ‘assembleDebug‘

Flutter升級到3.13.7之后&#xff0c;一直Running Gradle task ‘assembleDebug’&#xff0c;之前運行還沒問題。 試了各種方法&#xff0c;比如添加阿里云鏡像&#xff0c;flutter\packages\flutter_tools\gradle目錄下修改build.gradle.kts文件&#xff0c;都不行。 參考大佬…