http 常見的一些問題點的總結(jié)

1. URL詳解

  1. url(Uniform Resource Locator)地址用于描述一個網(wǎng)絡(luò)上的資源,基本的格式如下:

    scheme://host[:port#]/path/.../[;url-parms][?query-string][#anchor]
    
    • scheme指定底層使用的協(xié)議(例如:ftp,https)
    • host HTTP服務(wù)器的IP地址或者域名
    • port#HTTP服務(wù)器默認(rèn)的端口是80,這種情況下端口號可以省略。如果使用了別的端口必須指定
    • path訪問資源的路徑
    • url-params
    • query-strring發(fā)送給服務(wù)器的數(shù)據(jù)
    • anchor-錨
  2. 理解url和urn以及uri的區(qū)別

    1. uri是統(tǒng)一資源定位符,包含了url和urn
    2. url是一個地址,某個對象的地址
    3. urn是一個唯一表示符,通過找個也可以找到資源;

2、 Http的頭域理解

1.請求頭域的相關(guān)知識點
  1. If-Modified-Since 把瀏覽器緩存頁面的最后修改時間發(fā)送到服務(wù)器,服務(wù)器會把這個時間與服務(wù)器上的最后修改時間做對比,若一致返回304,不一致,則返回200,外加文件新的內(nèi)容,收到之后就會緩存加顯示
  2. If-None-Match:If-None-Match和ETag一起工作,主要的原理就是Http Resourcre里面加入ETag信息,當(dāng)用戶在此請求資源的時,姜在request中加入If-None-Match信息(也就是ETag值),服務(wù)器驗證資源的ETag有沒有改變,若改變了返回200外加資源,沒有則返回304
  3. Pragma :指定no-cache值表示服務(wù)器必須返回一個刷新后的文檔和Cache-Control中的no-cache一樣
  4. Cache-Control:指定請求和相應(yīng)遵循的緩存機制,緩存指令是單向的且是獨立的;請求時的緩存指令包括no-cache、no-store、max-age、max-stale、min-fresh、only-if-cached,響應(yīng)消息中的指令包括public、private、no-cache、no-store、no-transform、must-revalidate、proxy-revalidate、max-age、s-maxage。
    1. Cache-Control:Public 可以被任何緩存所緩存
    2. Cache-Control:Private 內(nèi)容只緩存到私有緩存中
    3. Cache-Control:no-cache 所有內(nèi)容都不會被緩存
    4. Cache-Control:no-store 用于防止重要的信息被無意的發(fā)布。在請求消息中發(fā)送將使得請求和響應(yīng)消息都不使用緩存。
    5. Cache-Control:max-age 指示客戶機可以接收生存期不大于指定時間(以秒為單位)的響應(yīng)。
    6. Cache-Control:min-fresh 指示客戶機可以接收響應(yīng)時間小于當(dāng)前時間加上指定時間的響應(yīng)
    7. Cache-Control:max-stale 指示客戶機可以接收超出超時期間的響應(yīng)消息。如果指定max-stale消息的值,那么客戶機可以接收超出超時期指定值之內(nèi)的響應(yīng)消息。
  5. Accept:瀏覽器端可以接受的MIME類型。如:Accept:text/html Accept: text/html 代表瀏覽器可以接受服務(wù)器回發(fā)的類型為 text/html 也就是我們常說的html文檔,如果服務(wù)器無法返回text/html類型的數(shù)據(jù),服務(wù)器應(yīng)該返回一個406錯誤(non acceptable)。通配符 * 代表任意類型,例如 Accept: / 代表瀏覽器可以處理所有類型,(一般瀏覽器發(fā)給服務(wù)器都是發(fā)這個)。
  6. Accept-Encoding:瀏覽器申明自己可接受的編碼方法,通常指定的壓縮方法,是否支持壓縮,支持什么壓縮方法(gzip,deflate);如果請求消息中沒有設(shè)置這個域,服務(wù)器假定客戶端對各種內(nèi)容的編碼都可以接受
  7. Accept-Language:瀏覽器申明自己接受的語言,語言和字符集的區(qū)別:中文是語言,中文有多種字符集比如gbk,gb2312等;例如:Accept-Language: en-us。如果請求消息中沒有設(shè)置這個報頭域,服務(wù)器假定客戶端對各種語言都可以接受。
  8. Accept-charset:瀏覽器可接受的字符集。如果在請求消息中沒有設(shè)置這個域,缺省表示任何字符集都可以接受。
  9. User-Agent:告訴HTTP服務(wù)器,客戶端使用的操作系統(tǒng)和瀏覽器的名稱和版本
  10. Content-Type:如:Content-Type:application\x-www-form-urlencoded
  11. Referer:包含一個URL,用戶從該URL代表的頁面出發(fā)訪問當(dāng)前請求的頁面。提供了Request的上下文信息的服務(wù)器,告訴服務(wù)器我是從哪個鏈接過來的,比如從我主頁上鏈接到一個朋友那里,他的服務(wù)器就能夠從HTTP Referer中統(tǒng)計出每天有多少用戶點擊我主頁上的鏈接訪問他的網(wǎng)站。
  12. Connection:例如:Connection: keep-alive 當(dāng)一個網(wǎng)頁打開完成后,客戶端和服務(wù)器之間用于傳輸HTTP數(shù)據(jù)的TCP連接不會關(guān)閉,如果客戶端再次訪問這個服務(wù)器上的網(wǎng)頁,會繼續(xù)使用這一條已經(jīng)建立的連接。HTTP 1.1默認(rèn)進(jìn)行持久連接。利用持久連接的優(yōu)點,當(dāng)頁面包含多個元素時(例如Applet,圖片),顯著地減少下載所需要的時間。要實現(xiàn)這一點,Servlet需要在應(yīng)答中發(fā)送一個Content-Length頭,最簡單的實現(xiàn)方法是:先把內(nèi)容寫入ByteArrayOutputStream,然后在正式寫出內(nèi)容之前計算它的大小。Connection: close 代表一個Request完成后,客戶端和服務(wù)器之間用于傳輸HTTP數(shù)據(jù)的TCP連接會關(guān)閉,當(dāng)客戶端再次發(fā)送Request,需要重新建立TCP連接。
  13. Host:主要用于指定被請求資源的Internet主機和端口號,它通常從HTTP URL中提取出來的。HTTP/1.1請求必須包含主機頭域,否則系統(tǒng)會以400狀態(tài)碼返回。
  14. Cookie:最重要的請求頭之一, 將cookie的值發(fā)送給HTTP服務(wù)器。
  15. Content-Lenth:表示請求消息正文的長度。例如:Content-Length: 38。
  16. Authorization:授權(quán)信息通常出現(xiàn)在對服務(wù)器發(fā)送的WWW-Authenticate頭的應(yīng)答中。主要用于證明客戶端有權(quán)查看某個資源。當(dāng)瀏覽器訪問一個頁面時,如果收到服務(wù)器的響應(yīng)代碼為401(未授權(quán)),可以發(fā)送一個包含Authorization請求報頭域的請求,要求服務(wù)器對其進(jìn)行驗證。
    UA-Pixels,UA-Color,UA-OS,UA-CPU:由某些版本的IE瀏覽器所發(fā)送的非標(biāo)準(zhǔn)的請求頭,表示屏幕大小、顏色深度、操作系統(tǒng)和CPU類型。
  17. Range:可以請求實體的一個或者多個子范圍
