網域名稱
網域名稱解析系統,主要適用於將網域名稱轉換成對應的ip位址。
瀏覽器訪問伺服器的過程:瀏覽器與伺服器建立連線時,是先去訪問dns伺服器,返回網域名稱相對應的ip位址,再去將得到的ip位址區連線相應的伺服器,由伺服器返回給我們資訊。
當然在實際的訪問過程中,建立連線時,會先訪問本地dns,如果在本地的dns中沒有找到相對應的網域名稱,那麼再去訪問dns伺服器。
c:\windows\system32\drivers\ect\hosts 本地的dns位置
http協議概述
超文字傳輸協議:為了提供發布和接受html頁面的方法,http是基於tcp,瀏覽器和伺服器之間由tcp連線。
http協議分為兩個部分:請求協議,響應協議
請求行
get 請求方式
/ 請求資源的路徑 體現請求資源的路徑 (不包含網域名稱)
http/1.1 請求協議以及版本
請求頭
協議名:協議內容
host :當url中所要請求的伺服器的主機名
accept-encoding:是瀏覽器發給伺服器,宣告瀏覽器支援解壓編碼型別
accept_charset:表示瀏覽器支援的字符集
referer:表示此次請求來自於哪個**
accept-language zh-cn,zh;q= 0.8(權重,越大越先解析)
cookie:如果當前請求的伺服器在瀏覽器端設定了資料(cookie)那麼當前瀏覽器再次請求該伺服器的時候,就會把對應資料帶回去。
user-agent:使用者**,當前發起請求的瀏覽器的核心資訊。
accept:表達瀏覽器可以接受的資料型別,text/html,iamage/img
請求空行
分割請求頭與請求主體
請求主體
瀏覽器要傳送給伺服器的內容
get方式沒有請求體,post方式才有請求體
http響應報文協議分析
是伺服器向瀏覽器做出響應(反饋資料)時候的協議
響應行
協議與版本 響應的狀態碼 200 表示伺服器已經接受了瀏覽器的請求並且返回了資料 響應狀態的描述
1開頭:已經接受仍在處理
3開頭:重定向的乙個網頁
500:伺服器報的錯誤
響應頭
*server :伺服器的版本
data:響應時間
contend length :響應的長度
*content-type :相應的資料型別
location :重定向
refresh:重定向(重新整理)
空行
分割響應頭與響應主體
簡單的web伺服器
''
#tcp服務端
#匯入模組
#建立套接字
#設定位址重用
#繫結埠
#設定監聽,讓套接字由主動變為被動
#接受客戶端連線 定義函式 request_handler()
#接受客戶端瀏覽器傳送的請求協議
#判斷協議是否為空
#拼接響應的報文
#傳送響應報文
#關閉操作
'''import socket
def request_handler(new_client_socket,ip_port):
#接受客戶端瀏覽器傳送的請求協議
request_data = new_client_socket.recv(1024)
#print(request_data)
#判斷協議是否為空
if not request_data:
print('客戶端已經下線' +str(ip_port))
new_client_socket.close()
return
#拼接響應的報文
#相應行
#響應頭
response_header ='server:python/2.1\r\n'
#響應空行
response_blank = '\r\n'
#響應主體
response_body = 'helloworld'
response_data = response_line + response_header +response_blank +response_body
#傳送響應報文
new_client_socket.send(response_data.encode())
#關閉當前連線
def main():
'''主函式'''
#匯入模組
#建立套接字
tcp_client_socket = socket.socket(socket.af_inet,socket.sock_stream)
#設定位址重用
#當前套接字,設定位址重用,屬性為ture
tcp_client_socket.setsockopt(socket.sol_socket,socket.so_reuseaddr,
true
)#繫結埠
tcp_client_socket.bind((''
,8080))
#設定監聽,讓套接字由主動變為被動
tcp_client_socket.listen(
128)
#接受客戶端連線 定義函式 request_handler()
while
true
: new_client_socket,ip_port = tcp_client_socket.accept(
)#呼叫函式處理
request_handler(new_client_socket,ip_port)
if __name__ ==
'__main__'
: main(
)
在今天的實現**的過程中我這裡出現了一些問題,程式可以執行,但是不能給客戶端反應情況,我思考到底是不是因為虛擬機器,或者在作業系統的環境搭建出現了問題。 愚公移山日記 11
學習進度 今天的學習內容確實有點少,主要是剛買到一本新書,一本很基礎的書,有一本新書,肯定是要看的呀,但是書本的內容實在是太基礎,但是又害怕直接跳過,會錯過寫什麼內容,畢竟python的內容實在是太豐富了。下面我來根據子所學的內容,和自己的實踐經驗來給各位分享一下吧。idle的使用介紹 氣泡排序法 ...
愚公移山日記 20
學習進度 我寫的日記倒不如說是筆記,今天的學習也算可以,敲了乙個udp聊天的例項,不是很多,但是 的註解叫我很是費腦筋,敲了好多,唯恐描述不清楚,也並非有大胸懷去教會他人,只求在以後偶然翻看,自己能理解。說明在我學習的這些課程均用到linux系統的終端,虛擬機器,由於本人能力有限制,並不能保證所有 ...
愚公移山日記 26
學習進度 今天的主要學習成果是學習多程序,queue模組,佇列的基本用法如下 佇列是multiprocessing模組提供的乙個類 建立佇列 放值取值 import multiprocessing 建立佇列 佇列是multiprocessing模組提供的乙個類 multiprocessing.que...