1. 程式人生 > >web應用、HTTP協議及web框架簡介

web應用、HTTP協議及web框架簡介

1. web應用

1.1 web應用程式

  • Web應用程式是一種可以通過Web訪問的應用程式,程式的最大好處是使用者很容易訪問應用程式,使用者只需要有瀏覽器即可,不需要再安裝其他軟體
  • B/S模式(瀏覽器/服務端)

1.2 B/S架構優點

  • 這種架構採用Internet上標準的通訊協議(通常是TCP/IP協議)作為客戶機同伺服器通訊的協議。這樣可以使位於Internet任意位置的人都能夠正常訪問伺服器。對於伺服器來說,通過相應的Web服務和資料庫服務可以對資料進行處理
  • 在伺服器上對資料進行處理,就處理的結果生成網頁,以方便客戶端直接下載
  • 只需要有瀏覽器就可以了,不需要安裝其他應用程式

1.3 基於socket的web應用

import socket
server = socket.socket()
server.bind(('127.0.0.1', 8002))
server.listen(5)
while True:
    conn, client = server.accept()
    data = conn.recv(1024)
    # 接收到的訊息轉化成字串
    data = str(data, encoding='utf-8')
    print(data)
    resquse_list = data.split('\r\n')
    # 將請求首行再切分
    first_list = resquse_list[0].split(' ')
    # 響應頭資訊,協議型別,200傳送成功,\r\n\r\n後可以再加響應體(返回給頁面的資訊)
    conn.send(b'HTTP/. 200 OK\r\nContent-Type:text/html\r\n\r\n')
    if first_list[1] == '/qc1':
        with open('qc1.html', 'rb')as f:
            data = f.read()
        conn.send(data)
    elif first_list[1] == '/qc2':
        with open('qc2.html', 'rb')as f1:
            data = f1.read()
        import datetime
        now = datetime.datetime.now().strftime('%Y-%m-%d %X')
        data = data.replace('hello',now)
        conn.send(data.encode('utf-8'))
    else:
        conn.send(b'404')
    conn.close()

  

------------------------------------------ html檔案: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> hello </body> </html> 

2.HTTP協議

2.1 簡介

  • HTTP協議是Hyper Text Transfer Protocol(超文字傳輸協議)的縮寫,是用於全球資訊網(WWW:World Wide Web )伺服器與本地瀏覽器之間傳輸超文字的傳送協議。
  • HTTP是一個屬於應用層的面向物件的協議,由於其簡捷、快速的方式,適用於分散式超媒體資訊系統,
  • HTTP協議工作於客戶端-服務端架構之上。瀏覽器作為HTTP客戶端通過URL向HTTP服務端即WEB伺服器傳送所有請求。Web伺服器根據接收到的請求後,向客戶端傳送響應資訊。

2.2 協議特徵

  • 基於TCP/IP協議之上的應用層協議;
  • 請求——相應模式,由客戶端發起,服務端響應;
  • HTTP是一種不儲存狀態,即無狀態(stateless)協議。HTTP協議 自身不對請求和響應之間的通訊狀態進行儲存;
  • 無連線,限制每次連線只處理一個請求。伺服器處理完客戶的請求,並收到客戶的應答後,即斷開連線。採用這種方式可以節省傳輸時間

2.3 HTTP請求與響應協議

2.3.1 定義

  • 瀏覽器傳送到服務端要遵循請求協議(請求報文),伺服器向瀏覽器返回資訊要遵循響應協議(響應報文);瀏覽器與伺服器通過 HTTP協議互動的信就是HTTP報文(由多行資料構成的文字)

2.3.2 協議格式

  • 請求協議
# 請求首行:請求型別  請求地址  請求協議
GET /index HTTP/1.1\r\n # 請求頭 Host: 127.0.0.1:8001\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 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36\r\n Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8\r\n Accept-Encoding: gzip, deflate, br\r\n Accept-Language: zh-CN,zh;q=0.9\r\n\r\n' # 請求體 。。。。 ------------------------------------- GET與POST請求方式 (1)GET提交的資料會放在URL之後,以?分割URL和傳輸資料,引數之間以&相連,如EditBook?name=test1&id=123456. POST方法是把提交的資料放在HTTP包的請求體中. (2)GET提交的資料大小有限制(因為瀏覽器對URL的長度有限制),而POST方法提交的資料沒有限制. (3)GET與POST請求在服務端獲取請求資料方式不同 
  • 響應協議
access-control-allow-origin: *
cache-control: public,max-age=25920000
content-encoding: gzip
content-type: application/javascript
date: Sat, 25 Aug 2018 11:31:15 GMT
last-modified: Tue, 09 Feb 2016 15:15:15 GMT
server: Tengine
status: 200
vary: Accept-Encoding
-------------------------------------
響應狀態碼

2.3.3 統一資源定位符(URL)

  • 統一資源定位符是對可以從網際網路上得到的資源的位置和訪問方法的一種簡潔的表示,是網際網路上標準資源的地址。網際網路上的每個檔案都有一個唯一的URL,它包含的資訊指出檔案的位置以及瀏覽器應該怎麼處理它
  • 格式
協議://IP:埠(80)/路徑?name=lqz&age=18 注:?之前的是請求路徑,?之後的是請求資料部分,資料以&相連線