2.響應(yīng)頭域
  1. Allow:服務(wù)器支持那些請求的方法;
  2. Date:表示消息發(fā)送的時間
  3. Expires:指明應(yīng)該在什么時候認(rèn)為文檔已經(jīng)過期,從而不在緩存它,要從服務(wù)器上獲取,更新緩存,過期之前使用本地緩存,HTTP1.1的客戶端和緩存會姜非法的日期格式看做已經(jīng)過期;eg:為了讓瀏覽器不要緩存頁面,我們也可以將Expires實體報頭域,設(shè)置為0。例如: Expires: Tue, 08 Feb 2022 11:35:14 GMT
  4. P3P:用于跨域設(shè)置Cookie,這樣可以解決iframe跨域訪問cookie的問題;
  5. set-Cookie:非常重要的header,用于把從cookie發(fā)送到客戶端瀏覽器,每一個寫入cookie都會生成一個set-Cookie;例如: Set-Cookie: sc=4c31523a; path=/; domain=.acookie.taobao.com
  6. ETag:和If-None-Match 配合使用。
  7. Last-Modified:用于指示資源的最后修改日期和時間。Last-Modified也可用setDateHeader方法來設(shè)置。
  8. Content-Type:WEB服務(wù)器告訴瀏覽器自己響應(yīng)的對象的類型和字符集。Servlet默認(rèn)為text/plain,但通常需要顯式地指定為text/html。由于經(jīng)常要設(shè)置Content-Type,因此HttpServletResponse提供了一個專用的方法setContentType。可在web.xml文件中配置擴展名和MIME類型的對應(yīng)關(guān)系。
  9. Content-Range:用于指定整個實體中的一部分的插入位置,他也指示了整個實體的長度。在服務(wù)器向客戶返回一個部分響應(yīng),它必須描述響應(yīng)覆蓋的范圍和整個實體長度。一般格式:Content-Range:bytes-unitSPfirst-byte-pos-last-byte-pos/entity-length。
    例如,傳送頭500個字節(jié)次字段的形式:Content-Range:bytes0-499/1234如果一個http消息包含此節(jié)(例如,對范圍請求的響 應(yīng)或?qū)σ幌盗蟹秶闹丿B請求),Content-Range表示傳送的范圍。
  10. Content-Length:指明實體正文的長度,以字節(jié)方式存儲的十進(jìn)制數(shù)字來表示。在數(shù)據(jù)下行的過程中,Content-Length的方式要預(yù)先在服務(wù)器中緩存所有數(shù)據(jù),然后所有數(shù)據(jù)再一股腦兒地發(fā)給客戶端。只有當(dāng)瀏覽器使用持久HTTP連接時才需要這個數(shù)據(jù)。
  11. Content-Encoding:WEB服務(wù)器表明自己使用了什么壓縮方法(gzip,deflate)壓縮響應(yīng)中的對象。只有在解碼之后才可以得到Content-Type頭指定的內(nèi)容類型。利用gzip壓縮文檔能夠顯著地減少HTML文檔的下載時間。
  12. Content-Language:WEB服務(wù)器告訴瀏覽器自己響應(yīng)的對象所用的自然語言。例如: Content-Language:da。沒有設(shè)置該域則認(rèn)為實體內(nèi)容將提供給所有的語言閱讀。
  13. Server:指明Http服務(wù)器用來處理請求的軟件信息;例如:Server: Microsoft-IIS/7.5、Server:Apache-Coyote/1.1。此域能包含多個產(chǎn)品標(biāo)識和注釋,產(chǎn)品標(biāo)識一般按照重要性排序。
  14. Connection:例如:Connection: keep-alive 當(dāng)一個網(wǎng)頁打開完成后,客戶端和服務(wù)器之間用于傳輸HTTP數(shù)據(jù)的TCP連接不會關(guān)閉,如果客戶端再次訪問這個服務(wù)器上的網(wǎng)頁,會繼續(xù)使用這一條已經(jīng)建立的連接。
    Connection: close 代表一個Request完成后,客戶端和服務(wù)器之間用于傳輸HTTP數(shù)據(jù)的TCP連接會關(guān)閉,當(dāng)客戶端再次發(fā)送Request,需要重新建立TCP連接。
  15. Location:用于重定向一個新的位置,包含新的URL地址。表示客戶應(yīng)當(dāng)?shù)侥睦锶ヌ崛∥臋n。Location通常不是直接設(shè)置的,而是通過HttpServletResponse的sendRedirect方法,該方法同時設(shè)置狀態(tài)代碼為302。Location響應(yīng)報頭域常用在更換域名的時候。
  16. Refresh:表示瀏覽器應(yīng)該在多少時間之后刷新文檔,以秒計
  17. WWW-Authenticate:該響應(yīng)報頭域必須被包含在401(未授權(quán)的)響應(yīng)消息中,客戶端收到401響應(yīng)消息時候,并發(fā)送Authorization報頭域請求服務(wù)器對其進(jìn)行驗證時,服務(wù)端響應(yīng)報頭就包含該報頭域。

