- HTTP協議是什么?
協議是指計算機通信網絡中兩台計算機之間進行通信所必須共同遵守的法定活規則,超文本傳輸協議(HTTP)是一種通信協議,它允許將超文本標記語言文檔從web服務器傳送到客戶端的瀏覽器。
目前我們使用的是HTTP/1.1版本
2. HTTP協議的特點
- 支持客戶端/服務器模式
- 無狀態,此處的無狀態是指對事務無記憶能力,如果后續需要這些信息,那么需要重新傳遞獲取數據。
- 簡單快速,客戶端只需要發送請求方法和路徑到服務端,請求方式有 get,post,head,put,delete,options,trace,關於此處的解釋移步此處.
- 無連接,指每次處理只限制處理一個連接.服務器處理完客戶的請求,並收到客戶的應答后,即斷開連接。采用這種方式可以節省傳輸時間。
- 靈活,HTTP請求允許發送任意類型的數據。當前請求類型可以查看Content-Type
主要是URL 和 HTTP請求 HTTP響應 三個部分
- URL篇
URL(uniform resource locator)地址用於描述一個網絡上的資源,基本格式如下
schema://host[ports#]/path/.../[?query string][#author]
scheme 指定底層使用的協議(例如:http,https,ftp)
host HTTP服務器的IP地址或者域名
port# HTTP服務的默認端口是80,這種情況下端口號可以省略。如果使用了別的端口,必須指明,例如http://www.cnblogs.com:8080
path 訪問資源的路徑
query-string 發送給http服務器的數據
anchor 錨
- HTTP請求響應篇
headers
- general
Remote Address:最終請求服務器地址
Request URL:請求完整的路徑
Request Method:請求類型,常用的(get,post等)
Status Code:請求狀態碼
狀態代碼有三位數字組成,第一個數字定義了響應的類別,且有五種可能取值: 1xx:指示信息--表示請求已接收,繼續處理 2xx:成功--表示請求已被成功接收、理解、接受 3xx:重定向--要完成請求必須進行更進一步的操作 4xx:客戶端錯誤--請求有語法錯誤或請求無法實現 5xx:服務器端錯誤--服務器未能實現合法的請求 常見狀態代碼、狀態描述、說明: 200 OK //客戶端請求成功 400 Bad Request //客戶端請求有語法錯誤,不能被服務器所理解 401 Unauthorized //請求未經授權,這個狀態代碼必須和WWW-Authenticate報頭域一起使用 403 Forbidden //服務器收到請求,但是拒絕提供服務 404 Not Found //請求資源不存在,eg:輸入了錯誤的URL 500 Internal Server Error //服務器發生不可預期的錯誤 503 Server Unavailable //服務器當前不能處理客戶端的請求,一段時間后可能恢復正常
2. Request Headers
- Accept:指定客戶端能夠接收的內容類型,內容類型中的先后次序表示客戶端接收的先后次序。
- Accept-Encoding:指定客戶端瀏覽器可以支持的web服務器返回內容壓縮編碼類型。表示允許服務器在將輸出內容發送到客戶端以前進行壓縮,以節約帶寬。而這里設置的就是客戶端瀏覽器所能夠支持的返回壓縮格式。
- Accept-Language:指定HTTP客戶端瀏覽器用來展示返回信息所優先選擇的語言(zh-cn,zh;q=0.5這里默認為中文。)
- Cache-Control:Cache -Control指定請求和響應遵循的緩存機制。在請求消息或響應消息中設置 Cache-Control並不會修改另一個消息處理過程中的緩存處理過程。請求時的緩存指令包括no-cache、no-store、max-age、 max-stale、min-fresh、only-if-cached,響應消息中的指令包括public、private、no-cache、no- store、no-transform、must-revalidate、proxy-revalidate、max-age。各個消息中的指令含義如 下:
Public指示響應可被任何緩存區緩存。 Private指示對於單個用戶的整個或部分響應消息,不能被共享緩存處理。這允許服務器僅僅描述當用戶的部分響應消息,此響應消息對於其他用戶的請求無效。 no-cache指示請求或響應消息不能緩存 no-store用於防止重要的信息被無意的發布。在請求消息中發送將使得請求和響應消息都不使用緩存。 max-age指示客戶機可以接收生存期不大於指定時間(以秒為單位)的響應。 min-fresh指示客戶機可以接收響應時間小於當前時間加上指定時間的響應。 max-stale指示客戶機可以接收超出超時期間的響應消息。如果指定max-stale消息的值,那么客戶機可以接收超出超時期指定值之內的響應消息。
- Connection :表示是否需要持久連接。如果web服務器端看到這里的值為“Keep-Alive”,或者看到請求使用的是HTTP 1.1(HTTP 1.1默認進行持久連接),它就可以利用持久連接的優點,當頁面包含多個元素時(例如Applet,圖片),顯著地減少下載所需要的時間。要實現這一點, web服務器需要在返回給客戶端HTTP頭信息中發送一個Content-Length(返回信息正文的長度)頭,最簡單的實現方法是:先把內容寫入ByteArrayOutputStream,然 后在正式寫出內容之前計算它的大小。
- Cookie: HTTP請求發送時,會把保存在該請求域名下的所有cookie值一起發送給web服務器。
- Host:請求的web服務器域名地址
- Origin:請求來源
- Pragma:Pragma頭域用來包含實現特定的指令,最常用的是Pragma:no-cache。在HTTP/1.1協議中,它的含義和Cache- Control:no-cache相同。
- Referer:包含一個URL,用戶從該URL代表的頁面出發訪問當前請求的頁面
- User-Agent:HTTP客戶端運行的瀏覽器類型的詳細信息。通過該頭部信息,web服務器可以判斷到當前HTTP請求的客戶端瀏覽器類別。
Response Headers
- Access-Control-Allow-Credentials:允許跨域
- Access-Control-Allow-Headers:表示服務器接受自定義請求頭,設置瀏覽器允許訪問的服務器的頭信息的白名單:
- Access-Control-Allow-Origin:origin參數指定一個允許向該服務器提交請求的URI.對於一個不帶有credentials的請求,可以指定為'*',表示允許來自所有域的請求.
- X-Powered-By:web應用框架信息
- Server:web服務器的版本。通常我們會看到 “Microsoft-IIS/7.5”, “nginx/1.0.11” 和 “Apache”這樣的字段。