Django入門篇
阿新 • • 發佈:2018-11-04
基於 socket 的 Web 應用
本質上:瀏覽器是一個socket客戶端,伺服器是一個socket服務端
import socket soc = socket.socket( ) soc.bind(( '127.0.0.1',8001 )) soc.listen(5) while True: so ,addr = soc.accept() data = so.recv(1024) so.send(b'HTTP/1.1 200 OK\r\nContent-Type:text/html\r\n\r\n') # so.send(b'sadf') printpy檔案(data) data = str(data,encoding="utf-8") position = data.split('\r\n')[0].split(' ')[1] if '/index' == position: with open('index.html','rb') as f: da = f.read() so.send(da) else: so.send(b'404')
<!DOCTYPE html> <htmlhtml檔案lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h1>index</h1> <h2>dafdasdf</h2> <img src="https://gss0.bdstatic.com/-4o3dSag_xI4khGkpoWK1HF6hhy/baike/c0%3Dbaike92%2C5%2C5%2C92%2C30/sign=775f519ac08065386fe7ac41f6b4ca21/fd039245d688d43f63d84526771ed21b0ff43bf5.jpg"> </body> </html>
http協議特性
-特點:1 基於TCP/IP協議之上的應用層協議
2 基於請求-響應模式(請求必定由客戶端傳送,服務端回覆響應)
3 無狀態儲存(HTTP是一種不儲存狀態,級別,協議對於傳送過的請求或響應都不做持久化處理。)
4 無連線(每次只處理一個請求,收到客戶端應答後,即斷開連結)
(4)無連線
無連線的含義是限制每次連線只處理一個請求。伺服器處理完客戶的請求,並收到客戶的應答後,即斷開連線。採用這種方式可以節省傳輸時間。
http請求協議與響應協議
http協議包含由瀏覽器傳送資料到伺服器需要遵循的請求協議與伺服器傳送資料到瀏覽器需要遵循的請求協議。用於HTTP協議互動的信被為HTTP報文。請求端(客戶端)的HTTP報文 做請求報文,響應端(伺服器端)的 做響應報文。HTTP報文字身是由多行資料構成的字 文字。
請求協議
請求方式: get與post請求
- GET提交的資料會放在URL之後,以?分割URL和傳輸資料,引數之間以&相連,如EditBook?name=test1&id=123456. POST方法是把提交的資料放在HTTP包的請求體中.
- GET提交的資料大小有限制(因為瀏覽器對URL的長度有限制),而POST方法提交的資料沒有限制.
- GET與POST請求在服務端獲取請求資料方式不同。
GET請求 # 請求首行 GET / HTTP/1.1\r\n # get請求後面的引數 GET /?name=lqz&age=18 HTTP/1.1\r\n # 請求頭 Host: 127.0.0.1:8008\r\n Connection: keep-alive\r\n Cache-Control: max-age=0\r\n Upgrade-Insecure-Requests: 1\r\n User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36\r\n Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8\r\nAccept-Encoding: gzip, deflate, br\r\n Accept-Language: zh-CN,zh;q=0.9\r\n Cookie: csrftoken=7xx6BxQDJ6KB0PM7qS8uTA892ACtooNbnnF4LDwlYk1Y7S7nTS81FBqwruizHsxF\r\n\r\n' # 請求體(get請求,請求體為空) POST請求 # 請求首行 POST /?name=lqz&age=18 HTTP/1.1\r\n # 請求頭 Host: 127.0.0.1:8008\r\nConnection: keep-alive\r\nContent-Length: 21\r\nCache-Control: max-age=0\r\nOrigin: http://127.0.0.1:8008\r\nUpgrade-Insecure-Requests: 1\r\nContent-Type: application/x-www-form-urlencoded\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36\r\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8\r\nReferer: http://127.0.0.1:8008/?name=lqz&age=18\r\nAccept-Encoding: gzip, deflate, br\r\nAccept-Language: zh-CN,zh;q=0.9\r\nCookie: csrftoken=7xx6BxQDJ6KB0PM7qS8uTA892ACtooNbnnF4LDwlYk1Y7S7nTS81FBqwruizHsxF\r\n\r\n # 請求體 name=lqz&password=123'GET請求 & POST請求