1. 程式人生 > 其它 >Web基礎與HTTP協議,HTTP常見狀態碼

Web基礎與HTTP協議,HTTP常見狀態碼

網頁的概念

網頁

純文字格式檔案 編寫語言為HTML 在使用者的瀏覽器中被"翻譯"成網頁形式顯示出來

網站

由一個一個頁面構成的,是多個網頁的結合體

主頁

開啟網站後出現的第一個網頁稱為網站主頁(或首頁)

域名

瀏覽網頁時輸入的網址

HTTP

用來傳輸網頁的通訊協議

URL

是一種全球資訊網定址系統

HTML叫做超文字標記語言,是一種規範,也是一種標準,它通過標記符號來標記要顯示的網頁中的各個部分。網頁檔案本身是一種文字檔案,通過在文字檔案中新增標記符,可以告訴瀏覽器如何顯示其中的內容。

HTML檔案可以使用任何能夠生成txt檔案的文字編輯器來編輯,生成超文字標記語言檔案,只用修改檔名字尾為".html"或".htm"即可。

HTML基本標籤

(1) HTML語法規則

HTML標籤採用雙標記符的形式,前後標記符對應,分別表示標記開始和結束,標記符中間的內容被標籤描述。前標記符由"<XXX>"表示,結尾標記符多了一個"/",由"</XXX>"表示。

(2) HTML檔案結構

HTML檔案最外層由<html></htm>表示,說明該檔案是用HTML語言描述的。在它裡面是並列的頭標籤(<head>)和內容標籤(<body>)

HTML檔案結構如下:

<html> <head>網頁的內容描述資訊<head> <body>網頁顯示的內容</body> </html> 頭標籤中常用標籤:
標籤 描述
<title> 定義了文件的標題
<base> 定義了頁面連結標籤的預設連結地址
<link> 定義了一個文件和外部資源之間的關係
<meta> 定義了HTML文件中的元資料
<script> 定義了客戶端的指令碼檔案
<style> 定義了HTML文件的樣式檔案

內容標籤中常用標籤:

標籤 描述
<table> 定義了一個表格
<tr> 定義了表格中的一行
<td> 定義了表格中某一行的一列
<img> 定義了一個影象
<a> 定義了一個超連結
<p> 定義了一行
<br> 定義了換行
<font> 定義了字型

靜態網頁與動態網頁

1.靜態網頁

在網站設計中,純粹HTMI格式的網頁通常被稱為“靜態網頁",靜態網頁是標準的HTML檔案,它的副檔名是.htm、.html。靜態網頁是網站建設的基礎,早期的網站一般都是由靜態網頁製作的。靜態網頁也可以出現各種動態的效果,如.GIF格式的動畫、FLASH、滾動字幕等。這些“動態效果”只是視覺上的,與下面將要介紹的動態網頁是不同的概念。

2.動態網頁

所謂的動態網頁,是指跟靜態網頁相對的一種網頁程式設計技術。靜態網頁,隨著HTML程式碼的生成,頁面的內容和顯示效果就基本上不會發生變化了一除非是修改頁面程式碼。而動態網頁則不然,頁面程式碼雖然沒有變,但是顯示的內容卻是可以隨著時間、環境或者資料庫操作的結果而發生改變的。動態網頁URL的字尾不是.htm、.html、.shtml、.xml等靜態網頁的常見網頁製作格式,而是以.aspx、.asp、.jsp、.php、.perl、.cgi等形式為字尾,並且在動態網頁網址中有一個標誌性的符號一"?"

動態網頁是基本的html語法規範與Java,PHP,C#等高階程式設計語言、資料庫程式設計等多種技術的融合,以期實現對網站內容和風格的高效,動態和互動式的管理。因此,從這個意義上來講,凡是結合了HTML以外的高階程式設計語言和資料庫技術進行的網頁程式設計技術生成的網頁都是動態網頁。

3.動態網頁語言

早期的動態網頁主要採用通用閘道器介面CGI (Common Gateway Interface)技術,雖然CGI技術已經發展成熟而且功能強大,但由於程式設計困難、效率低下、修改複雜,所以有逐漸被新技術取代的趨勢。

目前常用的動態網頁程式語言如下:

РНР

即Hypertext Preprocessor (超文字前處理器) ,它是當今Internet上最為火熱的指令碼語言,其語法借鑑了c,Java,PERL等語言,但只需要很少的程式設計知識你就能使用PHP建立一個真正互動的web站點。

JSP

即Java Server Pages (Java伺服器頁面) ,它是由Sun Microsystem公司於1999年6月推出的新技術,是基於Java Servlet以及整個Java體系的web開發技術。

Python

是一種面向物件、跨平臺的動態類計算機程式設計語言,最初被設計用於編寫自動化指令碼(shell),隨著版本的不斷更新和語言新功能的新增,越來越多被用於獨立的大型專案開發

Ruby

是一種簡單快捷的面向物件(面向物件程式設計)指令碼語言,在20世紀90年代由日本人松本行弘(Yukihiro Matsumoto)開發,遵守GPL協議和Ruby License,它的靈感與特性來自於Perl, Smalltalk, Eiffel,Ada以及Lisp語言

HTTP協議概述

HTTP協議採用了請求/響應模型。客戶端向伺服器傳送一個請求,請求頭包含請求的方法、URL、協議版本、以及包含請求修飾符、客戶資訊和內容的類似於MIME的訊息結構。伺服器以一個狀態行作為響應,響應的內容包括訊息協議的版本,成功或者錯誤編碼加上伺服器資訊實體元資訊以及可能的實體內容。 HTTP已經演化出了很多版本,它們中的大部分都是向下相容的。

