Email郵件頭(郵件傳送原理、INTERNET郵件頭)揭密
一、簡介
本文將詳細討論email頭的方方面面。主要為使用者架設郵件伺服器提供理論基礎併為管理員在出現電子郵件垃圾騷擾時提供發現垃 圾郵件的真正源頭。根據郵件頭的知識有助於發現偽造的郵件。對於希望瞭解郵件是如何在網路中傳輸的使用者同樣會有幫助。文章有若干虛構的域名和隨意分配的 IP地址作為示例使用。
二、Email的傳輸過程
這部分包含一個簡單的對一個電子郵件生命週期的分析。這對於理解郵件頭能為你提供哪些資訊是非常重要的背景資訊。
從表面上看來郵件似乎是直接從傳送者機器傳遞到接收者地址,但通常情況下事情並不是這樣。一個典型的電子郵件在其生命週期中至少要經過四臺計算機。
這 是因為大多數企業或組織都有一個被稱為“郵件伺服器”專用伺服器來處理電子郵件,而這一般並不是使用者閱讀郵件的計算機。對於ISP來說,使用者從家裡面的計 算機撥號接入ISP網路,這裡將使用者家中的計算機稱為客戶機,而將ISP專門處理郵件的計算機稱為郵件伺服器。當一個使用者傳送郵件,他一般是在自己的計算 機上編輯郵件,然後將郵件傳送到ISP的郵件伺服器上。客戶機就此已經完成了自己的工作,而後面的工作則由ISP的郵件伺服器來完成。首先ISP郵件服務 器查詢接收者指定的郵件伺服器的IP地址,然後將郵件傳送給該目的伺服器。現在郵件則儲存在接收者郵件伺服器上等待接收者收取。當接收者從接受郵件伺服器
取得傳送給他的郵件到自己的PC機以後,通常該郵件將被刪除。
假設有以下使用者<
如果 tom 想給 betty 傳送郵件,他在個人電腦(假設名字為 tom-pc.alpha.com.cn )上編輯郵件,編輯好的信件從個人電腦傳送到中科院的郵件伺服器:mail.alpha.com.cn。一旦信件被髮送到 mail.alpha.com.cn,以後的信件傳送過程就和 tom 沒有關係了。中科院的郵件伺服器發現這是傳送給 sina.com 的某個使用者的信件,則和 sina.com 的郵件伺服器-比如說是mail.sina.com-通訊,並將郵件傳送給它。現在郵件則被儲存在 mail.sina.com
之上直到 betty 在自己的PC機上撥號上網並連線到 sina.com 郵件系統察看並收取信件,這時 mail.sina.com 將儲存的郵件傳送到 betty 的個人電腦上。
在這個過程中,郵件頭將三次被加到郵件中:在編輯時由 郵件客戶程式加入;當郵件傳輸到 mail.alpha.com.cn 時被 mail.alpha.com.cn 加入;當從 mail.alpha.com.cn 傳送到 mail.sina.com 時被 mail.sina.com 加入;通常來說客戶收取信件時並不新增郵件頭。下面我們就仔細看看這些郵件頭是如何產生的。
當 tom 的郵件客戶程式編輯郵件並將其傳送給 mail.alpha.com.cn 時,郵件內容如下。這些內容都是由郵件編輯程式 (outlook express)新增的:
From:
To: [email protected]
Date: Tue, Mar 18 2003 14:36:14 PST
X-Mailer: Outlook Express 6.0
Subject: 明天放假?
當郵件從 mail.alpha.com.cn 傳送到 mail.sina.com 後,郵件內容變為(新新增的內容是由 mail.alpha.com.cn ):
Received: from tom-pc.alpha.com.cn (tom-pc.alpha.com.cn [124.211.3.11]) by mail.alpha.com.cn (8.8.5) id 004A21; Tue, Mar 18 2003 14:36:17 -0800 (PST)
From:
To: [email protected]
Date: Tue, Mar 18 2003 14:36:14 PST
Message-Id: <[email protected]>
X-Mailer: Outlook Express 6.0
Subject: 明天放假?
當 mail.sina.com 收到信件並存儲等待 betty 收取時,郵件內容變為,(新新增的內容是由 mail.sina.com 新增的):
Received: from mail.alpha.com.cn (mail.alpha.com.cn [124.211.3.78]) by mail.sina.com (8.8.5/8.7.2) with ESMTP id LAA20869 for <[email protected]>; Tue, 18 Mar 2003 14:39:24 -0800 (PST)
Received: from tom-pc.alpha.com.cn (tom.alpha.com.cn [124.211.3.11]) by mail.alpha.com.cn (8.8.5) id 004A21; Tue, Mar 18 2003 14:36:17 -0800 (PST)
From: [email protected] (Tom Lee)
To: [email protected]
Date: Tue, Mar 18 2003 14:36:14 PST
Message-Id: <[email protected]>
X-Mailer: Outlook Express 6.0
Subject: 明天放假?
最後這封信的內容才是 betty 收取並閱讀的內容。下面是對其中內容的詳細分析:
Received: from mail.alpha.com.cn
上面的內容表示該郵件是來自於自稱是 mail.alpha.com.cn 的伺服器。
(mail.alpha.com.cn [124.211.3.78])
這句話表示該伺服器的真實名字的確是 mail.alpha.com.cn,也就是說它自稱的身份是正確的,其IP地址為 124.211.3.78。
by mail.sina.com (8.8.5/8.7.2)
接收這封郵件的機器是 mail.sina.com。其執行的郵件程式為 sendmail,版本為8.8.5/8.7.2。
with ESMTP id LAA20869
接收郵件的伺服器為該郵件賦有ID號LAA20869(通常該號碼是郵件伺服器內部使用的,但是管理員可以根據該ID號在log檔案中查詢關於該信件的相關資訊,但是通常該號都是沒有意義的) 。
for <[email protected]>;
該郵件是傳送給地址 [email protected] 的。可以看到該郵件頭沒有To:相關內容。
Tue, 18 Mar 2003 14:39:24 -0800 (PST)
這次郵件傳輸發生時間為:太平洋時間Tuesday, March 18, 2003, at 14:39:24(太平洋時間,因為它比格林威治時間晚8個小時,因此是"-0800")。
Received: from tom-pc.alpha.com.cn (tom-pc.alpha.com.cn [124.211.3.11]) by mail.alpha.com.cn (8.8.5) id 004A21; Tue, Mar 18 2003 14:36:17 -0800 (PST)
該郵件頭記錄了郵件是從 tom-pc.alpha.com.cn(tom的個人電腦)傳送到到郵件伺服器 mail.alpha.com.cn 的。傳送發生在太平洋時間14:36:17。傳送計算機自稱是 tom-pc.alpha.com.cn,其真實名經dns查詢的確是 tom-pc.alpha.com.cn,其IP地址為 124.211.3.11,郵件伺服器軟體為 sendmail v8.8.5。該信件被郵件伺服器的 mail.alpha.com.cn 賦給的ID號為004A21。
From: [email protected] (Tom Lee)
該郵件是由 [email protected] 傳送的,其名字為 Tom Lee。
To: [email protected]
郵件目的地址為:[email protected]。
Date: Tue, Mar 18 2003 14:36:14 PST
郵件編輯時間為14:36:14 Pacific Standard Time on Tuesday, March 18, 2003。
Message-Id: <[email protected]
mail.alpha.com.cn 給該郵件分配了這個號碼來標識它。它和Received頭中的SMTP機ESMTP ID號是不一樣的。因為該號碼是一直伴隨整個郵件的。而其它ID則僅僅在特定的郵件伺服器上的郵件傳輸階段相關聯。因此該機器ID號對其它機器來說沒有任 何意義。有時候Message-ID包含了傳送者郵件地址在其中。
X-Mailer: Outlook Express 6.0
該訊息是使用 Outlook Express 傳送的,版本號為 6.0。
Subject: 明天放假?
郵件標題。
三、郵件協議
這部分內容相對其它部分來說具有更多原理性內容,主要討論郵件是如何從一點傳輸到另外一點的細節。你不需要理解每一句話, 但是熟悉這方面的內容有助於在郵件傳輸出現奇怪現象時弄明白問題所在。由於垃圾電子郵件傳送者常常故意製造一些奇怪的情況以掩飾自己的身份,因此能理解這 些奇怪的現象對對付這些傢伙是非常有用的。
為了在網路上傳輸資料,計算機網路協議使用了稱為埠的訪問入口,你可以將埠看做是一個通道,通過它計算機可以監聽網路通訊以提供服務。為了同時監聽多個通訊,計算機需要有使用埠號碼標識多個不同的埠以區別這些通訊。而和電子郵件傳輸相關的埠是25。
正常情況
讓 我們重新討論上面的例子,但是這次我們僅僅關心 mail.alpha.com.cn 到 mail.sina.com 之間的通訊過程。首先 mail.alpha.com.cn 開啟一個到 mail.sina.com 的25號埠的連線,然後通過該連線傳送郵件,當然在傳送郵件過程中會有一些管理命令互動過程。互動中的命令和相應都或多或少的是可讀的。命令是SMTP 協議規定的。如果監聽兩者之間的通訊,可能有以下內容:(粗體部分是 mail.alpha.com.cn 發出的)
220 mail.sina.com ESMTP Sendmail 8.8.5/1.4/8.7.2/1.13; Tue, Mar 18 2003 14:38:58 -0800 (PST)
HELO mail.alpha.com.cn
250 mail.sina.com Hello mail.alpha.com.cn [124.211.3.78], pleased to meet you
MAIL FROM: [email protected]
250 [email protected] Sender ok
RCPT TO: [email protected]
250 [email protected] Recipient ok
DATA
354 Enter mail, end with "." on a line by itself
Received: from tom-pc.alpha.com.cn (tom-pc.alpha.com.cn [124.211.3.11]) by mail.alpha.com.cn (8.8.5) id 004A21; Tue, Mar 18 2003 14:36:17 -0800 (PST)
From: [email protected] (Tom Lee)
To: [email protected]
Date: Tue, Mar 18 2003 14:36:14 PST
Message-Id: <[email protected]>
X-Mailer: Outlook Express 6.0
Subject: 明天放假?
Do you have time to meet for lunch?
--Tom Lee
.
250 LAA20869 Message accepted for delivery
QUIT
221 mail.sina.com closing connection
整個傳輸依賴於五個SMTP核心命令(當然SMTP還有一些其它命令,但是它們並不是用來完成真正的郵件傳輸):HELO,MAIL FROM,RCPT TO,DATA 和 QUIT。
郵 件傳送者 HELO 命令用來標識自己的身份。HELO mail.alpha.com.cn 可以被解讀為"嗨,我是 mail.alpha.com.cn"。當然這裡傳送者可能會撒謊,但是沒有任何機制能防止傳送者 mail.alpha.com.cn 說"嗨,我是 mail.xxx.com"或是"嗨,我是mail.yyy.com"。然而在大多數情況下接收者都有一些方法來確認傳送者的真實身份。
MAIL FROM 命令標識開始郵件傳輸,含義是"我有從某人傳送來的郵件",該命令後跟的地址就是所謂的“信封地址”(在後面我們將深入討論),信封 from 地址不一定是傳送者自己的地址。這個明顯的安全漏洞是不可避免的(因為接收者並不知道傳送者機器上有哪些地址),但是在特定的情況下這又是一個有用處的特 色。
RCPT TO 和 MAIL FROM 是相輔相成的。其指定郵件接收者。通過多個 RCPT TO 命令一個郵件可以被髮送給多個接收者。(在後面的郵件中繼部分將解釋該特色可能針對某些不安全的系統濫用)。該命令後跟的地址稱為"envelope to"地址。其指定了郵件將被投遞給哪些使用者,而和信件中的To:指定的地址沒有關係。
DATA 命令指示開始實際的郵件內容傳輸。DATA 命令後輸入的任何內容都被看做是郵件的一部分。而格式並沒有任何限制。以一個英文單詞加冒號開始的行一般被郵件程式看做是郵件頭。以英文句號符號(.)開始的行被認為是郵件內容結束。
QUIT 命令終止連線。
SMTP 協議規範定義在 RFC 821 中。
非正常情況
上 面的例子有些過於簡單。上面的例子有一個假設前提:兩個組織的郵件伺服器相互之間能直接訪問,而不需要經過代理、防火牆等安全裝置。這在當前 Internet環境下情況往往是這樣的。但由於安全對於某些組織來說非常重要,而且網路或組織可能變得越來越龐大,情況就不那麼簡單了。對於具有代理型 防火牆系統的郵件傳輸來說,區別就在於在郵件的頭中多了一次轉發過程的記錄,也就是郵件首先從傳送者郵件伺服器傳送到防火牆上,然後再從防火牆傳送到目的 郵件伺服器。
四、郵件中繼
對於某些具有特殊的“生命”週期的郵件頭可能和前面討論的情況完全不同:
Received: from unwilling.intermedia.com (unwilling.intermedia.com [98.134.11.32]) by mail.alpha.com.cn (8.8.5) id 004B32 for <[email protected]>; Wed, Jul 30 2003 16:39:50 -0800 (PST)
Received: from linuxaid.com.cn ([202.99.11.120]) by unwilling.intermedia.com (8.6.5/8.5.8) with SMTP id LAA12741; Wed, Jul 30 2003 19:36:28 -0500 (EST)
From: Anonymous Spammer <[email protected]>
To: (recipient list suppressed)
Message-Id: <[email protected]>
X-Mailer: Massive Annoyance
Subject: WANT TO MAKE ALOT OF MONEY???
這 個郵件頭和以前的不同之處可能會令你認為這是一封垃圾郵件,但是這裡引起你的懷疑的是"Received:"頭。從"Received:"頭看來,郵件是 來自linuxaid.com.cn,然後從這裡傳輸給unwilling.intermedia.com,然後從這裡再次傳輸到最終目的地 址:mail.alpha.com.cn。從"Received:"頭看來事情就是這樣的,但是中間為什麼會出現 unwilling.intermedia.com呢?因為它和傳送者和接收者都沒有直接的關係。
要理解原因需要對SMTP協議進行 一些瞭解。本質上來講,傳輸過程是這樣的:linuxaid.com.cn 連線 unwilling.intermedia.com 的 SMTP 埠。告訴它“請傳送這封郵件到 [email protected]。它可能是以最直接的方法來實現:RCPT TO:[email protected]。到現在為止,unwilling.intermedia.com 接管對該郵件的處理。因為它被告知將該信件轉發給其他一個域:alpha.com.cn,它就查詢對於域名alpha.com.cn 的郵件伺服器然後將郵件轉發給
alpha.com.cn。這個過程通常被稱作郵件中繼(mail relaying)。
出現郵件中 繼是由於歷史的原因,使用郵件中繼是有它的好處的。到八十年代末期,很多網路中的計算機都不是直接通訊來傳輸郵件。而是通過郵件路由來傳遞郵件,通過郵件 路由伺服器一步一步地進行郵件傳輸。這樣做是非常麻煩的,傳送者往往需要手工指定一封郵件需要經過哪些郵件路由伺服器,比如需要從 San Francisco 傳送一封郵件到 New York,則需要在信封中新增如下內容:
San Francisco, Sacramento, Reno, Salt Lake City, Rock Springs, Laramie, North Platte, Lincoln, Omaha, Des Moines, Cedar Rapids, Dubuque, Rockford, Chicago, Gary, Elkhart, Fort Wayne, Toledo, Cleveland, Erie, Elmira, Williamsport, Newark, New York City, Greenwich
Village, #12 Desolation Row, Apt. #35, R.A. Zimmermann
如果從郵局工作人員的角度來考慮,這種模型是非常有用的。在Gary 的郵局只需要知道如何和臨近的郵局 Chicago 和 Elkhart 通訊,而無需消耗資源計算如何將郵件傳送到 New York (這時候就很清楚為什麼這種模式對於郵件傳送者來說非常糟糕,為什麼這種方法被拋棄了)。但是這就是郵件被傳輸的過程。因此伺服器具有這樣的中繼的能力在 那時是很重要的。
而現在中繼通常被用作不道德的廣告商用來隱藏它們的原始地址,將埋怨轉嫁給被用來中繼的伺服器而不是其所在ISP的技術。同 樣通過中繼可以實現將傳送信件的負載轉移到中繼伺服器上,從而實現盜用中繼伺服器的服務資源。在這裡最重要的一點是理解郵件內容是在傳送點 linuxaid.com.cn 被編輯。中間的伺服器 unwilling.intermedia.com 只是參加了中間的傳輸工作,它並不能對傳送者有任何的約束力。
在上面的例子中應該注意的另外一點是"Message-Id:"並不是 由傳送者伺服器(linuxaid.com.cn)而是中繼計算機(unwilling.intermedia. com)填寫的。這是被中繼的郵件的一個典型特性,該特性反映了傳送伺服器並沒有提供 Message-Id 的事實。
上面關於SMTP的討論部分提到了“訊息”頭和“信封”頭的不同之處。這種區別和導致的後果將在這裡詳細地討論。
簡單地說,“信封”頭實際上是由接收訊息的郵件伺服器產生的,而不是傳送者伺服器。按照這個定義,“Received:”頭是信封頭,而一般來說常常使用"envelope From"和"envelope To"來指示它們。
"envelope From"頭是從 MAIL FROM 命令得到的。如傳送者郵件伺服器發出命令 MAIL FROM: [email protected],則接收者伺服器則產生一個"envelope From"頭:>From [email protected]。
注意這裡少了一個冒號—"From"而不是"From:"。也就是說信封頭在其後沒有冒號。當然這個慣例並不是標準,但是這時一個值得注意的慣例。
對 應的是"envelope To"同樣來自於RCPT TO命令。如果傳送者伺服器發出命令RCPT TO: [email protected]。則"envelope To"為 [email protected]。一般來說實際上並沒有這樣一個郵件頭,它常常是包含在Received:頭中。
存在信封資訊的一個重要結果就是訊息 From: 和 To: 變得毫無意義。From: 頭是由傳送者提供的,同樣 To: 也是由傳送者提供的。因此郵件僅僅基於"envelope To"來進行轉發路由,而不是基於訊息To:。
為了從實際中理解這個概念,看看下面這樣的郵件傳輸:
HELO galangal.org
250 mail.alpha.com.cn Hello linuxaid.com.cn [202.99.11.120], pleased to meet you
MAIL FROM: [email protected]
250 [email protected] Sender ok
RCPT TO: [email protected]
250 [email protected] Recipient OK
DATA
354 Enter mail, end with "." on a line by itself
From: [email protected]
To: (這裡你的地址被隱瞞以實現祕密郵件轉發和騷擾)
.
250 OAA08757 Message accepted for delivery
下面是對應的郵件頭:
>From [email protected]
Received: from galangal.org ([202.99.11.120]) by mail.alpha.com.cn (8.8.5) for <[email protected]>...
From: [email protected]
To: (這裡你的地址被隱瞞以實現祕密郵件轉發和騷擾)
注意到"envelope From"的內容和訊息 From: 的內容和訊息 To: 的內容都是傳送者指定的,因此他們都是不可靠的。這個例子說明了為什麼信封From、訊息 From: 及訊息 To: 在可能是偽造的郵件中是不可靠的,因為它們太容易偽造了。
"Received:"頭的重要性
在 上面的例子中我們已經看到,"Received:"頭提供了詳細的訊息傳輸歷史記錄,因此即使在其他郵件頭是被偽造的情況下也可能根 據"Received:"頭得到某些關於該信件原始出處和傳輸過程的結論。這部分將詳細探討某些和異常的重要訊息頭相關的問題,特別是如何挫敗那些常見的 偽造技術。
毫無疑問的是,在"Received:"頭中唯一重要且有價值的偽造防護就是由接收伺服器記錄的那些資訊。前面提到傳送者能偽造自己的身份( 通過在HELO命令中報告錯誤的身份)。幸運的是現代郵件伺服器程式都可以檢測到這種錯誤資訊並加以修正。
如果伺服器 linuxaid.com.cn 的真實IP地址是 202.99.11.120,傳送郵件給 mail.alpha.com.cn,但是使用HELO galangal.org命令來偽造自己的身份,則對應該次傳輸的"Received:"可能如下所示:
Received: from galangal.org ([202.99.11.120]) by mail.alpha.com.cn (8.8.5)...
(後 面的其他資訊被省略以更加清晰)。注意雖然zky.ac.cn沒有明確地說galangal.org不是傳送者的真實身份,但是它記錄了傳送者正確的IP 地址。如果某接收者認為訊息頭中的galangal.org是偽造者偽造的身份,他可以檢視IP地址 202.99.11.120 來得到對應的正確域名是linuxaid.com.cn,而不是 galangal.org。也就是說記錄傳送伺服器的IP地址提供了足夠的資訊來確認可以的偽造行為。
很多現代郵件程式實際上將根據IP檢視對應域名的過程自動化了。(這種檢視過程被稱為反向DNS解析)。如果 mail.alpha.com.cn 使用這種軟體,則"Received:"頭則變為
Received: from galangal.org (linuxaid.com.cn [202.99.11.120]) by mail.alpha.com.cn...
從 這裡可以清楚地看到偽造行為。這個訊息頭明確地說 linuxaid.com.cn 的IP地址是202.99.11.120,但是卻宣稱自己的身份為galangal.org。這樣的資訊對於對於驗證和追蹤偽造信件是非常有用的。(因 此,垃圾郵件傳送者往往避免使用那些記錄傳送者地址的郵件伺服器進行垃圾郵件轉發。有時候它們可以找到不記錄傳送者伺服器,但是現在網路上這樣的伺服器已 經很少了)
偽造者偽造郵件的另外一個日益常見的技巧是在傳送垃圾郵件以前新增偽造的"Received:"頭。這意味著從 linuxaid.com.cn 傳送的假設的郵件的"Received:"頭的內容可能為:
Received: from galangal.org ([202.99.11.120]) by mail.alpha.com.cn (8.8.5)...
Received: from nowhere by fictitious-site (8.8.3/8.7.2)...
Received: No Information Here, Go Away!
很 明顯,最後兩行內容完全是毫無疑義的,是由傳送者編寫並在傳送以前附在郵件中的。由於一旦郵件離開 linuxaid.com.cn,傳送者對郵件完全失去了控制。而且新的"Received:"頭總是出現新增在訊息的頭部,因此偽造 的"Received:"頭總是出現在"Received:"頭列表的尾部。這意味著任何人從頭到尾讀取"Received:"頭列表,追蹤郵件傳輸歷 史,都能安全地剔除在第一個偽造頭以後的內容。即使"Received:"頭看上去似乎是真實的,但是實際上都是偽造的。
當然,傳送者不一定會用明顯的垃圾資訊來迷惑你,一個處心積慮的偽造者可能建立如下所示的看似真實的"Received:"頭列表:
Received: from galangal.org ([202.99.11.120]) by mail.alpha.com.cn (8.8.5)...
Received: from lemongrass.org by galangal.org (8.7.3/8.5.1)...
Received: from graprao.com by lemongrass.org (8.6.4)...
這 裡洩漏偽造問題的唯一地方是第一個"Received:"頭中的 galangal.org 的IP地址。如果偽造者這裡填寫了lemongrass.org 和graprao.com 的真實IP地址,則這樣的偽造偽造仍然非常難以檢測。但是第一個"Received:"頭中的域名和IP的不匹配仍然揭露了訊息是偽造的,並且該郵件是有 網路中地址為 202.99.11.120 的伺服器注入到網路中。然而大多數郵件頭偽造者一般都沒有這麼狡猾,一般額外新增的"Received:"頭一般都很明顯地是偽造的垃圾。
相關推薦
Email郵件頭(郵件傳送原理、INTERNET郵件頭)揭密
一、簡介 本文將詳細討論email頭的方方面面。主要為使用者架設郵件伺服器提供理論基礎併為管理員在出現電子郵件垃圾騷擾時提供發現垃 圾郵件的真正源頭。根據郵件頭的知識有助於發現偽造的郵件。對於希望瞭解郵件是如何在網路中傳輸的使用者同樣會有幫助。文章有若干虛構的域名和隨意分配的 IP地址作為示例使用。 二、
redis高級應用(集群搭建、集群分區原理、集群操作)
onf -c emca 文件夾 fig host current dump 拷貝 文章主目錄 Redis集群簡介 Redis集群搭建 Redis集群分區原理 集群操作 參考文檔 本文是redis學習系列的第四篇,前面我們學習了redis的數據結構和一些高級特性,
使用php發郵件一(開啟郵箱服務qq郵箱為例)
1、進入你的QQ郵箱,進入賬戶介面 2、找到相應的服務,開啟服務,並獲取授權碼 這裡的意思是可以使用imap.qq.com作為郵件接收伺服器,smtp.qq.com作為郵件傳送伺服器。 以下摘自百度百科 POP3協議允許電子郵件客戶端下載伺服器上的郵件,但是在客戶端的
URL訪問網站的過程(三次握手、四次揮手),傳送RST包的四種情況,常用協議
URL訪問網站(三次握手、四次揮手) 1)獲得域名所對應的IP地址,若DNS快取中沒有相關資料,則IE瀏覽器向DNS伺服器發出DNS請求,以獲取域名所對應的IP地址。 2)IE瀏覽器與域名地址建立TCP連線,三次握手 3)http訪問 4)斷開TCP連線,四次揮手
IFE第二十八天到第三十天:給愛的人發個郵件吧(郵箱輸入下拉框提示功能)
task1 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>IFE ECMAScript</title>
JS跨域(ajax跨域、iframe跨域)解決方法及原理詳解
js跨域是指通過js在不同的域之間進行資料傳輸或通訊,比如用ajax向一個不同的域請求資料,或者通過js獲取頁面中不同域的框架中(iframe)的資料。只要協議、域名、埠有任何一個不同,都被當作是不同的域。 要解決跨域的問題,我們可以使用以下幾種方法: 1、
JS跨域(ajax跨域、iframe跨域)解決方法及原理詳解(jsonp)
這裡說的js跨域是指通過js在不同的域之間進行資料傳輸或通訊,比如用ajax向一個不同的域請求資料,或者通過js獲取頁面中不同域的框架中(iframe)的資料。只要協議、域名、埠有任何一個不同,都被當作是不同的域。 下表給出了相對http://store.company.com/dir/page.htm
Mysql實現級聯操作(級聯更新、級聯刪除)
刪除表 null weight .cn eat 失敗 bsp src 成績 一、首先創建兩張表stu,sc create table stu( sid int UNSIGNED primary key auto_increment, name varchar(20) no
數據結構(嚴蔚敏、吳偉民)——讀書筆記-2、 線性表及其基本運算、順序存儲結構
content pri 線性 時間復雜度 length 將他 ron 個數 p s 第二章 線性表 2.1 線性表及其基本運算 2.2 線性表的順序存儲結構 2.3 線性表的鏈式存儲結構 1、線性表:是n個數據元素的有限序列。
AD軟件原理圖封裝過程(即由原理圖轉換到PCB)
wid 文件 布線 自動 cnblogs project 空白 blog 菜單欄 第一步:先畫出你所要的原理圖 第二步:點擊菜單欄的工具→封裝管理器,進去封裝管理器頁面,點擊左邊的每一個元件, 然後選擇封裝時的元器件,再點擊右邊的確定(每一個元器件確定好封裝要用的元
【算法拾遺(java描寫敘述)】--- 插入排序(直接插入排序、希爾排序)
ecan itblog insert med image java程序 can rip title 插入排序基本思想 每次將一個待排序的記錄按其keyword大小插入到前面已經拍好序的子文件的適當位置,直到全部記錄插入完畢為止。 直接插入
ubuntu安裝搜狗輸入法(ubuntu 14.04、ubuntu16.04通用)
ron 搜索 conf 技術 ubuntu安裝 再次 ges key log 本方法ubuntu 14.04、ubuntu16.04通用。 1.下載搜狗輸入法的安裝包deb 下載地址: http://pinyin.sogou.com/linux/?r=pinyin 2.安裝
AutoMapper介紹(未完待續、部分沒實現)
generic control nuget under start 官網 behavior 發現 cas 實體間轉換工具。其實也可以用Json來實現同名屬性、異名屬性(用JsonProperty指明)的自動轉換 最新版本6.11 需要使用vs2013以上。vs2012下
用友軟件操作流程(新建年度帳、年度結轉步驟)
normal 過去 帳號登錄 最新 去年 bottom bsp ext mic 一年又結束了,財務部又需要轉結去年的年度帳,開新的年度帳,所以做個記錄,以留後用。準備工作:在執行年度數據結轉前應完成以下基礎準備工作:1、確保所有數據已經錄入完畢;2、所有憑證都已正確記賬;3
java基礎 第一章上(安裝 配置java、簡單dos命令)
目錄 環境 文件中 blog 命令 下載安裝 path 屏幕 java基礎 一、安裝 配置java 下載安裝 1.java官網下載jdk(32位或者64位根據自己電腦而定)。 2.雙擊jdk.exe文件安裝。 環境變
JS導出PDF插件(支持中文、圖片使用路徑)
width oda https sample .org second 函數 other AD 原文:JS導出PDF插件(支持中文、圖片使用路徑)在WEB上想做一個導出PDF的功能,發現jsPDF比較多人推薦,遺憾的是不支持中文,最後找到pdfmake,很好地解決了此問題。它
容器介面卡(棧容器介面卡、佇列容器介面卡)
我們已有的容器(比如vector、list),這個容器支援的操作很多,比如插入,刪除,迭代器訪問等等。而我們希望這個容器表現出來的是棧的樣子:先進後出,入棧出棧等等, 此時,我們沒有必要重新動手寫一個新的資料結構,而是把原來的容器重新封裝一下,改變它的介面,就能把它當做棧使用了。 c++定義
Linux基礎回顧(關機重啟、系統執行級別)
關機與重啟 shutdown關機、reboot重啟 shutdown -h 關機 shutdown -r 重啟 reboot 重啟 shutdown -c 取消前一個關機命令 shutdown -r 05:30 & # 早
centos6.7下的系統備份與恢復(bacula 的安裝、配置和執行)
一、安裝bacula 這裡對上一節的第一種bacula部署結構進行介紹。 主機名 IP地址 作業系統 應用角色 baculaServer 10.0.172.185 centos6.7 Director、SD、Console baculaClient 1
LTE關鍵技術之一:OFDMA(OFDM基本原理及簡單例項應用)
OFDM即正交頻分複用(Orthogonal Frequency Division Multiplexing),是多載波調製的一種,通俗來說就是通過多條互相沒有關係的通道傳輸不同的資訊。OFDM現在主要用於4G通訊上