HTTP 方面知识
簡單講述了HTTP方面知識,學Web開發,怎么可以不懂這方面知識勒。
一、什么是HTTP協議
超文本傳輸協議(Hypertext Transfer Protocol,HTTP)是一個簡單的請求-響應協議,它通常運行在TCP之上。它指定了客戶端可能發送給服務器什么樣的消息以及得到什么樣的響應。請求和響應消息的頭以ASCII形式給出;而消息內容則具有一個類似MIME的格式。這個簡單模型是早期Web成功的有功之臣,因為它使開發和部署非常地直截了當。HTTP協議 屬于 最高層的應用層 --百度百科
計算機網絡體系結構方面的知識,大家想去了解的,可以去找找哦。就是計算機網絡的各層 + 其協議的集合。
二、HTTP 工作原理
HTTP是基于客戶/服務器模式(也就是c/s架構),且面向連接的。典型的HTTP事務處理有如下的過程:
(1)客戶與服務器建立連接;
(2)客戶向服務器提出請求;
(3)服務器接受請求,并根據請求返回相應的文件作為應答;
(4)客戶與服務器關閉連接。
這是粗略的知識點。
我們都知道訪問 www.baidu.com就能到百度的頁面 但是具體的流程是什么樣的勒?
重要:例如:在瀏覽器地址欄鍵入URL,按下回車之后會經歷以下流程:
三、HTTP 請求方式
請求方式一共有9種。
| 1 | GET | 請求指定的頁面信息,并返回實體主體。 |
| 2 | HEAD | 類似于 GET 請求,只不過返回的響應中沒有具體的內容,用于獲取報頭 |
| 3 | POST | 向指定資源提交數據進行處理請求(例如提交表單或者上傳文件)。數據被包含在請求體中。POST 請求可能會導致新的資源的建立和/或已有資源的修改。 |
| 4 | PUT | 從客戶端向服務器傳送的數據取代指定的文檔的內容。 |
| 5 | DELETE | 請求服務器刪除指定的頁面。 |
| 6 | CONNECT | HTTP/1.1 協議中預留給能夠將連接改為管道方式的代理服務器。 |
| 7 | OPTIONS | 允許客戶端查看服務器的性能。 |
| 8 | TRACE | 回顯服務器收到的請求,主要用于測試或診斷。 |
| 9 | PATCH | 是對 PUT 方法的補充,用來對已知資源進行局部更新 。 |
我們最常見到的 就是GET 、POST、PUT、DELETE四種方式。
GET 的話就像你使用百度查詢一樣,查詢的文字會跟在url上。
POST 的話就是你在網頁登錄的微博的時候,這個時候提交表單就會使用POST方式。
PUT的話就是你修改洛谷的名稱的時候 就是用的PUT方式。
DELETE 就是你在刪除你發的第一條微博的時候就可以使用DELETE 方式 。
當然這都不是固定的,是偏向result風格的開發方式而已。其他的也是可以實現的。
四、URL 講解
我們都知道訪問 www.baidu.com就能到百度的頁面 但是這一行url 代表著什么 可能大家并不是那么了解。可能只知道這個url能夠定位到一個網絡上的資源。
url詳解
schema://host[:port#]/path/.../[;url-params][?query-string]- scheme 指定低層使用的協議(例如:http, https, ftp)
- host HTTP服務器的IP地址或者域名
- port# HTTP服務器的默認端口是80,這種情況下端口號可以省略。如果使用了別的端口,必須指明,例如 http://www.cnblogs.com:8080/
- path 訪問資源的路徑
- url-params
- query-string 發送給http服務器的數據
舉個栗子
http://www.crush.com/wyh/blog;id=999?e=sviergn&x=true#stuff Schema: http host: www.crushom path: /wyh/blog URL params: id=999 Query String: name=sviergn&x=true我們之所以常常不需要輸入 “http://” 的部分,因為絕大多數網頁內容是超文本傳輸協議文件。同樣,“80”是超文本傳輸協議文件的常用端口號,因此一般也不必寫明。一般來說用戶只要鍵入統一資源定位符的一部分(www.luffycity.com:80/news/index.html?id=250&page=1)就可以了。
五、HTTP 狀態碼
- 1XX 提示信息 - 表示請求已被成功接收,繼續處理
- 2XX 成功 - 表示請求已被成功接收,理解,接受
- 3XX 重定向 - 要完成請求必須進行更進一步的處理
- 4XX 客戶端錯誤 - 請求有語法錯誤或請求無法實現
- 5XX 服務器端錯誤 - 服務器未能實現合法的請求
如果想要具體知道某一個狀態碼的信息。
這邊建議可以直接查看百度百科 https://baike.baidu.com/item/HTTP
常見的狀態碼
| 200 | 表示從客戶端發送給服務器的請求被正常處理并返回; |
| 301 | 永久性重定向,表示請求的資源被分配了新的URL,之后應使用更改的URL; |
| 302 | 臨時性重定向,表示請求的資源被分配了新的URL,希望本次訪問使用新的URL; |
| 307 | 臨時重定向,與303有著相同的含義,307會遵照瀏覽器標準不會從POST變成GET; |
| 400 | 表示請求報文中存在語法錯誤; |
| 403 | 服務器拒絕訪問(沒有權限訪問) |
| 404 | 表示服務器上無法找到請求的資源 (找不到) |
| 500 | 一般是服務端出現bug或者是一些臨時的錯誤(就是我們的代碼中出現錯誤) |
六、HTTP Request header (請求頭信息)
1.Accept
- Accept: text/html 瀏覽器可以接受服務器回發的類型為 text/html。
- Accept: */* 代表瀏覽器可以處理所有類型,(一般瀏覽器發給服務器都是發這個)。
2.Accept-Encoding
- Accept-Encoding: gzip, deflate 瀏覽器申明自己接收的編碼方法,通常指定壓縮方法,是否支持壓縮,支持什么壓縮方法(gzip,deflate),(注意:這不是只字符編碼)。
3.Accept-Language
- Accept-Language:zh-CN,zh;q=0.9 瀏覽器申明自己接收的語言。
4.Connection
- Connection: keep-alive 當一個網頁打開完成后,客戶端和服務器之間用于傳輸HTTP數據的TCP連接不會關閉,如果客戶端再次訪問這個服務器上的網頁,會繼續使用這一條已經建立的連接。
- Connection: close 代表一個Request完成后,客戶端和服務器之間用于傳輸HTTP數據的TCP連接會關閉, 當客戶端再次發送Request,需要重新建立TCP連接。
5.Host(發送請求時,該報頭域是必需的)
- Host:www.baidu.com 請求報頭域主要用于指定被請求資源的Internet主機和端口號,它通常從HTTP URL中提取出來的。
6.Referer
- Referer:https://www.baidu.com/?tn=62095104_8_oem_dg 當瀏覽器向web服務器發送請求的時候,一般會帶上Referer,告訴服務器我是從哪個頁面鏈接過來的,服務器籍此可以獲得一些信息用于處理。
7.User-Agent
- 告訴HTTP服務器, 客戶端使用的操作系統和瀏覽器的名稱和版本。
8.Cache-Control
- Cache-Control:private 默認為private 響應只能夠作為私有的緩存,不能再用戶間共享
- **\**Cache-Control:public\****響應會被緩存,并且在多用戶間共享。正常情況, 如果要求HTTP認證,響應會自動設置為 private.
- Cache-Control:must-revalidate 響應在特定條件下會被重用,以滿足接下來的請求,但是它必須到服務器端去驗證它是不是仍然是最新的。
- Cache-Control:no-cache 響應不會被緩存,而是實時向服務器端請求資源。
- Cache-Control:max-age=10 設置緩存最大的有效時間,但是這個參數定義的是時間大小(比如:60)而不是確定的時間點。單位是[秒 seconds]。
- **Cache-Control:no-store**在任何條件下,響應都不會被緩存,并且不會被寫入到客戶端的磁盤里,這也是基于安全考慮的某些敏感的響應才會使用這個。
9.Cookie
Cookie是用來存儲一些用戶信息以便讓服務器辨別用戶身份的(大多數需要登錄的網站上面會比較常見),比如cookie會存儲一些用戶的用戶名和密碼,當用戶登錄后就會在客戶端產生一個cookie來存儲相關信息,這樣瀏覽器通過讀取cookie的信息去服務器上驗證并通過后會判定你是合法用戶,從而允許查看相應網頁。當然cookie里面的數據不僅僅是上述范圍,還有很多信息可以存儲是cookie里面,比如sessionid等。
參考:https://juejin.cn/post/6844903745004765198
七、Http Response header (返回頭信息)
| Allow | 服務器支持哪些請求方法(如GET、POST等)。 |
| Content-Encoding | 文檔的編碼(Encode)方法。只有在解碼之后才可以得到Content-Type頭指定的內容類型。 |
| Content-Length | 表示內容長度。只有當瀏覽器使用持久HTTP連接時才需要這個數據。 |
| Content-Type | 表示后面的文檔屬于什么MIME類型。Servlet默認為text/plain, |
| Date | 當前的GMT時間。你可以用setDateHeader來設置這個頭以避免轉換時間格式的麻煩。 |
| Expires | 應該在什么時候認為文檔已經過期,從而不再緩存它? |
| Last-Modified | 文檔的最后改動時間。 |
| Location | 表示客戶應當到哪里去提取文檔。 |
| Refresh | 表示瀏覽器應該在多少時間之后刷新文檔,以秒計。 |
| Server | 服務器名字。Servlet一般不設置這個值,而是由Web服務器自己設置。 |
| Set-Cookie | 設置和頁面關聯的Cookie。 |
| WWW-Authenticate | 客戶應該在Authorization頭中提供什么類型的授權信息? |
常見的媒體格式類型如下:
- text/html : HTML格式
- text/plain :純文本格式
- text/xml : XML格式
- image/gif :gif圖片格式
- image/jpeg :jpg圖片格式
- image/png:png圖片格式
以application開頭的媒體格式類型:
- application/json: JSON數據格式
- application/xhtml+xml :XHTML格式
另外一種常見的媒體格式是上傳文件之時使用的:
- multipart/form-data : 需要在表單中進行文件上傳時,就需要使用該格式
八、參考:
九、日常自言自語
劃水劃完啦。
總結
- 上一篇: Tomcat 下载安装、配置、启动、报错
- 下一篇: Java 连接数据库 JDBCUtil