web框架

08.07自我總結

一.web框架

1.web應用的本質

1.socket網絡編程

  • 架構:C/S架構
  • 協議:TCP/UDP協議
  • 傳輸層

2.web應用

  • 架構:B/S架構
  • 協議:Http協議
  • 應用層

二.http協議組成

請求頭\r\n\r\n請求體php

響應頭\r\n\r\n響應體html

關於請求頭裏的經常使用相關參數

瀏覽器支持的內容python

  • Accept :告訴服務端 客戶端接受什麼類型的響應。
  • Accept-Charset:瀏覽器可接受的字符集
  • Accept-Encoding:瀏覽器可以進行解碼的數據編碼方式
  • Accept-Language:瀏覽器所但願的語言種類

重要的交互參數web

  • Cookie :客戶端的Cookie就是經過這個報文頭屬性傳給服務端的後臺
  • Referer :表示這個請求是從哪一個URL過來的
  • Host:初始URL中的主機和端口
  • Cache-Control 對緩存進行控制
  • User-Agent:發起請求的來源

其餘參數django

  • If-Modified-Since:只有當所請求的內容在指定的日期以後又通過修改才返回它,不然返回304「Not Modified」應答;
  • Pragma:指定「no-cache」值表示服務器必須返回一個刷新後的文檔,即便它是代理服務器並且已經有了頁面的本地拷貝;
  • UA-Pixels,UA-Color,UA-OS,UA-CPU:由某些版本的IE瀏覽器所發送的非標準的請求頭,表示屏幕大小、顏色深度、操做系統和CPU類型.
  • Authorization:受權信息,一般出如今對服務器發送的WWW-Authenticate頭的應答中;
  • Connection:表示是否須要持久鏈接。若是Servlet看到這裏的值爲「Keep-Alive」,或者看到請求使用的是HTTP 1.1(HTTP 1.1默認進行持久鏈接),它就能夠利用持久鏈接的優勢,當頁面包含多個元素時(例如Applet,圖片),顯著地減小下載所須要的時間。要實現這一點,Servlet須要在應答中發送一個Content-Length頭,最簡單的實現方法是:先把內容寫入ByteArrayOutputStream,而後在正式寫出內容以前計算它的大小;
  • Content-Length:表示請求消息正文的長度

關於響應頭裏的經常使用相關參數

Header 解釋 示例
Accept-Ranges 代表服務器是否支持指定範圍請求及哪一種類型的分段請求 Accept-Ranges: bytes
Age 從原始服務器到代理緩存造成的估算時間(以秒計,非負) Age: 12
Allow 對某網絡資源的有效的請求行爲,不容許則返回405 Allow: GET, HEAD
Cache-Control 告訴全部的緩存機制是否能夠緩存及哪一種類型 Cache-Control: no-cache
Content-Encoding web服務器支持的返回內容壓縮編碼類型。 Content-Encoding: gzip
Content-Language 響應體的語言 Content-Language: en,zh
Content-Length 響應體的長度 Content-Length: 348
Content-Location 請求資源可替代的備用的另外一地址 Content-Location: /index.htm
Content-MD5 返回資源的MD5校驗值 Content-MD5: Q2hlY2sgSW50ZWdyaXR5IQ==
Content-Range 在整個返回體中本部分的字節位置 Content-Range: bytes 21010-47021/47022
Content-Type 返回內容的MIME類型 Content-Type: text/html; charset=utf-8
Date 原始服務器消息發出的時間 Date: Tue, 15 Nov 2010 08:12:31 GMT
ETag 請求變量的實體標籤的當前值 ETag: 「737060cd8c284d8af7ad3082f209582d」
Expires 響應過時的日期和時間 Expires: Thu, 01 Dec 2010 16:00:00 GMT
Last-Modified 請求資源的最後修改時間 Last-Modified: Tue, 15 Nov 2010 12:45:26 GMT
Location 用來重定向接收方到非請求URL的位置來完成請求或標識新的資源 Location: http://www.zcmhi.com/archives/94.html
Pragma 包括實現特定的指令,它可應用到響應鏈上的任何接收方 Pragma: no-cache
Proxy-Authenticate 它指出認證方案和可應用到代理的該URL上的參數 Proxy-Authenticate: Basic
refresh 應用於重定向或一個新的資源被創造,在5秒以後重定向(由網景提出,被大部分瀏覽器支持) Refresh: 5; url=http://www.atool.org/httptest.php
Retry-After 若是實體暫時不可取,通知客戶端在指定時間以後再次嘗試 Retry-After: 120
Server web服務器軟件名稱 Server: Apache/1.3.27 (Unix) (Red-Hat/Linux)
Set-Cookie 設置Http Cookie Set-Cookie: UserID=JohnDoe; Max-Age=3600; Version=1
Trailer 指出頭域在分塊傳輸編碼的尾部存在 Trailer: Max-Forwards
Transfer-Encoding 文件傳輸編碼 Transfer-Encoding:chunked
Vary 告訴下游代理是使用緩存響應仍是從原始服務器請求 Vary: *
Via 告知代理客戶端響應是經過哪裏發送的 Via: 1.0 fred, 1.1 nowhere.com (Apache/1.1)
Warning 警告實體可能存在的問題 Warning: 199 Miscellaneous warning
WWW-Authenticate 代表客戶端請求實體應該使用的受權方案 WWW-Authenticate: Basic
X-Powered-By 由語言解析器或者應用程序框架輸出的,這個值的意義用於告知網站是用何種語言或框架編寫的 X-Powered-By: ASP.NET

響應行書寫

版本協議+響應碼+附加信息\r\n\r\n響應體編程

如:HTTP/1.1 200 OK\r\n\r\n響應體flask

響應碼瀏覽器

  • 1xx:提示信息,表示請求已接收
  • 2XX:響應成功
  • 3xx:響應須要定向(從新記載連接第三方連接)
  • 4xx:客戶端錯誤
  • 5xx:服務器端錯誤

經常使用響應碼緩存

  • 200:成功
  • 404;請求內容不存在
  • 401:沒有訪問權限
  • 500:服務器未知錯誤
  • 503: 服務器暫時沒法執行

三.寫web框架的三步驟

  • 第一步:寫socket服務端
  • 第二步:路由系統:url ====》 函數
  • 第三步:模板引擎渲染:自定義規則主要是將裏面的內容進行替換有頂俗稱html模板若是不在不引入地方的狀況下修改的內容會@內容@放置給後面參數進行渲染,也可使用第三方jinja2進行渲染

按照上述步驟進行分類能夠分紅三類服務器

  • 以上三步都不採用第三方例如-->tornado
  • 第一步引入第三方如--> django (wsgiref/uwsgi)
  • 第一步與第三步引用第三方如-->flask

四.手寫web框架簡單案例

import socket
import re
server = socket.socket()
server.bind(('127.0.0.1',8080))
server.listen(5)

while True:
    conn,adder = server.accept()
    a = conn.recv(8888)
    data = str(a,encoding='utf8')
    print(data)
    conn.send(bytes('HTTP/1.1 200 OK\r\n\r\n',encoding='utf8'))
    conn.send(bytes('ywy',encoding='utf8'))
相關文章
相關標籤/搜索