1. 程式人生 > >http傳輸字元編碼與轉義(深度好文)

http傳輸字元編碼與轉義(深度好文)

一、引言

        最近陸陸續續看了好多關於位元組、字元、字元編碼、字元轉義的文章,終於對這個過程有了比較清晰深刻的認識。和後臺開發相結合知道了亂碼出現的理論具體原因,和前臺開發結合知道了get與post請求的過程。這裡分析下供大家學習分享。(字元轉義指字元與字元之間轉換,url編碼;字元編碼指字元與二進位制的對應,ascii)

二、字元編碼的發展

      首先要明白字符集與字元編碼的概念,字符集就是能表示的字元的集合(中文、英文、蒙古文),字元編碼是字元與二進位制的對應關係(如“我”存為001,”你“存為002)。不過一般字符集與字元編碼容易統稱,一般一對一,但也有一對多(如utf-8,utf-16)。

       發展:英文字符集:ascii編碼————不同國家文字字符集:ANSI編碼(GBK、JIS等)————全世界統一字符集:UNICODE編碼(UTF—8,UTF—16等),如下圖(稍微展示的多了些):


二、http請求過程

        整體流程圖如下圖所示:


1、字元轉義:瀏覽器對漢字的通過某種編碼方式進行url編碼轉義,轉譯成為ascii以便下一步。這裡就是get post請求涉及到的地方,get肯定url編碼轉義,post中的urlencode與之類似,formdata猜測應該未轉義,json猜測應該url編碼;

2、字元編碼:瀏覽器將上一步驟轉義的字元按照ascii編碼為位元組;

3、字元解碼:伺服器將傳輸過來的位元組按照ascii解碼為字元,此步驟web server內部已經幫我們實現;

4、字元反轉義:伺服器將字元按照utf-8或某種編碼方式進行url編碼反轉義為漢字,此過程中開發常用到request可以自定義字元轉義解碼方式;

5、字元轉義:伺服器將響應頭字元按照某種編碼方式url編碼轉義,此過程中開發常用response定義url編碼,框架中一般預設會自動選擇utf-8進行url編碼,請求體見步驟6;

6、字元編碼:伺服器對url編碼轉義後的響應頭,與響應體進行二進位制編碼,webserver內部實現;

7、字元解碼:瀏覽器對響應頭與響應體按照ascii解碼為字元;

8、字元反轉義:瀏覽器響應頭進行url編碼反轉義,對響應體檢視content-type來進行html解析或者圖片解析;

三、總結

  • 開發中遇到編碼的亂碼問題;
  • 字符集與字元編碼發展;
  • http中的編碼、解碼,編碼轉義、編碼反轉義詳細過程說明;
  • http編碼過程中前端開發與後臺開發相關過程定位;

相關推薦

http傳輸字元編碼轉義深度

一、引言         最近陸陸續續看了好多關於位元組、字元、字元編碼、字元轉義的文章,終於對這個過程有了比較清晰深刻的認識。和後臺開發相結合知道了亂碼出現的理論具體原因,和前臺開發結合知道了g

全面深入理解RedisMemcached深度

說到redis就會聯想到memcached,反之亦然。瞭解過兩者的同學有那麼個大致的印象:redis與memcached相比,比僅支援簡單的key-value資料型別,同時還提供list,set,zset,hash等資料結構的儲存;redis支援資料的備份,即master-s

html——floatclear詳解深度

教程開始:        首先要知道,div是塊級元素,在頁面中獨佔一行,自上而下排列,也就是傳說中的流。如下圖:        可以看出,即使div1的寬度很小,頁面中一行可以容下d

思維的八層境界深度

導讀 有道 一個 曾經 大學 運用 常常 提高 必要條件 導讀:今天,越來越多的人認識到,學習最重要的目標並不是掌握一些特定的知識,也不是那些可以很容易通過移動互聯網借助"百度"、"谷歌"等工具搜索到的特定知識,而是發展自己的思維! 在世界快速變化的時代,思維是最重要的核心

獵豹傅盛:升維思考,降維攻擊!深度

      轉載地址:http://www.woshipm.com/it/218149.html         前不久,我讀完《三體》,幾乎幫我建立了一個更高維度的世界觀和科學觀。因為你突然意識到,這個世界不

Java執行緒詳解深度

Java執行緒:概念與原理 一、程序與執行緒         程序是指一個記憶體中執行的應用程式,每個程序都有自己獨立的一塊記憶體空間,即程序空間或(虛空間)。程序不依賴於執行緒而獨立存在,一個程序中可以啟動多個執行緒。比如在Windows系統中,一個執行的ex

高新技術企業認定,史上最詳細的申請攻略!深度

相關 str 直接 方式 項目 微信 組織 名片 數據 在市場廣闊的今天,基本每個省和市地×××府都會建立產業園區或高新技術企業優化孵化帶,提供各種政策支持、稅收優惠以及財政補助。同時,高新技術企業資質對企業來說是一張閃亮的名片,相當於中國的品牌馳名商標,不僅能夠為企業帶來

