Day 56 (08/17) bookstrap、HTTP協議

來源:互聯網
上載者:User

標籤:protocol   webp   scale   control   圓形   eth   for   block   secure   

一 HTTP 概述

HTTP(hypertext transport protocol),即超文字傳輸通訊協定 (HTTP)。這個協議詳細規定了瀏覽器和全球資訊網伺服器之間互相通訊的規則。

HTTP就是一個通訊規則,通訊規則規定了用戶端發送給伺服器的內容格式,也規定了伺服器發送給用戶端的內容格式。其實我們要學習的就是這個兩個格式!用戶端發送給伺服器的格式叫“請求協議”;伺服器發送給用戶端的格式叫“響應協議”。

特點:

  • HTTP叫超文字傳輸通訊協定 (HTTP),基於請求/響應模式的!
  • HTTP是無狀態協議。

URL:統一資源定位器,就是一個網址:協議名://網域名稱:連接埠/路徑,例如:http://www.oldboy.cn:80/index.html

二 請求協議

請求協議的格式如下:

請求首行;  // 請求方式 請求路徑 協議和版本,例如:GET /index.html HTTP/1.1要求標頭資訊;// 要求標頭名稱:要求標頭內容,即為key:value格式,例如:Host:localhost空行;     // 用來與請求體分隔開請求體。   // GET沒有請求體,只有POST有請求體。

瀏覽器發送給伺服器的內容就這個格式的,如果不是這個格式伺服器將無法解讀!在HTTP協議中,請求有很多要求方法,其中最為常用的就是GET和POST。不同的要求方法之間的區別,後面會一點一點的介紹。

2.1 GET請求

HTTP預設的要求方法就是GET
     * 沒有請求體
     * 資料必須在1K之內!
     * GET請求資料會暴露在瀏覽器的地址欄中