3、 緩存的實現(xiàn)原理

  1. 實現(xiàn)原理:緩存會根據(jù)請求保存輸出內(nèi)容的副本,當(dāng)下一個請求來的時候若是同URL,緩存直接使用副本響應(yīng)訪問請求而不用向源服務(wù)器再次發(fā)送請求;
  2. 客戶端緩存生效的常見流程:服務(wù)器收到請求時,會在200OK中回送該資源的Last-Modified和ETag頭,客戶端將該資源保存在cache中,并記錄這兩個屬性,當(dāng)客戶端需要發(fā)送相同請求的時候,會在請求中攜帶If-Modified-since和If-None-Match兩個頭,兩個頭分別響應(yīng)中的Last-Modified和ETag的值,服務(wù)器通過這兩個值判斷本地資源未發(fā)生變化,客戶端不需要下載返回304;
  3. 緩存機制
    1. Freshness:允許一個回應(yīng)消息可以在源服務(wù)器不被重新檢查,并且可以由服務(wù)器和客戶端來控制。例如,Expires回應(yīng)頭給了一個文檔不可用的時間。Cache-Control中的max-age標(biāo)識指明了緩存的最長時間;
    2. Validation:用來檢查以一個緩存的回應(yīng)是否仍然可用。例如,如果一個回應(yīng)有一個Last-Modified回應(yīng)頭,緩存能夠使用If-Modified-Since來判斷是否已改變,以便判斷根據(jù)情況發(fā)送請求;
    3. Invalidation:在另一個請求通過緩存的時候,常常有一個副作用。例如,如果一個URL關(guān)聯(lián)到一個緩存回應(yīng),但是其后跟著POST、PUT和DELETE的請求的話,緩存就會過期。