下一個七年你是誰?深度

一時心血來潮報了個口譯班,其中有一位老師大概30歲,長得很漂亮,打扮也很時尚,口譯功夫了得,每次都來去匆匆,中午就花5分鐘的時間泡一碗麵吃。後來才知道,她大學學的是歷史,她的本職工作是一家公司的公關部經理,兒子已經5歲,她每天要上班、做家務、帶孩子。 與我們不同的是,她

為什麼你看了很多書 ,卻依然沒有洞見 深度

前幾天有人在知乎上問: 今天就回答下很多人問了很久的這個問題,並且解釋一下如何構建系統化的知識體系。 我想很多人看到這個問題,期待的答案是一個書單,可是我要告訴你這並沒有什麼卵用。 我想大部分人都經歷過高中,你會發現高考650分的人和450分的人

值得推薦的C/C++框架和庫深度

【本文系外部轉貼,原文地址:http://www.cppblog.com/merlinfang/archive/2014/12/26/209311.html 公交車上看到的好文,忍不住轉發!下次造輪子前先看看現有的輪子吧--值得學習的C語言開源專案- 1. Webbench 

Form表單和ajax中的post請求&&後臺獲取資料方法深度

最近要做後臺資料接收,因為前臺傳來的資料太過於混亂,所以總結了一下前臺資料post請求方法,順便寫了下相對應的後臺接收方法。         前臺主要的contenttype為下面三種:(需要注意的是請求頭中datatype與contenttype的區別,dat

英語美文朗讀:真心朋友 深度

"A friend walks in when the rest of the world walks out." "別人都走開

SpringDataJpa入門案例及查詢詳細解析深度

 SpringDataJpaSpring Data JPA 讓我們解脫了DA0層的操作,基本上所有CRUD都可以依賴於它來實現,在實際的工作工程中,推薦使用Spring Data JPA+ORM(如:hibernate)完成操作,這樣在切換不同的ORM框架時提供了極大的方便,同時也使資料庫層操作更

字元編碼字符集Encoding&CharSet——害死多少程式設計師

           之前在書上看過編碼和字符集,也遇到一些亂碼問題。但是之前並沒有真正區分字符集和字元編碼。最後亂碼問題還是不能解決。一般在同一個語言、平臺上就能夠正確顯示,因為他們預設的字符集都是

高性能HTTP加速器Varnish安裝配置包含常見錯誤

人員 準備 版本 狀態碼 port pop 沒有 gis for Varnish是一款高性能的開源HTTP加速器。挪威最大的在線報紙Verdens Gang使用3臺Varnish取代了原來的12臺Squid,性能竟然比曾經更好。Varnish 的作者Po

元字元轉義正則表示式

正則表示式中具有特殊含義的字元稱之為元字元,常用的元字元有: \ 一般用於轉義字元 ^ 斷言目標的開始位置(或在多行模式下是行首) $ 斷言目標的結束位置(或在多行模式下是行尾) . 匹配除換行符外的任何字元(預設) [ 開始字元類定義 ] 結束字元類定義 | 開始一個可選分支 ( 子組的開始標記 ) 子組

mysql什麼情況下會觸發表鎖深度!!!

https://www.cnblogs.com/sessionbest/articles/8689082.html   鎖是計算機協調多個程序或執行緒併發訪問某一資源的機制。在資料庫中,除傳統的計算資源(如CPU、RAM、I/O等)的爭用以外,資料也是一種供許多使用者共享的資源。如

房價是一定要跌的原創首發,深度 ——何學林中國房地產大策劃之二

原創作者:何學林中國策劃一人 目前是房地產整個都在跌,但筆者是在房價一片喊漲聲中說的。當時遭到了普遍一致的反對,反對者的觀點是房價一定要漲,不可能跌,因為地球只有一個,土地越來越少,所以房價一定是 漲的。現在看來這種觀點和理由很幼稚,但當時確實都持這種觀點,在房

Android Jetpack從入門到精通深度,值得收藏

前言 即學即用Android Jetpack系列Blog的目的是通過學習Android Jetpack完成一個簡單的Demo,本文是即學即用Android Jetpack系列Blog的第一篇。 記得去年第一次參加谷歌開發者大會的時候,就被Navigation的圖形導航介面給迷住了,一句臥槽就代表了小王的全部心

HBase 底層原理詳解深度,建議收藏

## HBase簡介 HBase 是一個分散式的、面向列的開源資料庫。建立在 HDFS 之上。Hbase的名字的來源是 Hadoop database,即 Hadoop 資料庫。HBase 的計算和儲存能力取決於 Hadoop 叢集。 它介於 NoSql 和 RDBMS 之間,僅能通過主鍵(row ke