UNIX is very simple, it just needs a genius to understand its simplicity. —— Dennis M.Ritchiephp
做者剛開始學習編程的時候,學習的就是C語言。寫的第一個入門例子就是在控制檯上打印一句「hello, world"。後來陸續接觸了php、java、python、go等語言,發現入門第一個例子都是打印"hello, world"。這已經成爲了業內的慣例。那麼咱們也從這裏開始。html
話很少說,直接上代碼java
package main
import (
"github.com/gin-gonic/gin"
)
func main() {
r := gin.Default()
r.GET("/hello", func(c *gin.Context) {
c.String(200, "hello, world")
})
r.GET("/helloJson", func(c *gin.Context) {
c.JSON(200, gin.H{"code": 0, "msg": "", "body": "hello, world"})
})
r.Run(":9800") // listen and serve on 0.0.0.0:9800
}
複製代碼
這段代碼很是簡潔明瞭,運行後將會在機器上綁定9800端口,映射了url "/hello"和"/helloJson",當經過瀏覽器訪=問"/hello"時,將在頁面上顯示hello, world,當訪問"/helloJson"時,則會顯示一個json串python
{"body":"hello, world","code":0,"msg":""}
複製代碼
Tip:git
打開chrome瀏覽器,並在地址欄輸入:http://localhost:9800/hello , 頁面將會顯示hello, world。實際上,咱們向服務器9800端口發起了一個http請求,同時服務器返回了一個http響應。信息就在這相似」一問一答「的方式下進行傳輸交互。咱們也可使用chrome開發者工具,看一看具體傳輸的數據內容。github
首先咱們發起了了一個http請求,採用GET請求的方式,請求http://localhost:9800/hello ,請求的數據以下:web
GET /hello HTTP/1.1
Host: localhost:9800
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7
<上面一行是一個空行CRLF, 同時請忽略本行的說明文字> 複製代碼
根據http v1.1協議規範[RFC 7230],請求消息的格式爲:chrome
Tip:apache
- 請求行和請求頭必需要以CRLF結尾。
- 空行必須只包含CRLF,不能包含其它字符包括空格。
- 除去可選body消息外,其他三個部分都是必需要有的。
後續將會詳細介紹http請求的具體內容。編程
服務接收到請求後返回響應,響應消息以下:
HTTP/1.1 200 OK
Content-Type: text/plain; charset=utf-8
Date: Tue, 15 Jan 2019 02:56:59 GMT
Content-Length: 12
hello, world 複製代碼
根據http v1.1協議規範,響應消息格式爲:
Tip:
- 狀態行和響應頭必需要以CRLF結尾。
- 空行必須只包含CRLF,不能包含其它字符包括空格。
該接口返回的數據和"/hello"主要區別就是返回內容的格式不同,一個是純文本字符串,一個是json字符串。經過分析下http數據的交互,來了解下二者之間的區別。
請求的部分除了GET部分,其它都同樣
GET /helloJson HTTP/1.1
...
複製代碼
HTTP/1.1 200 OK
Content-Length: 41
Content-Type: application/json; charset=utf-8
Date: Wed, 16 Jan 2019 16:48:50 GMT
{"body":"hello, world","code":0,"msg":""} 複製代碼
響應的部分主要區別在響應頭的字段Content-Type的值不同。這裏是:application/json; charset=utf-8,意思是告訴客戶端返回的數據內容格式爲json,且編碼爲utf-8
Tip: 當今主流的web後端開發,隨着先後端分離,主要就是接口開發,其主要使用的數據格式是JSON。不管從可讀性,支持語言普遍、客戶端易於解析等方面來看,JSON是如今主流的數據交換格式之一。
本節經過簡單的接口實例,介紹了背後http傳輸的基本信息。下一節開始,咱們將詳細介紹做爲web後端開發人員,必需要了解掌握的http協議的內容,以及在正式項目實踐中所須要關注的細節。