1. 程式人生 > >HTTP協議學習

HTTP協議學習

.cn 處理 cti 多少 authorize 位置 列表 由於 put

特點

HTTP協議的主要特點可概括如下:
  1.支持客戶/服務器模式。
  2.簡單快速:客戶向服務器請求服務時,只需傳送請求方法和路徑。請求方法常用的有GET、HEAD、POST。每種方法規定了客戶與服務器聯系的類型不同。由於HTTP協議簡單,使得HTTP服務器的程序規模小,因而通信速度很快。
  3.靈活:HTTP允許傳輸任意類型的數據對象。正在傳輸的類型由Content-Type加以標記。
  4.無連接:無連接的含義是限制每次連接只處理一個請求。服務器處理完客戶的請求,並收到客戶的應答後,即斷開連接。采用這種方式可以節省傳輸時間。
  5.無狀態:HTTP協議是無狀態協議。無狀態是指協議對於事務處理沒有記憶能力。缺少狀態意味著如果後續處理需要前面的信息,則它必須重傳,這樣可能導致每次連接傳送的數據量增大。另一方面,在服務器不需要先前信息時它的應答就較快。

1.請求頭

  HTTP最常見的請求頭如下:

  Accept:瀏覽器可接受的MIME類型;

  Accept-Charset:瀏覽器可接受的字符集;

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

  Accept-Language:瀏覽器所希望的語言種類,當服務器能夠提供一種以上的語言版本時要用到;

  Authorization:授權信息,通常出現在對服務器發送的WWW-Authenticate頭的應答中;

  Connection:表示是否需要持久連接。如果Servlet看到這裏的值為“Keep-Alive”,或者看到請求使用的是HTTP 1.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類型。

