HTTP協議

来源:http://www.cnblogs.com/epeter/archive/2016/04/23/5423477.html
-Advertisement-
Play Games

HTTP協議(HyperText Transfer Protocol,超文本傳輸協議)是網際網路上應用最為廣泛的一種網路傳輸協議,所有的WWW文件都必須遵守這個標準。 HTTP是一個基於TCP/IP通信協議來傳遞數據(HTML 文件, 圖片文件, 查詢結果等)。 HTTP協議工作於客戶端-服務端架構為 ...


HTTP協議

HTTP協議(HyperText Transfer Protocol,超文本傳輸協議)是網際網路上應用最為廣泛的一種網路傳輸協議,所有的WWW文件都必須遵守這個標準。

HTTP是一個基於TCP/IP通信協議來傳遞數據(HTML 文件, 圖片文件, 查詢結果等)。

1. HTTP 工作原理

HTTP協議工作於客戶端-服務端架構為上。瀏覽器作為HTTP客戶端通過URL向HTTP服務端即WEB伺服器發送所有請求。

Web伺服器有:Apache伺服器,IIS伺服器(Internet Information Services)等。

Web伺服器根據接收到的請求後,向客戶端發送響應信息。

HTTP預設埠號為80,但是你也可以改為8080或者其他埠。

2. HTTP三點註意事項:

1. HTTP是無連接:無連接的含義是限制每次連接只處理一個請求。伺服器處理完客戶的請求,並收到客戶的應答後,即斷開連接。採用這種方式可以節省傳輸時間。

2. HTTP是媒體獨立的:這意味著,只要客戶端和伺服器知道如何處理的數據內容,任何類型的數據都可以通過HTTP發送。客戶端以及伺服器指定使用適合的MIME-type內容類型。

3. HTTP是無狀態:HTTP協議是無狀態協議。無狀態是指協議對於事務處理沒有記憶能力。缺少狀態意味著如果後續處理需要前面的信息,則它必須重傳,這樣可能導致每次連接傳送的數據量增大。另一方面,在伺服器不需要先前信息時它的應答就較快。

3. HTTP 消息結構

HTTP是基於客戶端/服務端(C/S)的架構模型,通過一個可靠的鏈接來交換信息,是一個無狀態的請求/響應協議。

一個HTTP"客戶端"是一個應用程式(Web瀏覽器或其他任何客戶端),通過連接到伺服器達到向伺服器發送一個或多個HTTP的請求的目的。

一個HTTP"伺服器"同樣也是一個應用程式(通常是一個Web服務,如Apache Web伺服器或IIS伺服器等),通過接收客戶端的請求並向客戶端發送HTTP響應數據。

HTTP使用統一資源標識符(Uniform Resource Identifiers, URI)來傳輸數據和建立連接。

4. 客戶端請求消息

客戶端發送一個HTTP請求到伺服器的請求消息包括以下格式:請求行(request line)、請求頭部(header)、空行和請求數據4個部分組成,下圖給出了請求報文的一般格式。
wpsD8EA.tmp

5. 伺服器響應消息

HTTP響應也由三個部分組成,分別是:狀態行、消息報頭、響應正文。

wpsD8FB.tmp

6. HTTP請求方法

根據HTTP標準,HTTP請求可以使用多種請求方法。

HTTP1.0定義了三種請求方法: GET, POST 和 HEAD方法。

HTTP1.1新增了五種請求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。

  •   GET:請求指定的頁面信息,並返回實體主體。
  •   HEAD:類似於get請求,只不過返回的響應中沒有具體的內容,用於獲取報頭
  •   POST:向指定資源提交數據進行處理請求(例如提交表單或者上傳文件)。數據被包含在請求體中。POST請求可能會導致新的資源的建立和/或已有資源的修改。
  •   PUT:從客戶端向伺服器傳送的數據取代指定的文檔的內容。
  •   DELETE:請求伺服器刪除指定的頁面。
  •   CONNECT:HTTP/1.1協議中預留給能夠將連接改為管道方式的代理伺服器。
  •   OPTIONS:允許客戶端查看伺服器的性能。
  •   TRACE:回顯伺服器收到的請求,主要用於測試或診斷。
6.1 GET請求

