1. 伺服器如何處理http請求
1.需求
了解服務端如何處理http請求,了解基本的處理流程
2.實戰
處理http請求分為7個步驟
2.1 Tcp連接
建立一條tcp鏈接,(若之前不存在持久鏈接keep-alive),把客戶端的ip和port,服務端的ip和port數據放到web伺服器連接表中。伺服器隨時監聽鏈接表中的鏈接,看有沒有數據變化
2.2 接收http請求
一旦我們發送http請求了,這條tcp鏈接就開始工作了。因為web伺服器鏈接表中有許多鏈接需要被處理,處理的方式有單線程,多線程這些(這些涉及操作系統的知識)。
2.3 處理http請求
處理的過程大致是把請求的信息解析出來,如下圖
2.5 構建響應
要是找到資源,則構建響應信息,包括響應的對象類型,長度,狀態碼。
另一個情況是重定向響應,就是直接返回一個重定向,客戶端看到之後,立刻再向重定向的地址發起請求。重定向的響應的狀態碼一般是3xx。
2.6 發送響應
把構建的響應發送給客戶端
2.7 記錄日誌
服務端對這個請求響應過程進行記錄。(另外專門再講)
3.總結
以上是服務端處理http請求的大致過程。能讓大家有個大致輪廓,當然裡面有很多細節的知識沒講到,要另外查詢資料並學習
2. 網頁請求有多少種錯誤
HTTP是超文本傳輸協議,其定義了客戶端與伺服器端之間文本傳輸的規范。HTTP默認使用80埠,這個埠指的是服務端的埠,而客戶端使用的埠是動態分配的。當我們沒有指定埠訪問時,瀏覽器會默認幫我們添加80埠。我們也可以自己指定訪問埠如:http://www.ip138.com:80。 需要注意的是,現在大多數訪問都使用了HTTPS協議,而HTTPS的默認埠為443,如果使用80埠訪問HTTPS協議的伺服器可能會被拒絕。
主要特點
1、無連接
無連接的含義是限制每次連接只處理一個請求。伺服器處理完客戶的請求,並收到客戶的應答後,即斷開連接。採用這種方式可以節省傳輸時間。
2、無狀態
HTTP協議是無狀態協議。無狀態是指協議對於事務處理沒有記憶能力。缺少狀態意味著如果後續處理需要前面的信息,則它必須重傳,這樣可能導致每次連接傳送的數據量增大。另一方面,在伺服器不需要先前信息時它的應答就較快。
3、簡單快速
客戶向伺服器請求服務時,只需傳送請求方法和路徑。請求方法常用的有GET、HEAD、POST。每種方法規定了客戶與伺服器聯系的類型不同。由於HTTP協議簡單,使得HTTP伺服器的程序規模小,因而通信速度很快。
4、靈活
HTTP允許傳輸任意類型的數據對象。正在傳輸的類型由Content-Type加以標記。
5、支持B/S及C/S模式
3. 伺服器計算機埠和客戶端計算機埠,如何實現相互通信的呢希望懂網路專業知識的大師指點!
伺服器和客戶端在通信之前會先建立TCP連接,就是常說的三次握手過程。
TCP連接建立之後,伺服器和客戶端就可以互通數據了,可以通過HTTP、FTP、SMTP等等的協議進行各種應用,伺服器有通用的服務埠,例如80是HTTP服務,21是FTP服務,25是SMTP服務,這些埠號是通用的。而用戶的埠號則是不確定的。所以,客戶端需要某種服務時會先訪問伺服器的某個埠,並且通過TCP建立過程,告知伺服器自己的埠號。
正如你所說的,黑客可以對客戶端偽裝成伺服器、對伺服器偽裝成客戶端,分別建立TCP連接,然後獲取用戶和伺服器的信息。現在很多釣魚陷阱就是這樣盜取用戶帳號、密碼的。
木馬攻擊又是另外一回事了,木馬主要是把木馬程序載入用戶電腦,然後盜取用戶信息,當然通過中間人攻擊來注入木馬是常用的手段。
4. web伺服器採用IIS伺服器,用什麼響應客戶的請求asp+sqlserver
1.需要設定一個IP地址,這樣客戶端才能找到網址。(域名也行)
2.需要設定一個默認首頁,這樣客戶端可以接收到第一個網頁。(可以是aspx擴展名)
3.其他網頁需要通過首頁或其他網頁進行鏈接。
5. Web伺服器的工作原理: 談談客戶端如何向Web伺服器提出請求,Web伺服器怎樣響應請求,提供服務
一般是
客戶端發送http請求(tcp 80)到伺服器端,tcp連接建立之後,通過http的動作get獲得頁面信息
具體不是一句兩句能說明白的
自己抓包看吧
6. Python web伺服器怎麼處理請求
web伺服器處理連接請求的四種架構方式:
1、單線程web伺服器
此種架構方式中,web伺服器一次處理一個請求,結束後讀取並處理下一個請求。在某請求處理過程中,其它所有的請求將被忽略,因此,在並發請求較多的場景中將會出現嚴重的必能問題。
相關推薦:《Python教程》
2、多進程/多線程web伺服器
此種架構方式中,web伺服器生成多個進程或線程並行處理多個用戶請求,進程或線程可以按需或事先生成。有的web伺服器應用程序為每個用戶請求生成一個單獨的進程或線程來進行響應,不過,一旦並發請求數量達到成千上萬時,多個同時運行的進程或線程將會消耗大量的系統資源。
3、I/O多路復用web伺服器
為了能夠支持更多的並發用戶請求,越來越多的web伺服器正在採用多種復用的架構——同步監控所有的連接請求的活動狀態,當一個連接的狀態發生改變時(如數據准備完畢或發生某錯誤),將為其執行一系列特定操作;在操作完成後,此連接將重新變回暫時的穩定態並返回至打開的連接列表中,直到下一次的狀態改變。由於其多路復用的特性,進程或線程不會被空閑的連接所佔用,因而可以提供高效的工作模式。
4、多路復用多線程web伺服器
將多進程和多路復用的功能結合起來形成的web伺服器架構,其避免了讓一個進程服務於過多的用戶請求,並能充分利用多CPU主機所提供的計算能力。 web伺服器自身並不處理任何動態內容,它是如何響應客戶端的動態內容請求呢? 通過某種協議調用額外的其它進程來運行這個動態頁面,並將結果取回來以後返回給WEB伺服器,進而響應客戶端。
7. 關於客戶端請求和伺服器響應的問題
每一個客戶終端都有一個ip他會根據發送的IP地址返回給終端客戶 同樣瀏覽器連接網路後也會產生一個網路IP
8. 如何針對http的get請求進行處理與響應
1、HTTP請求概述
在前面有一篇文章對HTTP協議有詳細的描述,這里就不再過多的做說明,只是簡單的作為這篇文章的引子。
HTTP協議又被稱為超文本傳輸協議,它的的設計目的是保證客戶機與伺服器之間的通信。HTTP 的工作方式是客戶端與伺服器之間的請求-應答協議。在客戶端和伺服器之間進行請求-響應時,有兩個最基本的請求方式:GET 和 POST。
其中,GET請求表示從指定的資源請求數據,POST請求表示向指定的資源提交要被處理的數據。
2、HTTP請求格式
在HTTP請求中,首先是請求行,注意這里的請求行一定要放在最前面;其次,是請求頭,英文表示為header;然後會空一行,緊接著就可以是請求的具體內容了,一般稱之為請求體,request-body。給出一個圖示如下:
3、GET請求與POST請求對比
GET請求與POST請求有一些異同點,主要有以下幾點問題:
(1)、GET請求和POST請求都是客戶端與伺服器之間交互,請求--應答模式的協議
(2)、GET請求是通過URL直接請求數據,數據信息可以在URL中直接看到,比如瀏覽器訪問;而POST請求是放在請求頭中的,我們是無法直接看到的;
(3)、GET提交有數據大小的限制,一般是不超過1024個位元組,而這種說法也不完全准確,HTTP協議並沒有設定URL位元組長度的上限,而是瀏
覽器做了些處理,所以長度依據瀏覽器的不同有所不同;POST請求在HTTP協議中也沒有做說明,一般來說是沒有設置限制的,但是實際上瀏覽器也有默認
值。總體來說,少量的數據使用GET,大量的數據使用POST。
(4)、GET請求因為數據參數是暴露在URL中的,所以安全性比較低,比如密碼是不能暴露的,就不能使用GET請求;POST請求中,請求參數信息是放在請求頭的,所以安全性較高,可以使用。在實際中,涉及到登錄操作的時候,盡量使用HTTPS請求,安全性更好。
下面給出一副圖示,說明一下HTTP中GET與POST請求的差異:
4、使用步驟:
在Android中使用HTTP請求,主要步驟如下:
(1)、實例化一個HttpGet(或HttpPost)對象,將請求的URL地址通過構造方法傳給HttpGet(或HttpPost)對象;
(2)、使用DefaultHttpClient類的execute方法發送GET或POST 請求,並返回HttpResponse對象;
(3)、通過HttpResponse介面的getEntity方法返回響應信息。
5、實例代碼
給出一個在實際應用中的一個POST請求的代碼片段:
[java] view plain print?
params = new LinkedList<BasicNameValuePair>();
params.add(new BasicNameValuePair("param1", "Post方法"));
params.add(new BasicNameValuePair("param2", "第二個參數"));
try {
HttpPost post = new HttpPost(baseUrl);
post.setEntity(new UrlEncodedFormEntity(params, "utf-8")); //將參數填入POST Entity中
HttpResponse response = httpClient.execute(post); //執行POST方法
resCode = response.getStatusLine().getStatusCode()); //獲取響應碼
result = EntityUtils.toString(response.getEntity(), "utf-8")); //獲取響應內容
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
6、HTTP請求狀態碼意義
HTTP請求中,主要有這樣幾個類型:1XX:表示信息提示,2XX:表示成功,3XX:表示重定向,4XX:表示客戶端請求錯誤,5XX:表示伺服器錯誤。常見的幾個HTTP請求狀態碼意義如下:
200 OK: 找到了該資源,並且一切正常。
304 NOT MODIFIED: 該資源在上次請求之後沒有任何修改。這通常用於瀏覽器的緩存機制。
401 UNAUTHORIZED: 客戶端無權訪問該資源。這通常會使得瀏覽器要求用戶輸入用戶名和密碼,以登錄到伺服器。
403 FORBIDDEN: 客戶端未能獲得授權。這通常是在401之後輸入了不正確的用戶名或密碼。
404 NOT FOUND: 在指定的位置不存在所申請的資源。
505 NOT SUPPORTED:伺服器不支持請求中所指明的HTTP版本
9. 如何實現數據交互
web數據交互方式,web數據交互,簡單的講,是client與server端的數據交互,通過http協議交互的。【擴展】對於小型個人系統,數據量不是很大的都是通過webservice,webservice讀取資料庫,然後返回結果;對於公司企業的大型數據系統等採用預先將資料庫中的每一條信息靜態化成xml,客戶直接下載xml然後本地解析的數據交互方法。web數據交互,從server的角度講:主要有pull,push兩個,一個是拉,另外一個是推。1)pull 是拉,客戶端向伺服器端主動的拉取數據,採用的技術是ajax 和Xss(跨站腳本)2)push 是伺服器向客戶端主動的推動數據,第一種方式是長連接,客戶端與伺服器之間一直保持著連接,如果有數據的更新,伺服器向客戶端推送數據,客戶端接受伺服器端的數據,可以理解為長輪詢,客戶端與伺服器端必須一直是連接著的狀態。另外還有一種是偽長鏈接的。有2種實現方式,一種是基於ajax的,它與傳統的ajax的方式不同在於,伺服器端會阻塞客戶端的請求直到有數據傳遞或者超時才返回。客戶端 JavaScript 響應處理函數會在處理完伺服器返回的信息後,再次發出請求,重新建立連接。 當客戶端處理接收的數據、重新建立連接時,伺服器端可能有新的數據到達;這些信息會被伺服器端保存直到客戶端重新建立連接,客戶端會一次把當前伺服器端所有的信息取回。