跟随我在oracle学习php(51)
HTTP協議
超文本傳輸協議(HTTP,HyperText 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, print,var_dump,PHP標簽之外的所有HTML代碼)
?
控制器瀏覽器緩存
?
Expires:有效期,時間點,GMT時間,格林威治平時。
Gmdate() 將時間戳格式化為格林威治平時。
D,星期
M,月(三個英文月)
?
?
?
HTTP下載
下載:文件從服務器端傳輸到瀏覽器端。發生于服務器響應時。
PHP僅僅需要將需要下載的內容作為響應主體輸出即可。
?
通過響應頭:Content-Disposition:告知瀏覽器,接受到響應主體后的處理方式。
值:attachment 表示以附件的方式處理響應主體。
?
如果是文件的下載:
將文件內容作為響應主體輸出即可!
?
?
控制下載的文件名(默認為請求的腳本名)
?
?
控制主體類型:
?
?
細致控制:
主體大小。
?
轉載于:https://www.cnblogs.com/RighTgraM/p/10925095.html
總結
以上是生活随笔為你收集整理的跟随我在oracle学习php(51)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于.Net + SqlServer的分
- 下一篇: ubuntu12.04 安装 php5.