1. 程式人生 > >http方法詳解

http方法詳解

HTTP方法

  1. OPTIONS

使用該方法來獲取資源支援的HTTP方法列表,或者ping伺服器。

  • 請求:只有header沒有body。
  • 響應:預設只有header,但是也可以在body中新增內容,比如描述性文字

示例:

# 測試對應資源所支援的方法
OPTIONS /test-options HTTP/1.1
Host: localhost
# 響應
HTTP/1.1 204 No Content
Allow: GET, POST, OPTIONS
# ping伺服器
OPTIONS * HTTP/1.1
Host: localhost
# 響應
HTTP/1.1 204 No Content
  • 安全:是
  • 冪等:是

顯然,它就是一個純粹的資訊讀取的操作,不改變資源的狀態,同時保證冪等性。

  1. GET

該方法用以獲取資源的表述。

  • 請求:只有header,沒有body。
  • 響應:對應請求URI的資源表述,通常帶有body。響應header中的Content-Type,Content-Length,Content-Language,Last-Modified,ETag等應該和響應body的表述一致。
# 請求
GET /hello HTTP/1.1
Host: localhost
# 響應
HTTP/1.1 200 OK
Content-Type: application/xml; charset=UTF-8
Content-Length
: 21 <hello>tester</hello>
  • 安全:是
  • 冪等:是

簡單的資源資訊讀取,不對資源狀態造成影響,保證冪等性。

  1. HEAD

使用該方法可以獲取與GET響應相同的header,但是響應中沒有任何body。

  • 請求:只有header,沒有body。
  • 響應:只有header,沒有body。伺服器不能新增body。
# 請求
GET /hello HTTP/1.1
Host: localhost
# 響應
HTTP/1.1 200 OK
Content-Type: application/xml; charset=UTF-8
Content-Length: 21
  • 安全:是
  • 冪等:是

簡單的資源資訊讀取,不對資源狀態造成影響,保證冪等性。

  1. POST

讓資源在伺服器上執行一系列操作,如建立新資源、更新資源、變更資源等。

  • 請求:一個資源的表述。
  • 響應:一個資源的表述,或是一個重定向指令。如果body中存在表述,則其URI和請求URI不一致,包含一個帶有改資源URI的Content-Location頭。
# 執行動作的請求
POST /prompt/delete HTTP/1.1
Host: localhost
# 響應
HTTP/1.1 204 No Content
# 建立資源的請求
POST /stu/bob HTTP/1.1
Host: localhost
Content-Type: application/xml

<student>
    <name>Bob</name>
    <age>22</age>
</student>
# 響應
HTTP/1.1 201 Created
Location: http://localhost/stu/bob
Content-Location: http://localhost/stu/bob
Content-Type: application/xml

<student>
    <name>Bob</name>
    <age>22</age>
</student>
# 修改資源的請求
POST /stu/bob/modify HTTP/1.1
Host: localhost
Content-Type: application/json

{
    "Name": "Bob",
    "Age": 24
}
# 響應
HTTP/1.1 303 See Other
Location: http://localhost/stu/bob
Content-Type: application/xml

<student>
    <name>Bob</name>
    <age>24</age>
</student>
  • 安全:否
  • 冪等:否

是一個資源寫的操作,改變了資源的狀態,同事HTTP標準設定POST方法為非冪等,也就是說不需要在實現服務端響應方法的時候,我們不需要保證冪等,這也就避免了很多冗餘資訊(我們會在DELETE中看到)。

  1. PUT

完整地更新或替換一個現有資源,也可以用客戶端制定的URI來建立一個新資源。

  • 請求:一個資源的表述。請求的body可以與客戶端後續收到的GET請求一樣,當然,也可以不一樣。在某些情況下,伺服器也可要求客戶端只提供資源的可變部分。
  • 響應:更新的狀態。可在響應中包含被更新資源的完整表述,但是客戶端不能假設響應中包含完整狀態,除非響應有一個Content-Location頭。如果伺服器沒有包含這個頭,客戶端必須提交一個無條件GET請求來獲取更新後的表述,帶有Last-Modified和/或ETag頭。
