一次完整的http請求過程從tcp三次握手建立連線成功後開始,客戶端按照指定的格式開始向服務端傳送http請求,服務端接收請求後,解析http請求,處理完業務邏輯,最後返回乙個http的響應給客戶端,http的響應內容同樣有標準的格式。無論是什麼客戶端或者是什麼服務端,大家只要按照http的協議標準來實現的話,那麼它一定是通用的。
http請求格式主要有四部分組成,分別是:請求行、請求頭、空行、訊息體,每部分內容佔一行
請求行:請求行是請求訊息的第一行,由三部分組成:分別是請求方法(get/post/delete/put/head)、請求資源的uri路徑、http的版本號
請求頭:請求頭中的資訊有和快取相關的頭(cache-control,if-modified-since)、客戶端身份資訊(user-agent)等等。例如:
cache-control:max-age=0
cookie:gsscrollpos=; _ga=ga1.2.329038035.1465891024; _gat=1
if-modified-since:sun, 01 may 2016 11:19:03 gmt
訊息體:請求體是客戶端發給服務端的請求資料,這部分資料並不是每個請求必須的。
伺服器接收處理完請求後返回乙個http相應訊息給客戶端。http響應訊息的格式包括:狀態行、響應頭、空行、訊息體。每部分內容佔一行。
狀態行:狀態行位於相應訊息的第一行,有http協議版本號,狀態碼和狀態說明三部分構成。如:
http/1.1 200 ok
響應頭:響應頭是伺服器傳遞給客戶端用於說明伺服器的一些資訊,以及將來繼續訪問該資源時的策略。
connection:keep-alive
content-encoding:gzip
content-type:text/html; charset=utf-8
date:fri, 24 jun 2016
06:23:31 gmt
server:nginx/1.9
.12transfer-encoding:chunked
web server都是基於socket程式設計,又稱之為網路程式設計,網路協議通過乙個叫做socket的物件抽象出來,socket可以建立網路連線,讀資料,寫資料。socket模組定義了一些常量引數,用來指定socket的的位址族、socket的型別、以及支援的tcp/ip協議。
socket.socket([family[, type[, proto]]]):根據指定的位址族和套接字型別、協議編號(預設為0)來建立套接字物件。af_inet對應的ipv4, af_inet6對應的ipv6。
引數名稱值說明
family
af_inet
2ipv4
af_inet6
23ipv6
af_unspec
0協議無關
type
sock_stream
1流 for tcp
sock_dgram
2資料報 for udp
protocal
ipproto_ip0ip
ipproto_udp
17udp
ipproto_tcp
6tcp
ipproto_raw
255ipproto_icmp
1icmp
搞清楚了http規範和socket之後,我們就可以使用socket實現乙個對簡單的http伺服器了。**:
# http響應訊息
參考:
一次完整的HTTP請求
一次完整的http請求過程從tcp三次握手建立連線成功後開始,客戶端按照指定的格式開始向服務端傳送http請求,服務端接收請求後,解析http請求,處理完業務邏輯,最後返回乙個http的響應給客戶端,http的響應內容同樣有標準的格式。無論是什麼客戶端或者是什麼服務端,大家只要按照http的協議標準...
一次完整的http請求
一些基本概念 1.tcp ip 把與網際網路相關聯的協議集合起來的總稱 2.http是tcp ip的乙個子集 3.tcp ip分為四層 一次完整的http請求流程 1.客戶端通過dns服務得到目標ip 2.http協議 生成針對目標web伺服器的http請求 3.tcp協議 將http請求報文分割成...
一次完整的http請求
首先了解一次完整的http請求到響應的過程需要的步驟 1.網域名稱解析 2.發起tcp的3次握手 3.建立tcp連線後發起http請求 4.伺服器端響應http請求,瀏覽器得到html 5.瀏覽器解析html 並請求html 中的資源 6.瀏覽器對頁面進行渲染呈現給使用者.0 1像什麼hosts檔案...