php HTTP協議


HTTP協議

超文本傳輸協議(HTTPHyperText Transfer Protocol)

最常見B/s架構中,使用,瀏覽器端與服務器端數據交互協議。

協議約定好的一套語法規則。

規定:請求數據格式,與響應數據格式

應用協議

請求協議

規范,瀏覽器向服務器發送數據格式

以上內容,就是瀏覽器在服務器的http://shop.kang.com/index.php?p=back&c=Admin&a=login請求時,所發送的數據。

請求數據分成三部分(列子中其實2個部分

請求行:request_line

請求數據的第一行,用來說明當前請求的最基本信息。

三塊組成:

GET /index.php?p=back&c=Admin&a=login HTTP/1.1 換行

方式 資源地址沒有域名) 協議版本 \r\n(回車換行CRLF)

請求request_header

請求頭信息,請求標頭

瀏覽器需要傳輸給服務器的屬性數據。

# 主機,請求的主機。用於標識一台web服務器上的其中一個虛擬主機的。

Host: shop.kang.com

# 用戶代理UA,什么發出的請求。

User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0

# 可以接受的內容類型

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

# 可以接受的語言

Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3

# 可以接受的數據編碼類型(壓縮編碼)

Accept-Encoding: gzip, deflate

# 攜帶的cookie數據

Cookie: PHPSESSID=i76sa2297sp1adlfk3e4eja612

# tcp連接類型 keep-alive保持激活

Connection: keep-alive

# Keep-Alive: 30 保持連接的時間段秒

# 緩存控制選項

Pragma: no-cache

Cache-Control: no-cache

 

注意語法格式:

,由標識與內容組,使用冒號分隔標識與冒號不能存在空格)

每個頭占用一行,結尾使用CRLF(回車換行\r\n

可以存在多個頭

信息結束使用空行標志

請求主體:request_content

請求主要用戶數據。

就是POST數據。

如果方式為POST,則需要請求主體部分GET沒有請求主

操作請求

通過瀏覽器所攜帶屬性,完成特定功能。

多語言程序(I18n,國際化程序)

項目:提供多套語言版本。

瀏覽器:請求時,攜帶屬性,告知服務器,需要那種語言。

通過請求頭:Accept-Language 告知服務器,希望使用的語言

項目:可以獲取瀏覽器需要的語言,載入相應的語言包,做展示。

獲取

找到最佳匹配:

項目存在默認的語言。(瀏覽器需要的,項目都沒有提供)

確定瀏覽器可以接受的語言列表,找到服務器中,最匹配(權重依次匹配

PHP發出請求(模擬請求)

采集程序。

公共平台開發。

發出請求:

連接目標服務器發送符合請求協議格式的數據。

服務器就會將其視為請求,發出響應!

連接:

Fsockopen();建立一個internet連接

 

 處理請求數據:

服務器發送,發出請求。

通過函數 fwrite即可完成。(fwrite可以向文件和網絡資源位置發送數據

獲取服務器的響應數據

使用 fgetS()完成

Feof,(end of file)用於檢測是否到到數據流末尾。

斷開連接

POST請求

存在請求主體數據。

請求行:POST

請求頭:存在對請求主體的描述

請求主體:post數據

 

CURL-Client URL

PHP擴展。

可以用來模擬URL客戶端瀏覽器請求代理)的工具擴展。

開啟擴展

Apacherestart

Tip

依賴類庫:

Php目錄

以上文件拷貝到系統目錄(windows中),php目錄設置為path環境變量

模擬GET

Curl資源 = curl_init()初始化curl

curl_setopt(curl資源,選項標志,選項值)

curl_exec(資源)發出請求

curl_close()關閉資源

POST請求

處理響應數據

curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);//

請求執行時,不是將響應直接輸出,而是以返回值的形式處理。

POST文件上傳

Post數據使用文件地址,前使用@標志為文件而不是字符串。

處理響應頭

CURLOPT_HEADER:是否獲取響應頭數據

處理會話COOKIE

模擬登錄)

接收服務器設置的cookie,並存儲於請求代理端

CURLOPT_COOKIEJAR 指定存儲服務器所設置的cookie變量存儲位置。

發出請求時攜帶擁有cookie

CURLOPT_COOKIEFILE

請求時攜帶的cookie數據所在的位置。

響應協議

也是三部分:

1響應行2響應頭3響應主體

響應行

響應數據第一行,響應結果的概述

http/1.1 302 FoundCRLF

版本 響應狀態碼 響應消息

響應狀態碼,和響應消息,一一對應。

302 Found:重定向,配合響應頭Location使用。

404 Not Found請求資源不存在。

403 Forbidden:沒有權限訪問該地址

200 ok 請求成功

500 Server Internal Error 服務器內部錯誤

響應

服務器告知瀏覽器屬性信息。

響應主體

主體數據通過瀏覽器的查看源代碼所看到的內容)

操作響應

操作響應頭,header()可以

操作響應主體,任何的輸出,都是響應主體。echo printvar_dumpPHP標簽之外的所有HTML代碼)

控制器瀏覽器緩存

Expires有效期,時間GMT時間,格林威治平時。

Gmdate() 時間戳格式化為格林威治平時。

D,星期

M,月(三個英文月)

HTTP下載

下載:文件從服務器端傳輸到瀏覽器端。發生於服務器響應時。

PHP僅僅需要將需要下載的內容作為響應主體輸出即可。

通過響應頭Content-Disposition告知瀏覽器,接受到響應主體后的處理方式。

attachment 表示以附件的方式處理響應主體。

如果是文件的下載:

文件內容作為響應主體輸出即可!

控制下載的文件名(默認為請腳本名)

控制主體類型:

細致控制:

主體大小。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM