goweb
DNS作業原理
-
在瀏覽器中輸入www.qq.com域名,作業系統會先檢查自己本地的hosts檔案是否有這個網址映射關系,如果有,就先呼叫這個IP地址映射,完成域名決議,
-
如果hosts里沒有這個域名的映射,則查找本地DNS決議器快取,是否有這個網址映射關系,如果有,直接回傳,完成域名決議,
-
如果hosts與本地DNS決議器快取都沒有相應的網址映射關系,首先會找TCP/IP引數中設定的首選DNS服務器,在此我們叫它本地DNS服務器,此服務器收到查詢時,如果要查詢的域名,包含在本地配置區域資源中,則回傳決議結果給客戶機,完成域名決議,此決議具有權威性,
-
如果要查詢的域名,不由本地DNS服務器區域決議,但該服務器已快取了此網址映射關系,則呼叫這個IP地址映射,完成域名決議,此決議不具有權威性,
-
如果本地DNS服務器本地區域檔案與快取決議都失效,則根據本地DNS服務器的設定(是否設定轉發器)進行查詢,如果未用轉發模式,本地DNS就把請求發至 “根DNS服務器”,“根DNS服務器”收到請求后會判斷這個域名(.com)是誰來授權管理,并會回傳一個負責該頂級域名服務器的一個IP,本地DNS服務器收到IP資訊后,將會聯系負責.com域的這臺服務器,這臺負責.com域的服務器收到請求后,如果自己無法決議,它就會找一個管理.com域的下一級DNS服務器地址(qq.com)給本地DNS服務器,當本地DNS服務器收到這個地址后,就會找qq.com域服務器,重復上面的動作,進行查詢,直至找到www.qq.com主機,
-
如果用的是轉發模式,此DNS服務器就會把請求轉發至上一級DNS服務器,由上一級服務器進行決議,上一級服務器如果不能決議,或找根DNS或把轉請求轉至上上級,以此回圈,不管本地DNS服務器用的是轉發,還是根提示,最后都是把結果回傳給本地DNS服務器,由此DNS服務器再回傳給客戶機,
GET和POST的區別:
- 我們可以看到GET請求訊息體為空,POST請求帶有訊息體,
- GET提交的資料會放在URL之后,以?分割URL和傳輸資料,引數之間以&相連,如EditPosts.aspx?name=test1&id=123456,POST方法是把提交的資料放在HTTP包的body中,
- GET提交的資料大小有限制(因為瀏覽器對URL的長度有限制),而POST方法提交的資料沒有限制,
- GET方式提交資料,會帶來安全問題,比如一個登錄頁面,通過GET方式提交資料時,用戶名和密碼將出現在URL上,如果頁面可以被快取或者其他人可以訪問這臺機器,就可以從歷史記錄獲得該用戶的賬號和密碼,
網頁優化方面有一項措施是減少HTTP請求次數,就是把盡量多的css和js資源合并在一起,目的是盡量減少網頁請求靜態資源的次數,提高網頁加載速度,同時級訓服務器的壓力,
http包建立第一個服務器
package main
import (
"fmt"
"net/http"
"strings"
"log"
)
func sayhelloName(w http.ResponseWriter, r *http.Request) {
r.ParseForm() //決議引數,默認是不會決議的
fmt.Println(r.Form) //這些資訊是輸出到服務器端的列印資訊
fmt.Println("path", r.URL.Path)
fmt.Println("scheme", r.URL.Scheme)
fmt.Println(r.Form["url_long"])
for k, v := range r.Form {
fmt.Println("key:", k)
fmt.Println("val:", strings.Join(v, ""))
}
fmt.Fprintf(w, "Hello astaxie!") //這個寫入到w的是輸出到客戶端的
}
func main() {
http.HandleFunc("/", sayhelloName) //設定訪問的路由
err := http.ListenAndServe(":9090", nil) //設定監聽的埠
if err != nil {
log.Fatal("ListenAndServe: ", err)
}
}
這個就是高并發體現了,用戶的每一次請求都是在一個新的goroutine去服務,相互不影響,
這一章是把整個http包給解釋了一遍,讀起來有點難度,
地址
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/49401.html
標籤:Go
上一篇:eclipse程式運行不了,提示tomcat出錯,麻煩大佬看看,幫忙解決一下
下一篇:goweb-表單