瀏覽器發出的HTTP請求消息的請求方式為GET請求:

  1. 在瀏覽器欄中輸入某個URL地址或單擊某網頁上的一個超鏈接如果網頁中的<form>表單元素method屬性設置為"GET"

  2. 給WEB伺服器傳遞參數的格式:http://www.denx.com/index.html?name=admin&password=123

  3. 註意:使用GET方式傳送的數據量一般在1KB以下。

6.2 POST請求

使用POST方式傳遞參數:

  1. 表單元素method屬性設置為"POST"

  2. POST傳送的數據量更大

  3. POST請求主要用於想WEB伺服器提交FORM表單中的數據

7. HTTP狀態碼

當瀏覽者訪問一個網頁時,瀏覽者的瀏覽器會向網頁所在伺服器發出請求。當瀏覽器接收並顯示網頁前,此網頁所在的伺服器會返回一個包含HTTP狀態碼的信息頭(server header)用以響應瀏覽器的請求。HTTP狀態碼的英文為HTTP Status Code。

下麵是常見的HTTP狀態碼:

  Ø 200 - 請求成功

  Ø 301 - 資源(網頁等)被永久轉移到其它URL

  Ø 404 - 請求的資源(網頁等)不存在

  Ø 500 - 內部伺服器錯誤

8. HTTP狀態碼分類

HTTP狀態碼由三個十進位數字組成,第一個十進位數字定義了狀態碼的類型,後兩個數字沒有分類的作用。HTTP狀態碼共分為5種類型:

分類

HTTP狀態碼分類描述

1**

信息,伺服器收到請求,需要請求者繼續執行操作

2**

成功,操作被成功接收並處理

3**

重定向,需要進一步的操作以完成請求

4**

客戶端錯誤,請求包含語法錯誤或無法完成請求

5**

伺服器錯誤,伺服器在處理請求的過程中發生了錯誤

9. HTTP content-type

Content-Type,內容類型,一般是指網頁中存在的Content-Type,用於定義網路文件的類型和網頁的編碼,決定瀏覽器將以什麼形式、什麼編碼讀取這個文件。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 註:以下文章原文來自於Dr Charles Severance 的 《Python for Informatics》 12.3 用HTTP協議獲取一張圖片 在上一節的例子中,我們獲取的是一個有換行符的文本文件,並簡單的把它顯示在屏幕上。同樣我們可以用一個小程式通過HTTP協議獲取圖片。下麵這個程式運 ...
  • 這篇文章是我在慕課網上學習Hibernate註解的時候進行手機以及整理的筆記。 今天把它分享給大家,希望對大家有用。可以進行收藏,然後需要的時候進行對照一下即可。這樣能起到一個查閱的作用。 本文主要講解的內容簡介 : 第1章 類級別註解 1-1 本章簡介 1-2 準備工作 1-3 @Entity註解 ...
  • #include<stdio.h>int main(){ int i,j; int word=0,num=0;//新單詞標記,單詞下標 char str[100],s[50][20]={0},c; gets(str);//輸入字元串(多個單詞) for(i=0;(c=str[i])!='\0';i+ ...
  • 問題描述: Given a positive integer n, break it into the sum of at least two positive integers and maximize the product of those integers. Return the maxim ...
  • 一丶可命名元組(nametuple) ...
  • 1.include語句 使用include語句可以告訴PHP提取特定的文件,並載入它的全部內容 1 <?php 2 inlude "fileinfo.php"; 3 4 //此處添加其他代碼 5 ?> 使用include語句可以告訴PHP提取特定的文件,並載入它的全部內容 1 <?php 2 inl ...
  • 命名空間其實只是一個形式,最終目的是重構代碼,但這個過程想要一蹴而就是不可能的。 一開始給了一個偽命題:基於ThinkPHP的重構(不要為什麼)。經過一段的實踐,發現這是一個大錯特錯的思維方式,其中遇到的坑在此略過不表。 首先,不要想著全盤基於命名空間重寫,而應該是基於局部的。 最終思考後的結果,是 ...
  • 在上一篇《java事務(二)——本地事務》中已經提到了事務的類型,並對本地事務做了說明。而分散式事務是跨越多個數據源來對數據來進行訪問和更新,在JAVA中是使用JTA(Java Transaction API)來實現分散式的事務管理的。但是在本篇中並不會說明如何使用JTA,而是在不依賴其他框架以及j ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...