2. 響應頭

  HTTP最常見的響應頭如下所示: l

  Allow:服務器支持哪些請求方法(如GET、POST等); l

  Content-Encoding:文檔的編碼(Encode)方法。只有在解碼之後才可以得到Content-Type頭指定的內容類型。利用gzip壓縮文檔能夠顯著地減少HTML文檔的下載時間。Java的GZIPOutputStream可以很方便地進行gzip壓縮,但只有Unix上的Netscape和Windows上的IE 4、IE 5才支持它。因此,Servlet應該通過查看Accept-Encoding頭(即request.getHeader("Accept-Encoding"))檢查瀏覽器是否支持gzip,為支持gzip的瀏覽器返回經gzip壓縮的HTML頁面,為其他瀏覽器返回普通頁面; l

  Content-Length:表示內容長度。只有當瀏覽器使用持久HTTP連接時才需要這個數據。如果你想要利用持久連接的優勢,可以把輸出文檔寫入ByteArrayOutputStram,完成後查看其大小,然後把該值放入Content-Length頭,最後通過byteArrayStream.writeTo(response.getOutputStream()發送內容; l

  Content-Type: 表示後面的文檔屬於什麽MIME類型。Servlet默認為text/plain,但通常需要顯式地指定為text/html。由於經常要設置Content-Type,因此HttpServletResponse提供了一個專用的方法setContentTyep。 可在web.xml文件中配置擴展名和MIME類型的對應關系; l

  Date:當前的GMT時間。你可以用setDateHeader來設置這個頭以避免轉換時間格式的麻煩; l

  Expires:指明應該在什麽時候認為文檔已經過期,從而不再緩存它。 l

  Last-Modified:文檔的最後改動時間。客戶可以通過If-Modified-Since請求頭提供一個日期,該請求將被視為一個條件GET,只有改動時間遲於指定時間的文檔才會返回,否則返回一個304(Not Modified)狀態。Last-Modified也可用setDateHeader方法來設置; l

  Location:表示客戶應當到哪裏  去提取文檔。Location通常不是直接設置的,而是通過HttpServletResponse的sendRedirect方法,該方法同時設置狀態代碼為302; l

Refresh:表示瀏覽器應該在多少時間之後刷新文檔,以秒計。除了刷新當前文檔之外,你還可以通過setHeader("Refresh", "5; URL=http://host/path")讓瀏覽器讀取指定的頁面。註意這種功能通常是通過設置HTML頁面HEAD區的<META HTTP-EQUIV="Refresh" CONTENT="5;URL=http://host/path">實現,這是因為,自動刷新或重定向對於那些不能使用CGI或Servlet的HTML編寫者十分重要。但是,對於Servlet來說,直接設置Refresh頭更加方便。註意Refresh的意義是“N秒之後刷新本頁面或訪問指定頁面”,而不是“每隔N秒刷新本頁面或訪問指定頁面”。因此,連續刷新要求每次都發送一個Refresh頭,而發送204狀態代碼則可以阻止瀏覽器繼續刷新,不管是使用Refresh頭還是<META HTTP-EQUIV="Refresh" ...>。註意Refresh頭不屬於HTTP 1.1正式規範的一部分,而是一個擴展,但Netscape和IE都支持它。

HTTP狀態碼列表:

狀態碼

狀態碼英文名稱

中文描述

100

Continue

繼續。客戶端應繼續其請求

101 Switching Protocols 切換協議。服務器根據客戶端的請求切換協議。只能切換到更高級的協議,例如,切換到HTTP的新版本協議

200

OK

請求成功。一般用於GET與POST請求

201

Created

已創建。成功請求並創建了新的資源

202

Accepted

已接受。已經接受請求,但未處理完成

203

Non-Authoritative Information

非授權信息。請求成功。但返回的meta信息不在原始的服務器,而是一個副本

204

No Content

無內容。服務器成功處理,但未返回內容。在未更新網頁的情況下,可確保瀏覽器繼續顯示當前文檔

205

Reset Content

重置內容。服務器處理成功,用戶終端(例如:瀏覽器)應重置文檔視圖。可通過此返回碼清除瀏覽器的表單域

206

Partial Content

部分內容。服務器成功處理了部分GET請求

300

Multiple Choices

多種選擇。請求的資源可包括多個位置,相應可返回一個資源特征與地址的列表用於用戶終端(例如:瀏覽器)選擇

301

Moved Permanently

永久移動。請求的資源已被永久的移動到新URL,返回信息會包括新的URL,瀏覽器會自動定向到新URL。今後任何新的請求都應使用新的URL代替

302

Found

臨時移動。與301類似。但資源只是臨時被移動。客戶端應繼續使用原有URL

303

See Other

查看其它地址。與301類似。使用GET和POST請求查看

304

Not Modified

未修改。所請求的資源未修改,服務器返回此狀態碼時,不會返回任何資源。客戶端通常會緩存訪問過的資源,通過提供一個頭信息指出客戶端希望只返回在指定日期之後修改的資源

305

Use Proxy

使用代理。所請求的資源必須通過代理訪問

306

Unused

已經被廢棄的HTTP狀態碼

307

Temporary Redirect

臨時重定向。與302類似。使用GET請求重定向

400

Bad Request

客戶端請求的語法錯誤,服務器無法理解

401

Unauthorized

請求要求用戶的身份認證

402

Payment Required

保留,將來使用

403

Forbidden

服務器理解請求客戶端的請求,但是拒絕執行此請求

404

Not Found

服務器無法根據客戶端的請求找到資源(網頁)。通過此代碼,網站設計人員可設置"您所請求的資源無法找到"的個性頁面

405

Method Not Allowed

客戶端請求中的方法被禁止

406

Not Acceptable

服務器無法根據客戶端請求的內容特性完成請求

407

Proxy Authentication Required

請求要求代理的身份認證,與401類似,但請求者應當使用代理進行授權

408

Request Time-out

服務器等待客戶端發送的請求時間過長,超時

409

Conflict

服務器完成客戶端的PUT請求時可能返回此代碼,服務器處理請求時發生了沖突

410

Gone

客戶端請求的資源已經不存在。410不同於404,如果資源以前有現在被永久刪除了可使用410代碼,網站設計人員可通過301代碼指定資源的新位置

411

Length Required

服務器無法處理客戶端發送的不帶Content-Length的請求信息

412

Precondition Failed

客戶端請求信息的先決條件錯誤

413

Request Entity Too Large

由於請求的實體過大,服務器無法處理,因此拒絕請求。為防止客戶端的連續請求,服務器可能會關閉連接。如果只是服務器暫時無法處理,則會包含一個Retry-After的響應信息

414

Request-URLToo Large

請求的URL過長(URL通常為網址),服務器無法處理

415

Unsupported Media Type

服務器無法處理請求附帶的媒體格式

416

Requested range not satisfiable

客戶端請求的範圍無效

417

Expectation Failed

服務器無法滿足Expect的請求頭信息

500

Internal Server Error

服務器內部錯誤,無法完成請求

501

Not Implemented

服務器不支持請求的功能,無法完成請求

502

Bad Gateway

充當網關或代理的服務器,從遠端服務器接收到了一個無效的請求

503

Service Unavailable

由於超載或系統維護,服務器暫時的無法處理客戶端的請求。延時的長度可包含在服務器的Retry-After頭信息中

504

Gateway Time-out

充當網關或代理的服務器,未及時從遠端服務器獲取請求

505

HTTP Version not supported

服務器不支持請求的HTTP協議的版本,無法完成處理

來源:(百度百科)https://baike.so.com/doc/5366073-5601774.html

    (博客園——http詳解)http://www.cnblogs.com/EricaMIN1987_IT/p/3837436.html

HTTP協議學習