Learn More →
HTTP是一個用戶端終端(用戶)和伺服器端(網站)請求和應答的標準(TCP)。通過使用網頁瀏覽器、網路爬蟲或者其它的工具,用戶端發起一個HTTP請求到伺服器上指定埠port為80。
我們稱用戶端為用戶代理程式(user agent,應答的伺服器上儲存著一些資源,比如HTML檔案和圖像,稱應答伺服器為源伺服器(origin server)。在用戶代理和源伺服器中間可能存在多個「中間層」,比如代理伺服器、閘道器或者隧道(tunnel)。
通常,由HTTP用戶端發起一個請求,建立一個到伺服器指定埠(預設是80埠)的TCP連線。HTTP伺服器則在那個埠監聽用戶端的請求。一旦收到請求,伺服器會向用戶端返回一個狀態,比如"HTTP/1.1 200 OK",以及返回的內容,如請求的檔案、錯誤訊息、或者其它資訊。
有關HTTP狀態碼,如
Ref: https://zh.wikipedia.org/wiki/HTTP状态码
已過時。只接受GET一種請求方法,沒有在通訊中指定版本號,且不支援請求頭。由於該版本不支援POST方法,因此用戶端無法向伺服器傳遞太多資訊。
這是第一個在通訊中指定版本號的HTTP協定版本,至今仍被廣泛採用,特別是在代理伺服器中。
持久連線被預設採用,並能很好地配合代理伺服器工作。還支援以管道方式在同時傳送多個請求,以便降低線路負載,提高傳輸速度。
HTTP 1.1相較於HTTP 1.0協定的區別主要體現在:
HTTP/2 是目前主要版本,於2015年5月作為網際網路標準正式發布
GET / HTTP/1.1
Host: www.google.com
HTTP/1.1 200 OK
Content-Length: 3059
Server: GWS/2.0
Date: Sat, 11 Jan 2003 02:44:04 GMT
Content-Type: text/html
Cache-control: private
Set-Cookie: PREF=ID=73d4aef52e57bae9:TM=1042253044:LM=1042253044:S=SMCc_HRPCQiqy
X9j; expires=Sun, 17-Jan-2038 19:14:07 GMT; path=/; domain=.google.com
Connection: keep-alive
Ref : HTTP持久連線
Learn More →
使用多個連線和使用持久連結的對比
對於現在的廣泛普及的寬頻連線來說,Keep-Alive也許並不像以前一樣有用。web伺服器會保持連線若干秒(Apache中預設15秒),這與提高的效能相比也許會影響效能。
對於單個檔案被不斷請求的服務(例如圖片存放網站),Keep-Alive可能會極大的影響效能,因為它在檔案被請求之後還保持了不必要的連線很長時間。
Ref : https://twgame.wordpress.com/2015/02/03/tcpiphttpsocketudp/
握手過程中傳送的包裏不包含數據,三次握手完畢後,客戶端與服務器才正式開始傳送數據。理想狀態下,TCP連接一旦建立,在通信雙方中的任何一方主動關閉連接之前,TCP 連接都將被一直保持下去。
好文推推 https://blog.hellojcc.tw/2016/01/12/introduce-session-and-cookie/
最常見到的 Cookie 應用是在表單填寫:假設現在頁面上的資料填到一半,不小心把網頁關掉,這時再重新打開發現先前填的內容還在的話,靠的就是 cookie。實作原理很簡單,client 端的程式在一旦填寫的資料有變動時,就把該資訊寫入 cookie。
Cookie 由瀏覽器處理,具有兩個特性:
*.example.com
存入的 cookie,不會出現在 *.not-example.com
。Cookie 的另一個特性是:在向該 domain 的 server 發送請求時,也會被一併帶進去該請求中。因此,記得不要讓 cookie 的內容太多,會增加傳輸量的負擔。另外透過這個特性,可以做到驗證客戶端的功能。
設想你某次登陸過一個網站,下次登錄的時候不想再次輸入賬號了,怎麼辦?這個信息可以寫到Cookie裡面,訪問網站的時候,網站頁面的腳本可以讀取這個信息,就自動幫你把用戶名給填了,能夠方便一下用戶。
Session 負責紀錄在 web server 上的使用者訊息。Session 機制會在一個用戶完成身分認證後,存下所需的用戶資料,接著產生一組對應的 ID
,存入 cookie 後傳回用戶端。
Session就比如購物車,當你點擊下單按鈕時,由於HTTP協議無狀態,所以並不知道是哪個用戶操作的,所以服務端要為特定的用戶創建了特定的Session,用用於標識這個用戶,並且跟踪用戶,這樣才知道購物車裡面有幾本書。
這個 ID 要是獨特的,所以會使用 uuid 的機制,重複的機率非常非常低。
因此當下次用戶端發送請求時,如果帶有該 ID
資訊,web server 就會認為該請求是來自該名使用者,達到驗證用戶的目的。這個時候防偽的機制就相當重要,如果伺服器端的實作有問題,再加上用戶端竄改 cookie,就有可能被偽造身分。
每次HTTP請求的時候,客戶端都會發送相應的Cookie信息到服務端。實際上大多數的應用都是用Cookie來實現Session跟踪的,第一次創建Session的時候,服務端會在HTTP協議中告訴客戶端需要在Cookie裡面記錄一個Session ID,以後每次請求把這個Session ID發送到服務器,我就知道你是誰了。
有人問,如果客戶端的瀏覽器禁用了Cookie怎麼辦?一般這種情況下,會使用一種叫做URL重寫的技術來進行會話跟踪,即每次HTTP交互,URL後面都會被附加上一個諸如sid=xxxxx這樣的參數,服務端據此來識別用戶。
MVC模式(Model–view–controller)是軟體工程中的一種軟體架構模式,把軟體系統分為三個基本部分:
模型(Model): 作為不同層面間的組織作用,用於控制應用程式的流程,它處理事件並作出回應。「事件」包括用戶的行為和資料 Model 上的改變
視圖(View): 介面設計人員進行圖形介面設計
控制器(Controller): 用於封裝與應用程式的業務邏輯相關的資料以及對資料的處理方法,程式設計師編寫程式應有的功能(實現演算法等等)、資料庫專家進行資料管理和資料庫設計(可以實現具體的功能)。
在最初的JSP網頁中,像資料庫查詢語句(SQL query)這樣的資料層代碼和像HTML這樣的表示層代碼是混在一起。雖然有著經驗比較豐富的開發者會將資料從表示層分離開來,但這樣的良好設計通常並不是很容易做到的,實現它需要精心地計劃和不斷的嘗試。MVC可以從根本上強制性地將它們分開。儘管構造MVC應用程式需要一些額外的工作,但是它帶給我們的好處是毋庸置疑的。
首先,多個 View 能共享一個 Model 。如今,同一個Web應用程式會提供多種使用者介面,例如用戶希望既能夠通過瀏覽器來收發電子郵件,還希望通過手機來存取電子信箱,這就要求Web網站同時能提供Internet介面和WAP介面。在MVC設計模式中, Model 回應用戶請求並返迴響應資料,View 負責格式化資料並把它們呈現給用戶,業務邏輯和表示層分離,同一個 Model 可以被不同的 View 重用,所以大大提高了代碼的可重用性。
其次,Controller 是自包含(self-contained)指高獨立內聚的物件,與 Model 和 View 保持相對獨立,所以可以方便的改變應用程式的資料層和業務規則。例如,把資料庫從MySQL移植到Oracle,或者把RDBMS資料來源改變成LDAP資料來源,只需改變 Model 即可。一旦正確地實現了控制器,不管資料來自資料庫還是LDAP伺服器,View 都會正確地顯示它們。由於MVC模式的三個模組相互獨立,改變其中一個不會影響其他兩個,所以依據這種設計思想能構造良好的少互擾性的構件。
此外,Controller 提高了應用程式的靈活性和可配置性。Controller 可以用來連線不同的 Model 和 View 去完成用戶的需求,也可以構造應用程式提供強有力的手段。給定一些可重用的 Model 、 View 和Controller 可以根據用戶的需求選擇適當的 Model 進行處理,然後選擇適當的的 View 將處理結果顯示給用戶。
HTML Form 表單有兩種資料傳遞方式,分別為 GET 與 PSOT 這兩種,當填好表單資料並按下送出表單的按鈕之後,必須透過這兩種方式將資料送出到伺服器(Web Server),以下為兩種方式的 HTML Code 寫法。
<form action="接收資料的程式" method="get">
<form action="接收資料的程式" method="post">
GET :Requests data from a specified resource
POST : Submits data to be processed to a specified resource
The following table lists some other HTTP request methods:
Method | Description |
---|---|
HEAD | Same as GET but returns only HTTP headers and no document body |
PUT | Uploads a representation of the specified URI |
DELETE | Deletes the specified resource |
OPTIONS | Returns the HTTP methods that the se |
CONNECT | Converts the request connection to a transparent TCP/IP tunnel |