(1) HTTP/0.9:已過時。只接受GET一種請求方法,沒有在通訊中指定版本號,且不支援請求頭。由於該版本不支援POST方法,所以客戶端無法向伺服器傳遞太多資訊。

(2) HTTP/1.0:這是第一個在通訊中指定版本號的HTTP協議版本,至今仍被廣泛採用,特別是在代理伺服器中。

(3) HTTP/1.1:當前版本。持久連線被預設採用,並能很好地配合代理伺服器工作。還支援以管道方式同時傳送多個請求,以便降低線路負載,提高傳輸速度。

HTTP方法

HTTP支援幾種不同的請求命令,這些命令被稱為HTTP方法(HTTP method) 。每條HTTP請求報文都包含一個方法, 告訴伺服器要執行什麼動作,包括:獲取一個頁面,執行一個閘道器程式,刪除一個檔案等。最常用的獲取資源的方法是GET、POST
HTTP方法 描述
GET 請求獲取Request-URI所標識的資源
PUT 請求伺服器儲存一個資源,並用Request-URI作為其標識
DELETE 請求伺服器刪除Request-URI所標識的資源
POST 在Request-URI所標識的資源後附加新的資料
HEAD 請求獲取由Request-URI所標識的資源的響應訊息報頭

GET方法採用的是URL字尾的形式,比如http://www.test.com/a.php21d=123就是一個GET請求,伺服器接收後可以解析出Id=123,而POST方法不需要在URL中顯示"?Id=123",引數作為內容進行了隱藏的提交。因此,表單類或者有使用者名稱、密碼等內容提交時建議使用POST方法。

GET方法在URL上顯示引數,而URL是有長度限制,故不適合提交過大的資料。GET方法可以被瀏覽器快取,當請求已經被請求過一次的URL時,瀏覽器不需要向伺服器再次發出請求,直接在本地快取中獲得頁面

GET和POST比較

GET方法:

對資料長度的限制: URL的長度是受限制的(URL的最大長度是2048個字元) 快取:能被快取 安全性:與POST相比, GET的安全性較差,因為所傳送的資料是URI的一部分。在傳送密碼或其他敏感資訊時絕不要使用GET 歷史記錄:引數保留在瀏覽器歷史中 後退按鈕/重新整理:無害 書籤:可收藏為書籤

POST方法:

對資料長度的限制:無限制 快取:不能快取 安全性: POST比GET更安全,因為引數不會被儲存在瀏覽器歷史或web伺服器日誌中 歷史記錄:引數不會儲存在瀏覽器歷史中 後退按鈕/重新整理:資料會被重新提交,瀏覽器應該告知使用者資料會被重新提交 書籤:不可收藏為書籤

HTTP狀態碼

HTTP狀態碼(HTTP Status Code)是用以表示網頁伺服器HTTP響應狀態的3位數字程式碼,當瀏覽器請求某一URL時,伺服器根據處理情況返回相應的處理狀態
狀態碼首位 已定義範圍 分類
1xx 100-101 資訊提示
2xx 200-206 成功
3xx 300-305 重定向
4xx 400-415 客戶端錯誤
5xx 500-505 伺服器錯誤
HTTP常見狀態碼
狀態碼 功能描述
200 一切正常
301 永久重定向
302 臨時重定向
401 使用者名稱或密碼錯誤
403 禁止訪問(客戶端IP地址被拒絕)
404 檔案不存在
414 請求URI頭部過長
500 伺服器內部錯誤
502 無效閘道器
503 當前服務不可用
504 閘道器請求超時
HTTP請求流程分析

使用者在瀏覽器輸入URL訪問時,發起HTTP請求報文,請求中包括請求行、請求頭、請求體,伺服器收到請求後返回響應報文,包括狀態行、響應頭、響應體。

1.請求報文

請求行:請求行由請求方法、URL以及協議版本三部分組成。 請求頭:請求頭為請求報文添加了一些附加資訊,由“名/值”對組成,每行一對,名和值之間使用冒號分隔。 空行:請求頭部的最後會有一個空行,表示請求頭部結束,接下來為請求體,這一行非常重要,必不可少。 請求體:請求體是請求提交的引數, GET方法已經在URL中指明瞭引數,所以提交時沒有資料。POST方法提交的引數在請求體中。 常用的請求頭:
請求頭 描述
Host 接受請求的伺服器地址,可以是IP:埠號,也可以是域名
User-Agent 傳送請求的應用程式名稱
Connection 指定與連線相關的屬性,如Connection:Keep-Alive
Accept-Charset 通知服務端可以傳送的編碼格式
Accept-Encoding 通知服務端可以傳送的資料壓縮格式
Accept-Language 通知服務端可以傳送的語言

2.響應報文

狀態行:狀態行由協議版本,狀態碼,狀態碼描述三部分組成。 響應頭:響應頭與請求頭部類似,為響應報文添加了一些附加資訊。 空行:響應頭部的最後會有一個空行,表示響應頭部結束。 響應體:伺服器返回的相應HTMI資料,瀏覽器對其解析後顯示頁面。 常見響應頭:
響應頭 描述
Server 伺服器應用程式軟體的名稱和版本
Content-Type 響應正文的型別(是圖片還是二進位制字串)
Content-Length 響應正文長度
Content-Charset 響應正文使用的編碼
Content-Encoding 響應正文使用的資料壓縮格式
Content-Language 響應正文使用的語言