HTTP協議 學習

                HTTP協議 學習

首先 附上 官方解釋 和 別人的總結

官方解釋 打開後 第14 Header Field Definitions 將header說的很清楚

http協議總結–厲害

http protocol (超文本傳輸協議) 主要用於瀏覽器和web服務器之間的通信. 而且一般明文傳輸 如果需要加密傳輸 可以使用 https

http協議由三部分組成:

  • 請求行 : 方法(post get等) [空格] 請求URI [空格] 版本號 [回車換行]

    如: GET /index.html HTTP/1.1

    POST http://192.168.2.217:8080/index.jsp HTTP/1.1

  • 頭信息(分爲 通用消息頭 | 請求頭 | 實體頭 | 響應頭) 每個頭域由一個域名,冒號(:)和域值三部分組成. 頭信息結束時需要一個空行和實體數據部分分開

    實體頭包括Allow、Content- Base、Content-Encoding、Content-Language、 Content-Length、Content-Location、Content-MD5、Content-Range、Content-Type(這個很重要)、 Etag、Expires、Last-Modified、extension-header。

    Accept-Encoding:瀏覽器能夠進行解碼的數據編碼方式,比如gzip。Servlet能夠向支持gzip的瀏覽器返回經gzip編碼的HTML頁面。許多情形下這可以減少5到10倍的下載時間;

    Accept代表請求頭 – specify certain media types which are acceptable for the response. 就是表名客戶端希望接受的MIME類型.

    比如:Accept:text/xml; 代表客戶端希望接受的數據類型是xml類型

    Content-Type代表發送端(客戶端|服務器)發送的實體數據的數據類型。
    比如:Content-Type:text/html; 代表發送端發送的數據格式是html。

    二者合起來,
    Accept:text/xml;
    Content-Type:text/html
    即代表希望接受的數據類型是xml格式,本次請求發送的數據的數據格式是html。

    具體查看:https://kb.cnblogs.com/page/92320/

  • 實體內容 實體數據在請求時,如果以post方式提交時存儲參數,以get方式請求時爲空。在響應時,存儲服務器端反饋的HTML源代碼的數據

Content-Type

類型速查表:http://www.runoob.com/http/http-content-type.html

常見的cotent-Type的值

  1. application/x-www-form-urlencoded

    這個在form表單提交的時候 不設置enctype屬性 則會以這種方式提交 如:

    POST http://www.example.com HTTP/1.1
    Content-Type: application/x-www-form-urlencoded;charset=utf-8
    title=test&sub%5B%5D=1&sub%5B%5D=2&sub%5B%5D=3

    首先,Content-Type 被指定爲 application/x-www-form-urlencoded;
    其次,提交的數據按照 key1=val1&key2=val2 的方式進行編碼,key 和 val 都進行了 URL 轉碼。

  2. multipart/form-data

    form上設置enctype=”multipart/form-data” 或 上傳文件時也會 如在js中利用formData上傳視頻或圖片 content-Type爲multipart/form-data

    POST http://www.example.com HTTP/1.1
    Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryrGKCBY7qhFd3TrwA
    ------WebKitFormBoundaryrGKCBY7qhFd3TrwA
    Content-Disposition: form-data; name="text"
    title
    ------WebKitFormBoundaryrGKCBY7qhFd3TrwA
    Content-Disposition: form-data; name="file"; filename="chrome.png"
    Content-Type: image/png
    PNG ... content of chrome.png ...
    ------WebKitFormBoundaryrGKCBY7qhFd3TrwA--

    首先生成了一個 boundary 用於分割不同的字段(這個在form-data後面一般都有的),爲了避免與正文內容重複,boundary 很長很複雜.

    然後 Content-Type 裏指明瞭數據是以 mutipart/form-data 來編碼,本次請求的 boundary 是什麼內容。消息主體裏按照字段個數又分爲多個結構類似的部分,每部分都是以 –boundary 開始,緊接着內容描述信息,然後是回車,最後是字段具體內容(文本或二進制)。如果傳輸的是文件,還要包含文件名和文件類型信息。消息主體最後以 –boundary– 標示結束

  3. application/json

    用來告訴服務端消息主體是序列化後的 JSON 字符串.各大瀏覽器都原生支持 JSON.stringify,服務端語言也都有處理 JSON 的函數,使用 JSON 不會遇上什麼麻煩。

以前在提交表單的時候 後臺有的時候獲取不到值 會認爲是 後臺問題 這個時候 可以看看在google瀏覽器F12 下的Network裏查看前臺是否有你發送的數據(在query parameters 或其他 地方)

常用的請求方式是GET和POST.

GET方式:是以實體的方式得到由請求URI所指定資源的信息,如果請求URI只是一個數據產生過程,那麼最終要在響應實體中返回的是處理過程的結果所指向的資源,而不是處理過程的描述。

​ POST方式:用來向目的服務器發出請求,要求它接受被附在請求後的實體,並把它當作請求隊列中請求URI所指定資源的附加新子項,Post被設計成用統一的方法實現下列功能:

1:對現有資源的解釋;

2:向電子公告欄、新聞組、郵件列表或類似討論組發信息;

3:提交數據塊;

4:通過附加操作來擴展數據庫 。

從上面描述可以看出,Get是向服務器發索取數據的一種請求;而Post是向服務器提交數據的一種請求,要提交的數據位於信息頭後面的實體中。

GET與POST方法有以下區別:

(1) 在客戶端,Get方式在通過URL提交數據,數據在URL中可以看到;POST方式,數據放置在HTML HEADER內提交。

(2) GET方式提交的數據最多只能有1024字節,而POST則沒有此限制。

(3) 安全性問題。正如在(1)中提到,使用 Get 的時候,參數會顯示在地址欄上,而 Post 不會。所以,如果這些數據是中文數據而且是非敏感數據,那麼使用 get;如果用戶輸入的數據不是中文字符而且包含敏感數據,那麼還是使用 post爲好。

這個參考:http://www.blogjava.net/zjusuyong/articles/304788.html
更多 參考:https://blog.csdn.net/J080624/article/details/71104309

http狀態碼

分爲5類

分類 分類描述
1** 信息,服務器收到請求,需要請求者繼續執行操作
2** 成功,操作被成功接收並處理
3** 重定向,需要進一步的操作以完成請求
4** 客戶端錯誤,請求包含語法錯誤或無法完成請求
5** 服務器錯誤,服務器在處理請求的過程中發生了錯誤
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章