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--
最后感謝每一個認真閱讀我文章的人,看著粉絲一路的上漲和關注,禮尚往來總是要有的,雖然不是什么很值錢的東西,如果你用得到的話可以直接拿走!
軟件測試面試文檔
我們學習必然是為了找到高薪的工作,下面這些面試題是來自阿里、騰訊、字節等一線互聯網大廠最新的面試資料,并且有字節大佬給出了權威的解答,刷完這一套面試資料相信大家都能找到滿意的工作。
?