2011-09-02 146 views
6

下面是來自維基百科文章的摘錄:HTTP請求URL是否不是HTTP請求標頭的一部分?

與其中只有URL和頭是 向服務器發送GET請求方法,POST請求還包括郵件正文。

此基礎上,它看起來像URL從頭單獨發送,但如果這是這樣,爲什麼我們在PHP中使用的header()方法來設置URL重定向到?

header("Location: http://google.com"); 
+3

您正在混淆HTTP請求和HTTP響應。 PHP頭函數爲RESPONSE頭添加了一個新頭,GET和POST是REQUEST方法。 – CaNNaDaRk

+0

啊......這是有道理的。 –

+0

在我的回答中,您有一個REQUEST和RESPONSE的例子,並解釋了標題是什麼。 – CaNNaDaRk

回答

9

當您想從瀏覽器瀏覽URL時,請輸入URL。瀏覽器會將URL像這樣的HTTP請求中:

GET /path/to/resource.php?var=data1&othervar=data2 HTTP/1.1 
Host: example.com 
Connection: keep-alive 
"empty line" 

然後Web服務器爲您提供了這樣一個答案:

HTTP/1.0 200 OK 
Date: Fri, 02 Sep 2011 14:37:36 GMT 
Server: Apache 
Cache-Control: private, s-maxage=0, max-age=0, must-revalidate 
Content-Encoding: gzip 
Vary: Accept-Encoding 
Content-Length: 149 
Content-Type: text/javascript; charset=utf-8 
Connection: keep-alive 
"empty line" 
"149 bytes of Response data" 

每一行這樣的「頁眉名稱:header_value \ r \ n 「是一個標題。
PHP頭函數在將響應發送到用戶的瀏覽器之前向響應添加一個頭。
在你的榜樣標題是:

Location: http://google.com 

,它只是「空行」(這是隻包含一個\ r \ n行)之前的最後一個頭之後加入。
POST請求是從GET請求不同,因爲你有「空行」之後的請求體):

POST /path/to/resource.php HTTP/1.1 
Host: example.com 
Connection: keep-alive 
Content-Length: "number of bytes in the body" 
"empty line" 
variable=data&othervar=data2 

最後一個HTTP請求時這樣的:

  1. 請求/響應行(POST或GET後跟url和http版本請求,Http版本後跟響應代碼和響應響應字符串)以\ r \ n結尾
  2. 請求/響應標頭(header-name:header_value \ r \ n)
  3. 空行(\ r \ n)的
  4. 響應/請求體

PS。行始終以「\ r \ n」字節關閉(「空行」僅由這兩個字節組成)。

+0

請求頭中是第一個引號「GET/path ...'的一部分嗎? –

+2

不是真的,「GET ... HTTP/1.1」和「POST ... HTTP/1.1」是REQUEST行,其後是請求標頭。 – CaNNaDaRk

+0

謝謝!這使得它更清晰。 –

2

header()添加報頭到該文件。

所以,如果你想設置的Content-Type:

header("Content-type: text/javascript"); 

等等......

Location是另一頭,你可以設置和/或與PHP header()功能改變

doc

第二斯佩恰l情況是「位置:」標題。除非已經設置了201或3xx狀態碼,否則它不僅會將此標題發送回瀏覽器,還會向瀏覽器返回REDIRECT(302)狀態碼。

+0

下面是另一個摘錄(這次是從PHP文檔中獲得):'header()用於發送一個原始HTTP頭文件。' –

+0

@EmanuilRusev - 這怎麼改變我的答案呢? – Neal

+0

@Emanuil ......所有標題都是「發送」......這是標題的想法......閱讀我的答案更新 – Neal