1、HTTP簡介
HTTP協議是Hyper Text Transfer Protocol(超文本傳輸協議)的縮寫,是用於從萬維網(WWW:World Wide Web )服務器傳輸超文本到本地瀏覽器的傳送協議。HTTP是一個基於TCP/IP通信協議來傳遞數據(HTML 文件, 圖片文件, 查詢結果等)。
2、HTPP原理
HTTP協議工作於客戶端-服務端架構上。瀏覽器作爲HTTP客戶端通過URL向HTTP服務端即WEB服務器發送所有請求。
Web服務器有:Apache服務器,IIS服務器(Internet Information Services)等。Web服務器根據接收到的請求後,向客戶端發送響應信息。HTTP默認端口號爲80,但是你也可以改爲8080或者其他端口。
HTTP三點注意事項:
HTTP是無連接:無連接的含義是限制每次連接只處理一個請求。服務器處理完客戶的請求,並收到客戶的應答後,即斷開連接。採用這種方式可以節省傳輸時間。
HTTP是媒體獨立的:這意味着,只要客戶端和服務器知道如何處理的數據內容,任何類型的數據都可以通過HTTP發送。客戶端以及服務器指定使用適合的MIME-type內容類型。
HTTP是無狀態:HTTP協議是無狀態協議。無狀態是指協議對於事務處理沒有記憶能力。缺少狀態意味着如果後續處理需要前面的信息,則它必須重傳,這樣可能導致每次連接傳送的數據量增大。另一方面,在服務器不需要先前信息時它的應答就較快。
2、使用Python實現簡單的操作
http服務端
import socket
def Create_server():
sockdf = socket.socket()
sockdf.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) # 設置端口立即重啓
sockdf.bind(('0.0.0.0', 8000))
sockdf.listen(5)
return sockdf
def read_html():
f = open('index.html', 'r')
return f.read()
def request(data, conndf):
if not data:
return
data = data.split(' ')
if data[1] == '/':
response = "HTTP/1.1 200 OK\r\n"
response += "Content-Type:text/html\r\n"
response += "\r\n"
response += read_html()
else:
response = "HTTP/1.1 404 Not Found\r\n"
response += "Content-Type:text/html\r\n"
response += "\r\n"
response += "<h1>Sorry.......<h1>"
conndf.send(response.encode())
def Server():
sockdf = Create_server()
print('Waiting Connect..........')
while True:
try:
conndf, addr = sockdf.accept()
except KeyboardInterrupt as e:
break
data = conndf.recv(2048)
print("Connect from {0}".format(addr))
request(data.decode(), conndf)
Server()
http客戶端測試
import socket
sockdf = socket.socket() # 創建套接字
# 設置端口立即重用
sockdf.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
sockdf.bind(('0.0.0.0', 8888)) # 綁定地址
sockdf.listen(5) # 監聽
print('Waiting connect......')
conndf, addr = sockdf.accept() # 等待客戶端的連接
print("connect from:{0}".format(addr))
data = conndf.recv(1024) # 收信息
print(data.decode())
# 組織http響應
response = """HTTP/1.1 200 OK
Content-Type:text/html;charset=utf-8
你好
"""
conndf.send(response.encode())
- 簡介原理來源於菜鳥教程