GET請求常用的操作:
       1. 在瀏覽器的地址欄中直接給出URL,那麼就一定是GET請求
       2. 點擊頁面上的超連結也一定是GET請求
       3. 提交表單時,表單預設使用GET請求,但可以設定為POST

Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8Accept-Encoding:gzip, deflate, sdchAccept-Language:zh-CN,zh;q=0.8Cache-Control:no-cacheConnection:keep-aliveCookie:csrftoken=z5H43ZwARx7AIJ82OEizBOWbsAQA2LPkHost:127.0.0.1:8090Pragma:no-cacheUpgrade-Insecure-Requests:1User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.89 Safari/537.36Namelogin/1 requests???737?B transferred???Finish: 5?ms???DOMContentLoaded: 14?ms???Load: 14?ms
  • GET 127.0.0.1:8090/login  HTTP/1.1:GET請求,請求伺服器路徑為  127.0.0.1:8090/login ,協議為1.1;
  • Host:localhost:請求的主機名稱為localhost;
  • *User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0:與瀏覽器和OS相關的資訊。有些網站會顯示使用者的系統版本和瀏覽器版本資訊,這都是通過擷取User-Agent頭資訊而來的;
  •  Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8:告訴伺服器,當前用戶端可以接收的文件類型,其實這裡包含了*/*,就表示什麼都可以接收;
  • Accept-Language: zh-cn,zh;q=0.5:當前用戶端支援的語言,可以在瀏覽器的工具?選項中找到語言相關資訊;
  • Accept-Encoding: gzip, deflate:支援的壓縮格式。資料在網路上傳遞時,可能伺服器會把資料壓縮後再發送;
  • Accept-Charset: GB2312,utf-8;q=0.7,*;q=0.7:用戶端支援的編碼;
  • Connection: keep-alive:用戶端支援的連結方式,保持一段時間連結,預設為3000ms;
  • Cookie: JSESSIONID=369766FDF6220F7803433C0B2DE36D98:因為不是第一次訪問這個地址,所以會在請求中把上一次伺服器響應中發送過來的Cookie在請求中一併發送去過;這個Cookie的名字為JSESSIONID。
注意 View Code2.2 POST請求

(1). 資料不會出現在地址欄中
(2). 資料的大小沒有上限
(3). 有請求體
(4). 請求體中如果存在中文,會使用URL編碼!

1 username=%E5%BC%A0%E4%B8%89&password=123
 為什麼要進行URL編碼

使用表單可以發POST請求,但表單預設是GET

1234 <form action="" method="post">  關鍵字:<input type="text" name="keyword"/>  <input type="submit" value="提交"/></form>

輸入yuan後點擊提交,查看請求內容如下:

Request HeadersAccept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8Accept-Encoding:gzip, deflateAccept-Language:zh-CN,zh;q=0.8Cache-Control:no-cacheConnection:keep-aliveContent-Length:13Content-Type:application/x-www-form-urlencodedCookie:csrftoken=z5H43ZwARx7AIJ82OEizBOWbsAQA2LPkHost:127.0.0.1:8090Origin:http://127.0.0.1:8090Pragma:no-cacheReferer:http://127.0.0.1:8090/login/Upgrade-Insecure-Requests:1User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_1) 
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.89 Safari/537.36
Form Datausername:yuan

POST請求是可以有體的,而GET請求不能有請求體。

  • Referer: http://localhost:8080/hello/index.jsp:請求來自哪個頁面,例如你在百度上點選連結到了這裡,那麼Referer:http://www.baidu.com;如果你是在瀏覽器的地址欄中直接輸入的地址,那麼就沒有Referer這個要求標頭了;
  • Content-Type: application/x-www-form-urlencoded:表單的資料類型,說明會使用url格式編碼資料;url編碼的資料都是以“%”為首碼,後面跟隨兩位的16進位。
  • Content-Length:13:請求體的長度,這裡表示13個位元組。
  • keyword=hello:請求體內容!hello是在表單中輸入的資料,keyword是表單欄位的名字。
 Referer的應用  響應協議3.1 響應內容

響應協議的格式如下:

響應首行;回應標頭資訊;空行;響應體。

響應內容是由伺服器發送給瀏覽器的內容,瀏覽器會根據響應內容來顯示。遇到<img src=‘‘>會開一個新的線程載入,所以有時圖片多的話,內容會先顯示出來,然後圖片才一張張載入出來。

Request URL:http://127.0.0.1:8090/login/Request Method:GETStatus Code:200 OKRemote Address:127.0.0.1:8090Response Headersview sourceContent-Type:text/html; charset=utf-8Date:Wed, 26 Oct 2016 06:48:50 GMTServer:WSGIServer/0.2 CPython/3.5.2X-Frame-Options:SAMEORIGIN<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>Title</title></head><body><form action="/login/" method="post">  使用者名稱:<input type="text" name="username"/>  <input type="submit" value="提交"/></form>    </body></html>
  • HTTP/1.1 200 OK:響應協議為HTTP1.1,狀態代碼為200,表示請求成功,OK是對狀態代碼的解釋;
  • Server:WSGIServer/0.2 CPython/3.5.2:伺服器的版本資訊;
  • Content-Type: text/html;charset=UTF-8:響應體使用的編碼為UTF-8;
  • Content-Length: 724:響應體為724位元組;
  • Set-Cookie: JSESSIONID=C97E2B4C55553EAB46079A4F263435A4; Path=/hello:響應給用戶端的Cookie;
  • Date: Wed, 25 Sep 2012 04:15:03 GMT:響應的時間,這可能會有8小時的時區差;
3.2 狀態碼

回應標頭對瀏覽器來說很重要,它說明了響應的真正含義。例如200表示響應成功了,302表示重新導向,這說明瀏覽器需要再發一個新的請求。

  • 200:請求成功,瀏覽器會把響應體內容(通常是html)顯示在瀏覽器中;
  • 404:請求的資源沒有找到,說明用戶端錯誤的請求了不存在的資源;
  • 500:請求資源找到了,但伺服器內部出現了錯誤;
  • 302:重新導向,當響應碼為302時,表示伺服器要求瀏覽器重新再發一個請求,伺服器會發送一個回應標頭Location,它指定了新請求的URL地址;
  • 304:
      當使用者第一次請求index.html時,伺服器會添加一個名為Last-Modified回應標頭,這個頭說明了  index.html的最後修改時間,瀏覽器會把index.html內容,以及最後回應時間緩衝下來。當使用者第  二次請求index.html時,在請求中包含一個名為If-Modified-Since要求標頭,它的值就是第一次請  求時伺服器通過Last-Modified回應標頭發送給瀏覽器的值,即index.html最後的修改時間,  If-Modified-Since要求標頭就是在告訴伺服器,我這裡瀏覽器緩衝的index.html最後修改時間是這個,  您看看現在的index.html最後修改時間是不是這個,如果還是,那麼您就不用再響應這個index.html  內容了,我會把緩衝的內容直接顯示出來。而伺服器端會擷取If-Modified-Since值,與index.html  的當前最後修改時間比對,如果相同,伺服器會發響應碼304,表示index.html與瀏覽器上次緩衝的相  同,無需再次發送,瀏覽器可以顯示自己的快取頁面面,如果比對不同,那麼說明index.html已經做了修  改,伺服器會響應200。
         3.3 其他回應標頭

告訴瀏覽器不要緩衝的回應標頭:

  • Expires: -1;
  • Cache-Control: no-cache;
  • Pragma: no-cache;

自動重新整理回應標頭,瀏覽器會在3秒之後請求http://www.baidu.com:

  • Refresh: 3;url=http://www.baidu.com 
3.4 HTML中指定回應標頭

在HTMl頁面中可以使用<meta http-equiv="" content="">來指定回應標頭,例如在index.html頁面中給出<meta http-equiv="Refresh" content="3;url=http://www.baidu.com">,表示瀏覽器只會顯示index.html頁面3秒,然後自動跳轉到http://www.baidu.com.

  http://www.cnblogs.com/yuanchenqi/articles/6000358.html詳細參考老師部落格  

 

Day 56 (08/17) bookstrap、HTTP協議

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.