當輸入www.google.com時,頁面發生了哪些事情:css
1.域名解析html
域名解析檢查順序爲:瀏覽器自身DNS緩存---》OS自身的DNS緩存--》讀取host文件--》本地域名服務器--》權限域名服務器--》根域名服務器。若是有且沒有過時,則結束本次域名解析。域名解析成功以後,進行後續操做nginx
2.tcp3次握手創建鏈接程序員
3.創建鏈接後,發起http請求json
4.服務器端響應http請求,瀏覽器獲得到http請求的內容;瀏覽器
5.瀏覽器解析html代碼,並請求html代碼中的資源緩存
6.瀏覽器對頁面進行渲染,展示在用戶面前。
安全
一、說一下什麼是Http協議?服務器
對器客戶端和 服務器端之間數據傳輸的格式規範,格式簡稱爲「超文本傳輸協議」。網絡
二、什麼是Http協議無狀態協議?怎麼解決Http協議無狀態協議?(曾經去某創業公司問到)
三、說一下Http協議中302狀態(阿里常常問)
四、Http協議有什麼組成?
請求報文包含三部分:
響應報文包含三部分:
說一下網絡傳輸的過程
五、Http協議中有那些請求方式?
六、Http協議中Http1.0與1.1區別?
七、get與post請求區別?(初級程序員必備問題)
區別一:
區別二:
區別三:
區別四:
區別五:
九、常見Http協議狀態?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
200
:請求被正常處理
204
:請求被受理但沒有資源能夠返回
206
:客戶端只是請求資源的一部分,服務器只對請求的部分資源執行GET方法,相應報文中經過Content-Range指定範圍的資源。
301
:永久性重定向
302
:臨時重定向
303
:與
302
狀態碼有類似功能,只是它但願客戶端在請求一個URI的時候,能經過GET方法重定向到另外一個URI上
304
:發送附帶條件的請求時,條件不知足時返回,與重定向無關
307
:臨時重定向,與
302
相似,只是強制要求使用POST方法
400
:請求報文語法有誤,服務器沒法識別
401
:請求須要認證
403
:請求的對應資源禁止被訪問
404
:服務器沒法找到對應資源
500
:服務器內部錯誤
503
:服務器正忙
|
十、Http協議首部字段?
a、請求行
請求的第一行是「方法、URL、協議/版本」:
POST http://xg.mediportal.com.cn/health/sms/verify/telephone HTTP/1.1
以上代碼中「POST」表明請求方法,「http://xg.mediportal.com.cn/health/sms/verify/telephone」表示URI,「HTTP/1.1表明協議和協議的版本。
根據HTTP標準,HTTP請求可使用多種請求方法。例如:HTTP1.1目前支持7種請求方法:GET、POST、HEAD、OPTIONS、PUT、DELETE和TARCE。
GET |
請求獲取由Request-URI所標識的資源 |
POST |
在Request-URI所標識的資源後附加新的數據 |
HEAD |
請求獲取由Request-URI所標識的資源的響應消息報頭 |
OPTIONS |
請求查詢服務器的性能,或查詢與資源相關的選項和需求 |
PUT |
請求服務器存儲一個資源,並用Request-URI做爲其標識 |
DELETE |
請求服務器刪除由Request-URI所標識的資源 |
TRACE |
請求服務器回送收到的請求信息,主要用語測試或診斷
|
b、請求頭(請求頭包含許多有關的客戶端環境和請求正文的有用信息。例如,請求頭能夠聲明瀏覽器所用的語言,請求正文的長度等)
Content-Type |
是返回消息中很是重要的內容,表示後面的文檔屬於什麼MIME類型。Content-Type: [type]/[subtype]; parameter。例如最多見的就是text/html,它的意思是說返回的內容是文本類型,這個文本又是HTML格式的。原則上瀏覽器會根據Content-Type來決定如何顯示返回的消息體內容 |
Host |
指定請求資源的Intenet主機和端口號,必須表示請求url的原始服務器或網關的位置。HTTP/1.1請求必須包含主機頭域,不然系統會以400狀態碼返回 |
Accept |
瀏覽器可接受的MIME類型 |
Accept-Charset |
瀏覽器可接受的字符集 |
Accept-Encoding |
瀏覽器可以進行解碼的數據編碼方式,好比gzip。Servlet可以向支持gzip的瀏覽器返回經gzip編碼的HTML頁面。許多情形下這能夠減小5到10倍的下載時間 |
Accept-Language |
瀏覽器所但願的語言種類,當服務器可以提供一種以上的語言版本時要用到 |
Authorization |
受權信息,一般出如今對服務器發送的WWW-Authenticate頭的應答中 |
Connection |
表示是否須要持久鏈接。若是Servlet看到這裏的值爲「Keep- Alive」,或者看到請求使用的是HTTP1.1(HTTP 1.1默認進行持久鏈接),它就能夠利用持久鏈接的優勢,當頁面包含多個元素時(例如Applet,圖片),顯著地減小下載所須要的時間。要實現這一點,Servlet須要在應答中發送一個Content-Length頭,最簡單的實現方法是:先把內容寫入 ByteArrayOutputStream,而後在正式寫出內容以前計算它的大小 |
Content-Length |
表示請求消息正文的長度 |
Cookie |
這是最重要的請求頭信息之一 |
From |
請求發送者的email地址,由一些特殊的Web客戶程序使用,瀏覽器不會用到它 |
Host |
初始URL中的主機和端口 |
If-Modified-Since |
只有當所請求的內容在指定的日期以後又通過修改才返回它,不然返回304「Not Modified」應答 |
Pragma |
指定「no-cache」值表示服務器必須返回一個刷新後的文檔,即便它是代理服務器並且已經有了頁面的本地拷貝 |
Referer |
包含一個URL,用戶從該URL表明的頁面出發訪問當前請求的頁面 |
User-Agent |
瀏覽器類型,若是Servlet返回的內容與瀏覽器類型有關則該值很是有用 |
UA-Pixels,UA-Color,UA-OS,UA-CPU |
由某些版本的IE瀏覽器所發送的非標準的請求頭,表示屏幕大小、顏色深度、操做系統和CPU類型 |
常見的MIME類型以下:
以application開頭的媒體格式類型:
另一種常見的媒體格式是上傳文件之時使用的:
(3)請求正文
請求頭和請求正文之間是一個空行,這個行很是重要,它表示請求頭已經結束,接下來的是請求正文。請求正文中能夠包含客戶提交的查詢字符串信息:
telephone=15527177736&userType=1&
http響應格式
HTTP應答與HTTP請求類似,HTTP響應也由3個部分構成,分別是:
一、狀態行
二、響應頭(Response Header)
三、響應正文
HTTP/1.1 200 OK //狀態行
Server: nginx
Date: Tue, 31 May 2016 02:09:24 GMT
Content-Type: application/json;charset=UTF-8
Connection: keep-alive
Vary: Accept-Encoding
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: X-Requested-With,access_token,access-token,content-type,multipart/form-data,application/x-www-form-urlencoded
Access-Control-Allow-Methods: GET,POST,OPTIONS
Content-Length: 49
{"resultCode":1,"resultMsg":"手機號未註冊"} //正文
(1)狀態行
由協議版本、數字形式的狀態代碼、及相應的狀態描述,各元素之間以空格分隔。
狀態代碼:
狀態代碼由3位數字組成,表示請求是否被理解或被知足。
狀態描述:
狀態描述給出了關於狀態代碼的簡短的文字描述。
狀態代碼的第一個數字定義了響應的類別,後面兩位沒有具體的分類。
第一個數字有五種可能的取值:
- 1xx: 指示信息—表示請求已接收,繼續處理。
- 2xx: 成功—表示請求已經被成功接收、理解、接受。
- 3xx: 重定向—要完成請求必須進行更進一步的操做。
- 4xx: 客戶端錯誤—請求有語法錯誤或請求沒法實現。
- 5xx: 服務器端錯誤—服務器未能實現合法的請求。
狀態代碼 狀態描述 說明
200 OK 客戶端請求成功
400 Bad Request 因爲客戶端請求有語法錯誤,不能被服務器所理解。
401 Unauthonzed 請求未經受權。這個狀態代碼必須和WWW-Authenticate報頭域一塊兒使用
403 Forbidden 服務器收到請求,可是拒絕提供服務。服務器一般會在響應正文中給出不提供服務的緣由
404 Not Found 請求的資源不存在,例如,輸入了錯誤的URL。
500 Internal Server Error 服務器發生不可預期的錯誤,致使沒法完成客戶端的請求。
503 Service Unavailable 服務器當前不可以處理客戶端的請求,在一段時間以後,服務器可能會恢復正常
(2)響應頭
響應頭可能包括:
Location:
Location響應報頭域用於重定向接受者到一個新的位置。例如:客戶端所請求的頁面已不存在原先的位置,爲了讓客戶端重定向到這個頁面新的位置,服務 器端能夠發回Location響應報頭後使用重定向語句,讓客戶端去訪問新的域名所對應的服務器上的資源。當咱們在JSP中使用重定向語句的時候,服務器 端向客戶端發回的響應報頭中,就會有Location響應報頭域。
Server:
Server響應報頭域包含了服務器用來處理請求的軟件信息。它和User-Agent請求報頭域是相對應的,前者發送服務器端軟件的信息,後者發送客戶 端軟件(瀏覽器)和操做系統的信息。下面是Server響應報頭域的一個例子:Server: Apache-Coyote/1.1
WWW-Authenticate:
WWW-Authenticate響應報頭域必須被包含在401(未受權的)響應消息中,這個報頭域和前面講到的Authorization請求報頭域是 相關的,當客戶端收到401響應消息,就要決定是否請求服務器對其進行驗證。若是要求服務器對其進行驗證,就能夠發送一個包含了 Authorization報頭域的請求,下面是WWW-Authenticate響應報頭域的一個例子:WWW-Authenticate: Basic realm="Basic Auth Test!"
從這個響應報頭域,能夠知道服務器端對咱們所請求的資源採用的是基本驗證機制。
Content-Encoding:
Content-Encoding實體報頭域被使用做媒體類型的修飾符,它的值指示了已經被應用到實體正文的附加內容編碼,於是要得到Content- Type報頭域中所引用的媒體類型,必須採用相應的解碼機制。Content-Encoding主要用語記錄文檔的壓縮方法,下面是它的一個例子: Content-Encoding: gzip。若是一個實體正文采用了編碼方式存儲,在使用以前就必須進行解碼。
Content-Language:
Content-Language實體報頭域描述了資源所用的天然語言。Content-Language容許用戶遵守自身的首選語言來識別和區分實體。 若是這個實體內容僅僅打算提供給丹麥的閱讀者,那麼能夠按照以下的方式設置這個實體報頭域:Content-Language: da。
若是沒有指定Content-Language報頭域,那麼實體內容將提供給因此語言的閱讀者。
Content-Length:
Content-Length實體報頭域用於指明正文的長度,以字節方式存儲的十進制數字來表示,也就是一個數字字符佔一個字節,用其對應的ASCII碼存儲傳輸。
要注意的是:這個長度僅僅是表示實體正文的長度,沒有包括實體報頭的長度。
Content-Type :
Content-Type實體報頭域用語指明發送給接收者的實體正文的媒體類型。例如:
Content-Type: text/html;charset=ISO-8859-1
Content-Type: text/html;charset=GB2312
Last-Modified :
Last-Modified實體報頭域用於指示資源最後的修改日期及時間。
Expires :
Expires實體報頭域給出響應過時的日期和時間。一般,代理服務器或瀏覽器會緩存一些頁面。當用戶再次訪問這些頁面時,直接從緩存中加載並顯示給用 戶,這樣縮短了響應的時間,減小服務器的負載。爲了讓代理服務器或瀏覽器在一段時間後更新頁面,咱們可使用Expires實體報頭域指定頁面過時的時 間。當用戶又一次訪問頁面時,若是Expires報頭域給出的日期和時間比Date普通報頭域給出的日期和時間要早(或相同),那麼代理服務器或瀏覽器就 不會再使用緩存的頁面而是從服務器上請求更新的頁面。不過要注意,即便頁面過時了,也並不意味着服務器上的原始資源在此時間以前或以後發生了改變。
Expires實體報頭域使用的日期和時間必須是RFC 1123中的日期格式,例如:
Expires: Thu, 15 Sep 2005 16:00:00 GMT
HTTP1.1的客戶端和緩存必須將其餘非法的日期格式(也包括0)看做已過時。例如,爲了讓瀏覽器不要緩存頁面,咱們也能夠利用Expires實體報頭 域,設置它的值爲0,以下(JSP):response.setDateHeader("Expires",0);
十一、Http與Https優缺點?
十二、Http優化
1三、Http協議有那些特徵?
一、支持客戶/服務器模式;二、簡單快速;三、靈活;四、無鏈接;五、無狀態。