整合營銷服務商

          電腦端+手機端+微信端=數(shù)據(jù)同步管理

          免費咨詢熱線:

          http簡介并用go實現(xiàn)

          .HTTP協(xié)議簡介

          超文本傳輸協(xié)議(英文:HyperText Transfer Protocol,縮寫:HTTP)是一種用于分布式、協(xié)作式和超媒體信息系統(tǒng)的應用層協(xié)議。

          就是常用的瀏覽器和服務器通信協(xié)議. 將tcp進行封裝后的一種應用層協(xié)議.

          2.HTTP工作原理

          HTTP協(xié)議定義Web客戶端如何從Web服務器請求Web頁面,以及服務器如何把Web頁面?zhèn)魉徒o客戶端。HTTP協(xié)議采用了請求/響應模型。客戶端向服務器發(fā)送一個請求報文,請求報文包含請求的方法、URL、協(xié)議版本、請求頭部和請求數(shù)據(jù)。服務器以一個狀態(tài)行作為響應,響應的內容包括協(xié)議的版本、成功或者錯誤代碼、服務器信息、響應頭部和響應數(shù)據(jù)。

          以下是 HTTP 請求/響應的步驟:

          1. 客戶端連接到Web服務器
            一個HTTP客戶端,通常是瀏覽器,與Web服務器的HTTP端口(默認為80)建立一個TCP套接字連接。例如,http://www.baidu.com。 默認80端口是不顯示的, 否則需要在域名后加入端口號.
          2. 發(fā)送HTTP請求
            通過TCP套接字,客戶端向Web服務器發(fā)送一個文本的請求報文,一個請求報文由請求行、請求頭部、空行和請求數(shù)據(jù)4部分組成。
          3. 服務器接受請求并返回HTTP響應
            Web服務器解析請求,定位請求資源。服務器將資源復本寫到TCP套接字,由客戶端讀取。一個響應由狀態(tài)行、響應頭部、空行和響應數(shù)據(jù)4部分組成。
          4. 釋放連接TCP連接
            若connection 模式為close,則服務器主動關閉TCP連接,客戶端被動關閉連接,釋放TCP連接;若connection 模式為keepalive,則該連接會保持一段時間,在該時間內可以繼續(xù)接收請求;
          5. 客戶端瀏覽器解析HTML內容
            客戶端瀏覽器首先解析狀態(tài)行,查看表明請求是否成功的狀態(tài)代碼。然后解析每一個響應頭,響應頭告知以下為若干字節(jié)的HTML文檔和文檔的字符集。客戶端瀏覽器讀取響應數(shù)據(jù)HTML,根據(jù)HTML的語法對其進行格式化,并在瀏覽器窗口中顯示。

          例如:在瀏覽器地址欄鍵入URL,按下回車之后會經(jīng)歷以下流程:

          1. 瀏覽器向 DNS 服務器請求解析該 URL 中的域名所對應的 IP 地址;
          2. 解析出 IP 地址后,根據(jù)該 IP 地址和默認端口 80,和服務器建立TCP連接;
          3. 瀏覽器發(fā)出讀取文件(URL 中域名后面部分對應的文件)的HTTP 請求,該請求報文作為 TCP 三次握手的第三個報文的數(shù)據(jù)發(fā)送給服務器;
          4. 服務器對瀏覽器請求作出響應,并把對應的 html 文本發(fā)送給瀏覽器;
          5. 釋放 TCP連接;
          6. 瀏覽器將該 html 文本解析并顯示對應格式的內容;

          3.HTTP請求方法

          HTTP/1.1協(xié)議中共定義了八種方法來以不同方式操作指定的資源:

          GET

          向指定的資源發(fā)出“顯示”請求。使用GET方法應該只用在讀取數(shù)據(jù),而不應當被用于產(chǎn)生“副作用”的操作中,例如在Web Application中。其中一個原因是GET可能會被網(wǎng)絡蜘蛛等隨意訪問。

          HEAD

          與GET方法一樣,都是向服務器發(fā)出指定資源的請求。只不過服務器將不傳回資源的本文部分。它的好處在于,使用這個方法可以在不必傳輸全部內容的情況下,就可以獲取其中“關于該資源的信息”(元信息或稱元數(shù)據(jù))。

          POST

          向指定資源提交數(shù)據(jù),請求服務器進行處理(例如提交表單或者上傳文件)。數(shù)據(jù)被包含在請求本文中。這個請求可能會創(chuàng)建新的資源或修改現(xiàn)有資源,或二者皆有。

          PUT

          向指定資源位置上傳其最新內容。

          DELETE

          請求服務器刪除Request-URI所標識的資源。

          TRACE

          回顯服務器收到的請求,主要用于測試或診斷。

          OPTIONS

          這個方法可使服務器傳回該資源所支持的所有HTTP請求方法。用’*'來代替資源名稱,向Web服務器發(fā)送OPTIONS請求,可以測試服務器功能是否正常運作。

          CONNECT

          HTTP/1.1協(xié)議中預留給能夠將連接改為管道方式的代理服務器。通常用于SSL加密服務器的鏈接(經(jīng)由非加密的HTTP代理服務器)。

          4.HTTP請求格式

          5.HTTP響應格式


          6.HTTP路由轉發(fā)

          路由是處理url和函數(shù)關系的程序,配置一系列的url訪問規(guī)則,提供對應url訪問的模板.在go的原生net/http包中,瀏覽器發(fā)起http請求(post,get等請求),到服務器中,服務器根據(jù)發(fā)送的url查找對應的出來程序,此查找程序為路程轉發(fā)程序.

          7.HTTP狀態(tài)碼

          所有HTTP響應的第一行都是狀態(tài)行,依次是當前HTTP版本號,3位數(shù)字組成的狀態(tài)代碼,以及描述狀態(tài)的短語,彼此由空格分隔。

          狀態(tài)代碼的第一個數(shù)字代表當前響應的類型:

          • 1xx消息——請求已被服務器接收,繼續(xù)處理
          • 2xx成功——請求已成功被服務器接收、理解、并接受
          • 3xx重定向——需要后續(xù)操作才能完成這一請求
          • 4xx請求錯誤——請求含有詞法錯誤或者無法被執(zhí)行
          • 5xx服務器錯誤——服務器在處理某個正確請求時發(fā)生錯誤

          有些是已經(jīng)定義好的,比如200, 404等常見狀態(tài)碼,開發(fā)者也可以自行定義.

          8.一個簡單的HTTP服務器

          package main
           
          import (
              "fmt"
              "net/http"
          )
           
          func IndexHandler(w http.ResponseWriter, r *http.Request) {
              fmt.Fprintln(w, "hello world")
          }
           
          func main() {
              http.HandleFunc("/", IndexHandler)
              http.ListenAndServe("127.0.0.0:8000", nil)
          }
          123456789101112131415

          上述代碼中分析請求格式如下圖所示:

          可以看到上圖,請求頭,響應頭,請求方法為GET, 響應狀態(tài)碼為200.

          Content-Type: 傳輸?shù)拿襟w類型.

          Content-Length: HTTP消息長度.

          等字段內容龐大,后續(xù)專門開一貼介紹.

          9.HTTP和MYSQL實現(xiàn)登錄功能

          一個簡單的登錄頁面,用戶登錄時填寫的賬號密碼從數(shù)據(jù)庫中讀出,并做對比

          index.html: 主頁顯示內容

          <!DOCTYPE html>
          <html lang="en">
          <head>
              <meta charset="UTF-8">
              <title>index</title>
          </head>
          <body>
          歡迎訪問golang搭建的HttpServer
          </body>
          </html>
          12345678910

          login.html: 登錄頁面

          <!DOCTYPE html>
          <html lang="en">
          <head>
              <meta charset="UTF-8">
              <title>用戶登錄</title>
          </head>
          <body>
          <form action="/loginForm" method="post">
              <span>{{.}}</span>
              username:<input type="text" name="username"/><br/>
              password:<input type="password" name="password"/><br/>
              <input type="submit" value="登錄"/>  
              <input type="reset" value="重置"/>
          </form>
          </body>
          </html>
          12345678910111213141516

          success.html: 登錄成功頁面

          <!DOCTYPE html>
          <html lang="en">
          <head>
              <meta charset="UTF-8">
              <title>首頁</title>
          </head>
          <body>
          歡迎訪問golang搭建的HttpServer
          </body>
          </html>
          12345678910

          main.go: 服務器主程序

          森林導航:http://www.xsldh6.com/
          NiceTool.net 好工具網(wǎng):http://www.nicetool.net/

          品|開源中國

          文|御坂弟弟

          TypeScript 官方宣布,其網(wǎng)站采用了一個新的主頁,以更好地向用戶介紹 TypeScript。

          文中,官方表示以前的主頁存在諸多問題,比如網(wǎng)站頂部沒有明顯的號召性用語、使用了太多解釋概念的文字、網(wǎng)站各個部分之間視覺重量同以至于缺乏重點、沒有足夠的代碼示例。最后,其對網(wǎng)站用戶進行了 A/B 測試,看看是否有新用戶喜歡主頁,但結果基本是各占一半。因此新主頁進行了以下改動:

          • 減少頁面上的文本量,并且每個部分現(xiàn)在都有加粗的關鍵信息。

          • 將調色板限制為來自 TypeScript 徽標的藍色以及白色和黑色的陰影。

          • 創(chuàng)建一個中間導航點,以方便用戶在文檔、編輯器或教程之間跳轉。

          • 用頁面末尾的跳轉點替換頁腳內容,使用相同的鏈接,但調整了設計以適應頁腳。

          • 開始關注開發(fā)人員使用 TypeScript 的體驗。

          與之前的主頁一樣,新主頁通過了定期可訪問性審核,可以在禁用 JavaScript 的情況下使用,并且可以完全通過鍵盤進行導航。感興趣的用戶可以前往體驗。


          主站蜘蛛池模板: 相泽亚洲一区中文字幕| 久久精品一区二区| 免费一区二区视频| 亚洲AV乱码一区二区三区林ゆな| 亚洲美女视频一区| 亚洲第一区精品观看| 中文字幕一区在线观看视频| 黄桃AV无码免费一区二区三区| 久久久无码精品人妻一区| 无码人妻精品一区二区三区99仓本 | 精品国产亚洲一区二区三区| 亚洲av乱码一区二区三区按摩| 亚洲综合无码AV一区二区| 日本精品一区二区三区在线视频一 | 好看的电影网站亚洲一区| 国产aⅴ一区二区| 韩国一区二区三区视频| 亚洲综合一区二区三区四区五区| 久久高清一区二区三区| 国产精品视频一区二区噜噜| 无码人妻精品一区二区蜜桃AV| 在线免费一区二区| 国产精品一区在线麻豆| 国产高清在线精品一区| 日韩精品无码一区二区三区不卡| 清纯唯美经典一区二区| 国产精品无码一区二区三级| 熟女性饥渴一区二区三区| 一区二区三区电影网| 精品久久国产一区二区三区香蕉| 精品理论片一区二区三区| 国产精品亚洲一区二区三区久久| 色狠狠色狠狠综合一区| 麻豆一区二区三区精品视频| 精品无码一区二区三区亚洲桃色| 一区二区三区视频在线| 3d动漫精品成人一区二区三| 亚洲一区中文字幕在线电影网| 成人免费观看一区二区| 日本无码一区二区三区白峰美| 亚洲av日韩综合一区二区三区|