# 更新資源的請求
PUT /stu/bob HTTP/1.1
Host: localhost
# 響應
HTTP/1.1 204 No Content
# 建立資源的請求
PUT /stu/alice HTTP/1.1
Host: localhost
# 響應
HTTP/1.1 201 Created
Location: http://localhost/stu/alice
Content-Length: 0
  • 安全:否
  • 冪等:是

和POST方法一樣,PUT方法也改變了資源的狀態,所以是非安全的。但是有一點和POST不同,它是冪等的,這是為什麼呢?想想setter函式吧,重複呼叫,只要引數是一樣的,表述就是不變的。

  1. DELETE

使用該方法來刪除資源。對於客戶端而言,資源在成功響應後,就不復存在了。

  • 請求:只有header,沒有body。
  • 響應:成功或失敗。body中可以包含操作的狀態。
# 請求
DELETE /doc/old.txt HTTP/1.1
Host: localhost
# 響應
HTTP/1.1 204 No Content
  • 安全:否
  • 冪等:是

和POST方法一樣,DELETE方法也改變了資源的狀態,所以是非安全的。但是有一點和POST不同,它是冪等的,也就是說,就算是伺服器在前一個請求中已經刪除了資源,它也必須返回200.這就意味著,我們在實現服務端的該方法是,需要跟蹤已經刪除的資源,否則就會返回404的。

  1. TRACE

回顯伺服器接收到的header。支援該方法的伺服器可能存在XST安全隱患。

  • 安全:
  • 冪等:
  • 請求:header與body。
  • 響應:body中包含整個請求訊息。
# 請求
TRACE /trace HTTP/1.1
Host: localhost
Accept: text/html
# 響應
HTTP/1.1 200 OK
Content-Type: message/http
# 空行
TRACE /trace HTTP/1.1
Host: localhost
Accept: text/html

相關推薦

http方法

HTTP方法 OPTIONS 使用該方法來獲取資源支援的HTTP方法列表,或者ping伺服器。 請求:只有header沒有body。響應:預設只有header,但是也可以在body中新增內容,比如描述性文字 示例: # 測試對應資源所支援的方法 OPTIONS /te

HTTP請求方法