4. cookie和session的保持狀態(tài)

  1. 通過cookie保存狀態(tài)信息;通過cookie服務(wù)器就可以清楚的知道兩個請求是否來自于同一個客戶端;
  2. 通過session保存狀態(tài)信息
    1. session機制是一種服務(wù)器端的機制,服務(wù)器使用一種類似于散列表的結(jié)構(gòu)來保存信息,
    2. 服務(wù)器給每個Session分配一個唯一的JSESSIONID,并通Cookie發(fā)送給客戶端。當(dāng)客戶端發(fā)起新的請求的時候,將在Cookie頭中攜帶這個JSESSIONID。這樣服務(wù)器能夠找到這個客戶端對應(yīng)的Session。

5. 多線程下載的原理

  1. 下載工具開啟多個發(fā)出HTTP請求的線程;每個http請求只請求資源文件的一部分:Content-Range: bytes 20000-40000/47000;合并每個線程下載的文件

6. http代理以及隧道、geteway的理解

  1. http代理服務(wù)器
    • 代理服務(wù)器英文全稱是Proxy Server,其功能就是代理網(wǎng)絡(luò)用戶去取得網(wǎng)絡(luò)信息。形象的說:它是網(wǎng)絡(luò)信息的中轉(zhuǎn)站。大部分代理服務(wù)器都具有緩沖的功能,就好象一個大的Cache,它有很大的存儲空間,它不斷將新取得數(shù)據(jù)儲存到它本機的存儲器上,如果瀏覽器所請求的數(shù)據(jù)在它本機的存儲器上已經(jīng)存在而且是最新的,那么它就不重新從Web服務(wù)器取數(shù)據(jù),而直接將存儲器上的數(shù)據(jù)傳送給用戶的瀏覽器,這樣就能顯著提高瀏覽速度和效率
    • http代理服務(wù)器的主要功能:
      • 突破自身IP訪問限制,訪問國外站點。如:教育網(wǎng)、169網(wǎng)等網(wǎng)絡(luò)用戶可以通過代理訪問國外網(wǎng)站;
      • 訪問一些單位或團體內(nèi)部資源,如某大學(xué)FTP(前提是該代理地址在該資源的允許訪問范圍之內(nèi)),使用教育網(wǎng)內(nèi)地址段免費代理服務(wù)器,就可以用于對教育 網(wǎng)開放的各類FTP下載上傳,以及各類資料查詢共享等服務(wù);
      • 突破中國電信的IP封鎖:中國電信用戶有很多網(wǎng)站是被限制訪問的,這種限制是人為的,不同Serve對地址的封鎖是不同的。所以不能訪問時可以換一個國外的代理服務(wù)器試試;
      • 提高訪問速度:通常代理服務(wù)器都設(shè)置一個較大的硬盤緩沖區(qū),當(dāng)有外界的信息通過時,同時也將其保存到緩沖區(qū)中,當(dāng)其他用戶再訪問相同的信息時,則直接由緩沖區(qū)中取出信息,傳給用戶,以提高訪問速度;
      • 隱藏真實IP:上網(wǎng)者也可以通過這種方法隱藏自己的IP,免受攻擊。

8. https的傳輸協(xié)議原理

9. http不同的版本之間的區(qū)別

  1. HTTP/1.0 這是第一個在通訊中指定版本號的HTTP 協(xié)議版本,至今仍被廣泛采用,特別是在代理服務(wù)器中。
  2. HTTP/1.1 當(dāng)前版本。持久連接被默認(rèn)采用,并能很好地配合代理服務(wù)器工作。還支持以管道方式同時發(fā)送多個請求,以便降低線路負(fù)載,提高傳輸速度。
  3. HTTP/1.1相較于 HTTP/1.0 協(xié)議的區(qū)別主要體現(xiàn)在:
  • 緩存處理
  • 帶寬優(yōu)化及網(wǎng)絡(luò)連接的使用
  • 錯誤通知的管理
  • 消息在網(wǎng)絡(luò)中的發(fā)送
  • 互聯(lián)網(wǎng)地址的維護(hù)
  • 安全性及完整性
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容