什么是HTTP協(xié)議?
- 協(xié)議是指:計算機通信網絡中兩臺計算機之間進行通信,所必須共同遵守的規(guī)定或規(guī)則,超文本傳輸協(xié)議(
HTTP)是一種通信協(xié)議,它允許將超文本標記語言(HTML)文檔從Web服務器傳送到客戶端的瀏覽器
Web服務器,瀏覽器,代理服務器
- 當我們打開瀏覽器,在地址欄中輸入
URL,然后我們就看到了網頁。 原理是怎樣的呢?
實際上我們輸入URL后,我們的瀏覽器給Web服務器發(fā)送了一個Request, Web服務器接到Request后進行處理,生成相應的Response,然后發(fā)送給瀏覽器, 瀏覽器解析Response中的HTML,這樣我們就看到了網頁。
- Request:
request這個對象不用事先聲明,就可以在JSP網頁中使用,在編譯為Servlet之后,它會轉換為javax.servlet.http.HttpServletRequest形態(tài)的對象,HttpServletRequest對象是有關于客戶端所發(fā)出的請求的對象,只要是有關于客戶端請求的信息,都可以藉由它來取得,例如請求標頭、請求方法、請求參數、客戶端IP,客戶端瀏覽器等等信息。
簡單的來說就是:請求方法
代理服務器
- 代理服務器就是網絡信息的中轉站,有什么功能?
提高訪問速度, 大多數的代理服務器都有緩存功能。
突破限制, 也就是FQ了
隱藏身份
URL詳解
URL(Uniform Resource Locator)地址用于描述一個網絡上的資源, 基本格式如下:
schema://host[:port#]/path/.../[;url-params][?query-string][#anchor]
scheme ---> 指定低層使用的協(xié)議(例如:http, https, ftp)
host ---> HTTP服務器的IP地址或者域名
port# ---> HTTP服務器的默認端口是80,這種情況下端口號可以省略。如果使用了別的端口,必須指明,例如 http://www.cnblogs.com:8080/
path ---> 訪問資源的路徑
query-string ---> 發(fā)送給http服務器的數據
anchor- ---> 錨
URL 的一個例子:
- 一個常見的連接
http://www.mywebsite.com/sj/test;id=8079?name=sviergn&x=true#stuff
Schema: 指定低層使用的協(xié)議 ---> 協(xié)議為http
host:HTTP服務器的IP地址或者域名 ---> 域名為www.mywebsite.com
path:訪問資源的路徑 ---> 路徑為/sj/test
URL params: ---> id=8079
Query String: 發(fā)送給http服務器的數據 ---> name=sviergn&x=true
Anchor: 錨 ---> stuff
HTTP協(xié)議是無狀態(tài)的
- http協(xié)議是無狀態(tài)的,同一個客戶端的這次請求和上次請求是沒有對應關系,對http服務器來說,它并不知道這兩個請求來自同一個客戶端。 為了解決這個問題, Web程序引入了Cookie機制來維護狀態(tài).
HTTP消息的結構
- 先看
Request消息的結構,Request消息分為3部分,第一部分叫請求行, 第二部分叫http header, 第三部分是body.header和body之間有個空行.
Get和Post方法的區(qū)別
Http協(xié)議定義了很多與服務器交互的方法,最基本的有4種,分別是GET,POST,PUT,DELETE.一個URL地址用于描述一個網絡上的資源,而HTTP中的GET, POST, PUT, DELETE就對應著對這個資源的查,改,增,刪4個操作。 我們最常見的就是GET和POST了。GET一般用于獲取/查詢資源信息,而POST一般用于更新資源信息.區(qū)別:
GET提交的數據會放在URL之后,以?分割URL和傳輸數據,參數之間以&相連,如EditPosts.aspx?name=test1&id=123456. POST方法是把提交的數據放在HTTP包的Body中.GET提交的數據大小有限制(因為瀏覽器對URL的長度有限制),而POST方法提交的數據沒有限制.GET方式需要使用Request.QueryString來取得變量的值,而POST方式通過Request.Form來獲取變量的值。GET方式提交數據,會帶來安全問題,比如一個登錄頁面,通過GET方式提交數據時,用戶名和密碼將出現在URL上,如果頁面可以被緩存或者其他人可以訪問這臺機器,就可以從歷史記錄獲得該用戶的賬號和密碼.
狀態(tài)碼
-
Response消息中的第一行叫做狀態(tài)行,由HTTP協(xié)議版本號, 狀態(tài)碼, 狀態(tài)消息 三部分組成。
狀態(tài)碼用來告訴HTTP客戶端,HTTP服務器是否產生了預期的Response.
-
HTTP/1.1中定義了5類狀態(tài)碼, 狀態(tài)碼由三位數字組成,第一個數字定義了響應的類別
1XX 提示信息 - 表示請求已被成功接收,繼續(xù)處理
2XX 成功 - 表示請求已被成功接收,理解,接受
3XX 重定向 - 要完成請求必須進行更進一步的處理
4XX 客戶端錯誤 - 請求有語法錯誤或請求無法實現
5XX 服務器端錯誤 - 服務器未能實現合法的請求
200 OK:
表明該請求被成功地完成,所請求的資源發(fā)送回客戶端302 Found:
重定向,新的URL會在response中的Location中返回,瀏覽器將會使用新的URL發(fā)出新的Request。304 Not Modified:
代表上次的文檔已經被緩存了, 還可以繼續(xù)使用400 Bad Request:
客戶端請求與語法錯誤,不能被服務器所理解403 Forbidden:
服務器收到請求,但是拒絕提供服務404 Not Found:
請求資源不存在(輸錯了URL)