請求方法:指定了客戶端想對指定的資源/伺服器作何種操作  下面我們介紹HTTP/1.1中可用的請求方法: 【GET:獲取資源】      GET方法用來請求已被URI識別的資源。指定的資源經伺服器端解析後返回響應內容(也就是說,如果請求的資源是文

49.[Python]使用requests包進行HTTP互動方法

簡介 Python的HTTP包有urllib、urllib2、httplib等,但是都需要了解較多的HTTP原理才能編碼,藉助requests包可以在較高的抽象層次上完成HTTP互動過程的開發。安裝requests使用pip install re

$.ajax()方法

例如 lencod ace 包含 等等 json 返回 用戶名 代碼 jquery中的ajax方法參數總是記不住,這裏記錄一下。 1.url: 要求為String類型的參數,(默認為當前頁地址)發送請求的地址。 2.type: 要求為String類型的參數,請求方式(p

Python的反射機制、hasattr() getattr() setattr() 函數使用方法

對象 tee lin sel __main__ err ace traceback 一個 hasattr(object, name)判斷一個對象裏面是否有name屬性或者name方法,返回BOOL值,有name特性返回True, 否則返回False。需要註意的是name要用

php上傳文件大小限制的方法

mem 限制 upload 文件夾 tro 最大 指定 php上傳文件 配置 打開php.ini,首先找到file_uploads = on ;是否允許通過HTTP上傳文件的開關。默認為ON即是開upload_tmp_dir ;文件上傳至服務器上存儲臨時文件的地方,如果沒指

接口測試工具soapUI的安裝和使用方法

service 技術 key custom media 負載 bmp file text soapUI是一個開源測試工具,通過soap/http來檢查、調用、實現Web Service的功能/負載/符合性測試。 使用soapUI可以非常方便的實現接口的功能測試、穩

Arrays 類的 binarySearch() 數組查詢方法

strong object tro search mage bject 技術分享 eight 獲得 Arrays類的binarySearch()方法,可以使用二分搜索法來搜索指定的數組,以獲得指定對象。該方法返回要搜索元素的索引值。binarySearch()方法提供多種重

HTTP協議(真的很經典)

cnp 運用 web應用 media 服務器端 所有 長度 request bad 轉載:http://e7kan.com/?p=264& 引言 HTTP是一個屬於應用層的面向對象的協議,由於其簡捷、快速的方式,適用於分布式超媒體信息系統。它於1990年提出,經過幾

JavaScript中getBoundingClientRect()方法

script otto java chrome 頁面 支持 urn client fire getBoundingClientRect() 這個方法返回一個矩形對象,包含四個屬性:left、top、right和bottom。分別表示元素各邊與頁面上邊和左邊的距離。

C# Process.Start()方法

stat 字符串 檔案 atd 一個 用戶名 菜單 簡單介紹 run System.Diagnostics.Process.Start(); 能做什麽呢?它主要有以下幾個功能: 1、打開某個鏈接網址(彈窗)。 2、定位打開某個文件目錄。 3、打開系統特殊文件夾,如“控制面板

HTML中javascript的<script>標簽使用方法

mime類型 jsp source 方式 clas 處理 網頁 鏈接 屬性。 原文地址:HTML中javascript的<script>標簽使用方法詳解 只要一提到把JavaScript放到網頁中,就不得不涉及Web的核心語言——HTML。在當初開發javasc

解析xml的4種方法(轉)

項目 目標 源碼 更多 news 大量 優秀 大型 頻繁 http://blog.csdn.net/jzhf2012/article/details/8532873 1. 介紹 1)DOM(JAXP Crimson解析器) DOM是用與平臺和語言無關的方式表

http協議

表單 pos 換行 none 必須掌握 通信 pow print expires HTTP是一個屬於應用層的面向對象的協議,由於其簡捷、快速的方式,適用於分布式超媒體信息系統。它於1990年提出,經過幾年的使用與發展,得到不斷地完善和擴展。目前在WWW中使用的是HTTP/1

php中二維數組排序問題方法

ges cti cmp each ace esc 對數 x11 用法 PHP中二維數組排序,可以使用PHP內置函數uasort() 示例一: 使用用戶自定義的比較函數對數組中的值進行排序並保持索引關聯 回調函數如下:註意回調函數的返回值是負數或者是false的時候,表

SylixOS 調試方法——靜態代碼分析

sylixos 調試方法1. SylixOS調試方法介紹SylixOS 實現了一個功能強大的調試 stub,可在設備或模擬器上在線調試應用程序,RealEvo-IDE 也提供配套的調試插件。目前 RealEvo-IDE 既支持自動推送調試、也支持傳統的手動啟動 gdbserver 的調試方式。在官方公布的使用

python魔法方法

返回 call __init__ and -m 描述 nbsp shift 賦值 文章來源:http://blog.csdn.net/koko66/article/details/42709279 據說,Python 的對象天生擁有一些神奇的方法,它們總被雙下劃線所包圍

PHP利用二叉堆實現TopK-算法的方法

相對 baidu 文本文件 過時 border 數據 http pan set 前言 在以往工作或者面試的時候常會碰到一個問題,如何實現海量TopN,就是在一個非常大的結果集裏面快速找到最大的前10或前100個數,同時要保證 內存和速度的效率,我們可能第一個想法就是利用排序

http原理

tor keep 接受 地址 lru structure 格式 dns 請求方式 1. HTTP簡介 HTTP協議(HyperText Transfer Protocol,超文本傳輸協議)是用於從WWW服務器傳輸超文本到本地瀏覽器的傳送協議。它可以使瀏覽器

Python 字符串的所有方法

drive nes and tabs 英文 spa space cas ive 1 name = "my name is {name} and my age is {age}" 2 3 # 首字母大寫 4 name.capitalize() 5 # 統計某個字