成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專(zhuān)欄INFORMATION COLUMN

PHP_HTTP協(xié)議

ziwenxie / 1339人閱讀

摘要:網(wǎng)絡(luò)之間互連的協(xié)議超文本傳輸協(xié)議是互聯(lián)網(wǎng)上應(yīng)用最為廣泛的一種網(wǎng)絡(luò)協(xié)議。使用什么協(xié)議,來(lái)說(shuō)明這兩個(gè)問(wèn)題。

HTTP協(xié)議介紹

重要性:
是使用webservice,還是rest做大型架構(gòu),都離不開(kāi)對(duì)HTTP協(xié)議的認(rèn)識(shí)

簡(jiǎn)化的說(shuō):
webservice = http協(xié)議 + XML
Rest = http協(xié)議 + JSON

各種API,也是通過(guò)http + XML/JSON來(lái)實(shí)現(xiàn)

做采集,需要對(duì)http協(xié)議有所了解,以及ajax,對(duì)http協(xié)議理解.

協(xié)議

計(jì)算機(jī)中的協(xié)議和現(xiàn)實(shí)中的協(xié)議是一樣的,一式雙份/多份
雙方/多方都遵從共同的一個(gè)規(guī)范,這個(gè)規(guī)范稱(chēng)之為協(xié)議.

ftp, https, http, stmp, pop, tcp/ip 協(xié)議...

URI/URL/URN

// URL: 統(tǒng)一資源定位符
https://v.sf.com:80/index.html?name=user#bbs

// URN:統(tǒng)一資源名稱(chēng)
ste.org/img.png

URI :統(tǒng)一資源標(biāo)識(shí)符

URN和URL都屬于URI.

URI能成為URL的當(dāng)然就是那個(gè)“訪(fǎng)問(wèn)機(jī)制”,“網(wǎng)絡(luò)位置”

URN是唯一標(biāo)識(shí)的一部分,就是一個(gè)特殊的名字

https默認(rèn)尋找服務(wù)器443端口

名詞解釋:

OSI:開(kāi)放系統(tǒng)互連參考模型(Open System Interconnnect 簡(jiǎn)稱(chēng)OSI)

TCP:TCP (Transmission Control Protocol 傳輸控制協(xié)議)是一種面向連接的,可靠的,基于字節(jié)流的傳輸層通信協(xié)議。

IP:IP(Internet Protocol)網(wǎng)絡(luò)之間互連的協(xié)議

HTTP:HTTP(Hyper Text Transfer Protocol超文本傳輸協(xié)議)是互聯(lián)網(wǎng)上應(yīng)用最為廣泛的一種網(wǎng)絡(luò)協(xié)議。

HTTPS:HTTPS (Hyper Text Transfer Protocol over Secure Socket Layer)是以安全為目標(biāo)的HTTP通道,簡(jiǎn)單講師HTTP的安全版

五層網(wǎng)絡(luò)協(xié)議
應(yīng)用層(http/https/websocket/ftp) => 定義:文本傳輸協(xié)議
    ↓
傳輸層(tcp/udp) => 定義:端口    
    ↓
網(wǎng)絡(luò)層(IP) => 定義:IP
    ↓
鏈路層(mac&數(shù)據(jù)包) => 定義:數(shù)據(jù)包,MAC地址
    ↓
實(shí)體層(光纜/電纜/交換機(jī)/路由/終端...)  => 定義:物理       

網(wǎng)絡(luò)協(xié)議解釋?zhuān)?br>解釋1:分別代表TCP協(xié)議和IP協(xié)議
解釋2:如果按照網(wǎng)絡(luò)五層架構(gòu),TCP/IP代表除了應(yīng)用層其它層所有協(xié)議簇的統(tǒng)稱(chēng)

TCP/IP三次握手:

           標(biāo)有syn的數(shù)據(jù)包
          ----------------->
          標(biāo)有syn/ack的數(shù)據(jù)包
  client  <-----------------  server
           標(biāo)有ack的數(shù)據(jù)包
          ----------------->

Keep-Alive
HTTP協(xié)議初期每次連接結(jié)束后都會(huì)斷開(kāi)TCP鏈接,之后HEADERconnection字段定義Keep-Alive(HTTP1.1 默認(rèn) 持久連接),代表如果連接雙方如果沒(méi)有一方主動(dòng)斷開(kāi)都不會(huì)斷開(kāi)TCP連接,減少了每次建立HTTP連接時(shí)進(jìn)行TCP的連接的消耗.

HTTP協(xié)議工作流程

當(dāng)打開(kāi)一個(gè)頁(yè)面之后時(shí).

原始狀態(tài) : 客戶(hù)端與服務(wù)器之間沒(méi)有關(guān)系

request 請(qǐng)求

客戶(hù)端 --> 服務(wù)器 (請(qǐng)求連接)
連接:就是網(wǎng)絡(luò)上的虛擬電路

response 響應(yīng)

客戶(hù)端 <-- 服務(wù)器 (沿著連接,返回響應(yīng)信息)

客戶(hù)端,收到響應(yīng)代碼(HTML代碼,解析文字,圖片)

斷開(kāi)連接

瀏覽器能發(fā)送HTTP協(xié)議,HTTP協(xié)議一定要瀏覽器來(lái)發(fā)送么?
不是,HTTP是一種協(xié)議,只要滿(mǎn)足,什么工具都可以發(fā)送.
可以使用 telnet host port
telnet作用:遠(yuǎn)程控制web服務(wù)器

回顯功能:
ctrl+]輸入之后,再回車(chē)

請(qǐng)求信息和響應(yīng)信息

請(qǐng)求

請(qǐng)求行

請(qǐng)求頭信息

請(qǐng)求主體信息 (可以沒(méi)有)

頭信息結(jié)束后和主體信息之間要空行一行

請(qǐng)求行

請(qǐng)求方法
請(qǐng)求方法:GET,POST,PUT,HEAD,DELTE,TRACE,OPTIONS

請(qǐng)求路徑

所用的協(xié)議: 目前一般是HTTP/1.1 0.9 和 1.0 基本不使用

使用telnet來(lái)完成HTTP協(xié)議的POST請(qǐng)求

POST /github/http/telnet_post.php HTTP/1.1
Host: www.muchai.com
Content-type: application/x-www-form-urlencoded
Content-length: 33

響應(yīng)

響應(yīng)行

相應(yīng)頭信息

相應(yīng)主體信息

響應(yīng)行

協(xié)議

狀態(tài)碼

狀態(tài)文字

方法與狀態(tài)碼 請(qǐng)求方法

請(qǐng)求方法有哪些?

GET, POST, HEAD, PUT, TRACE, DELETE, OPTIONS

HEAD和GET基本一致,只是不返回內(nèi)容.
比如:只是確認(rèn)一個(gè)內(nèi)容(照片)是否還存在,不需要返回具體的內(nèi)容。

PUT: 往服務(wù)器資源傳輸內(nèi)容
TRACE:使用代理上網(wǎng). 比如用代理訪(fǎng)問(wèn)www.sf.gg看下代理是否修改HTTP請(qǐng)求,可以使用TRACE來(lái)測(cè)試一下,sf.gg的服務(wù)器就會(huì)把最后收到的請(qǐng)求返回.

OPTIONS: 返回服務(wù)器可用的請(qǐng)求方法.

注意:這些請(qǐng)求方法雖然是HTTP協(xié)議中規(guī)定的,但WEB SERVER未必允許或支持這些方法.

get: 獲取資源,url傳參,大小2KB

post: 傳輸資源,http body, 大小默認(rèn)8M,1000個(gè)input variable

put: 傳輸資源,http body,資源更新

delete: 刪除資源

patch: 傳輸資源,http body,存在的資源局部更新

head: 獲取http header

options: 獲取支持的method

trace: 追蹤,返回請(qǐng)求回環(huán)信息

connect: 建立隧道通信

狀態(tài)碼

狀態(tài)碼和狀態(tài)文字

狀態(tài)碼: 是用來(lái)反應(yīng)服務(wù)器響應(yīng)情況的
最常見(jiàn)的: 200 OK, 404 NOT FOUND,
狀態(tài)文字是用來(lái)描述狀態(tài)碼,便于人觀(guān)察

響應(yīng)中的狀態(tài)碼

狀態(tài)碼 定義 說(shuō)明
1xx 信息 接收到請(qǐng)求,繼續(xù)處理
2xx 成功 操作成功地收到請(qǐng)求,理解和接受
3xx 重定向 為了完成請(qǐng)求,必須采取進(jìn)一步措施
4xx 客戶(hù)端錯(cuò)誤 請(qǐng)求的語(yǔ)法錯(cuò)誤或不能完全被滿(mǎn)足
5xx 服務(wù)端錯(cuò)誤 服務(wù)器無(wú)法完成明顯有效的請(qǐng)求

常用的狀態(tài)碼:
200 -- 服務(wù)器成功返回網(wǎng)頁(yè)
301/2 -- 永久/臨時(shí)重定向

304 Not Modified -- 未修改 (客戶(hù)端告知服務(wù)器請(qǐng)求的資源,時(shí)間ETag是否變化)
307 重定向中保持原有的請(qǐng)求數(shù)據(jù).(POST重定向之后,數(shù)據(jù)丟失)

失敗的狀態(tài)碼:
404 -- 請(qǐng)求的網(wǎng)頁(yè)不存在,地址錯(cuò)誤。
403 -- 禁止訪(fǎng)問(wèn),權(quán)限不足。
503 -- 服務(wù)器暫時(shí)不可用
500 -- 服務(wù)器內(nèi)部錯(cuò)誤
502(Bad Gateway) -- 網(wǎng)關(guān)錯(cuò)誤(ip設(shè)置的時(shí)候網(wǎng)關(guān)地址錯(cuò)誤)


200: ok

301: 永久重定向

302: 臨時(shí)重定向

303: 臨時(shí)重定向,要求用get請(qǐng)求資源

304: not modified, 返回緩存,和重定向無(wú)關(guān)

307: 臨時(shí)重定向,嚴(yán)格不從post到get

400: 參數(shù)錯(cuò)誤

401: 未通過(guò)http認(rèn)證

403: forbidden,未授權(quán)

404: not found,不存在資源

500: internet server error,代碼錯(cuò)誤

502: bad gateway,fastcgi返回的內(nèi)容web server不明白

503: service unavailable,服務(wù)不可用

504: gateway timeout,fastcgi響應(yīng)超時(shí)

Header Fields

常見(jiàn)通用頭部

Cache-Control:

no-cache: 不緩存過(guò)期的緩存

no-store: 不緩存

Pragma:

no-cache: 不使用緩存,http1.1前的歷史字段

Connection:

控制不在轉(zhuǎn)發(fā)給代理首部字段

Keep-Alive/Close:持久連接

Date: 創(chuàng)建http報(bào)文的日期

常見(jiàn)請(qǐng)求頭

Accept:可以處理的媒體類(lèi)型和優(yōu)先級(jí)
Host:目標(biāo)主機(jī)域名
Referer: 請(qǐng)求從哪發(fā)起的原始資源URI
User-Agent:創(chuàng)建請(qǐng)求的用戶(hù)代理名稱(chēng)
Coolie:cookie信息

常見(jiàn)響應(yīng)頭

Location: 重定向地址
Server: 被請(qǐng)求的服務(wù)web server的信息
Set-Cookie:要設(shè)置的cookie信息

NAME:要設(shè)置的鍵值對(duì)

expires:cookie過(guò)期時(shí)間

path: 指定發(fā)送cookie的目錄

domain: 指定發(fā)送cookie的域名

Secure: 指定之后只有https下才發(fā)送cookie

HostOnly:指定之后javascript無(wú)法讀取cookie

HTTPS

概念:在http協(xié)議上增加了ssl(secure socket layer)層。

SSL層
↓
應(yīng)用層
↓
傳輸層
↓
網(wǎng)絡(luò)層
↓
鏈路層
↓
實(shí)體層

HTTPS認(rèn)證流程

                     發(fā)起請(qǐng)求
                     --------------------------->  server 
                              下發(fā)證書(shū)
                      <---------------------------   server 
                      證書(shū)數(shù)字簽名(用證書(shū)機(jī)構(gòu)公鑰加密)
                     --------------------------->  證書(shū)機(jī)構(gòu) 
                          證書(shū)數(shù)字簽名驗(yàn)證通過(guò)
client(內(nèi)置證書(shū)機(jī)構(gòu)證書(shū)) <---------------------------   證書(shū)機(jī)構(gòu)
                      公鑰加密隨機(jī)密碼串(未來(lái)的共享秘鑰)
                     --------------------------->  server私鑰解密(非對(duì)稱(chēng)加密)
                        SSL協(xié)議結(jié)束 HTTP協(xié)議開(kāi)始
                      <---------------------------   server(對(duì)稱(chēng)加密)
                            共享秘鑰加密 HTTP
                     --------------------------->  server(對(duì)稱(chēng)加密)

核對(duì)證書(shū):證書(shū)機(jī)構(gòu)的公開(kāi)密鑰驗(yàn)證整數(shù)的數(shù)字簽名

公開(kāi)密鑰加密建立連接:非對(duì)稱(chēng)加密

共享密鑰加密

HTTP2

多路復(fù)用:多個(gè)請(qǐng)求共享一個(gè)tcp連接

全雙工通信

必須https://

頭部壓縮

二進(jìn)制傳輸

socket編程

socket發(fā)送,HTTP請(qǐng)求.

    /**
     * PHP + socket編程 ,發(fā)送HTTP請(qǐng)求
     * 
     * 模擬下載, 注冊(cè),登陸, 批量發(fā)帖
     */
    

    // http請(qǐng)求類(lèi)的接口
    interface Proto {
        // 連接URL
        public function conn($url);
        
        // 發(fā)送get查詢(xún)
        public function get();
        
        // 發(fā)送post查詢(xún)
        public function post();    
        
        // 關(guān)閉連接
        public function close();        
                
    } 

    class Http implements Proto {
        
        const CRLF = "
"; // 換行信息 
        
        protected $errno = -1; // 錯(cuò)誤編號(hào)
        protected $errstr = ""; // 錯(cuò)誤信息
        protected $response = ""; // 響應(yīng)內(nèi)容             
        
        protected $urlInfo = null; // URL信息
        protected $version = "HTTP/1.1"; // 協(xié)議版本
        protected $fh = null; // 句柄
        
        protected $line = array(); // 請(qǐng)求行信息
        protected $header = array(); // 請(qǐng)求頭信息
        protected $body = array(); // 請(qǐng)求主體信息
        
        
        public function __construct( $url ) {
            $this->conn($url);
            
            // 設(shè)置頭信息
            $this->setHeader("Host: " . $this->urlInfo["host"]);
        }
        
        /**
         * 設(shè)置請(qǐng)求行
         * @param {Stinrg} $method 請(qǐng)求方法 默認(rèn)GET
         */
        protected function setLine( $method ) {
            $this->line[0] = $method . "  " . $this->urlInfo["path"] . " " . $this->version;
        }
        
        /**
         * 聲明頭信息
         * @param {String} $headerline 頭信息
         */
        protected function setHeader( $headerline ) {
            $this->header[] = $headerline; 
        }
            
        /**
         * 寫(xiě)主體信息
         * @param {Array} $body 設(shè)置body信息
         */    
        protected function setBody( $body ) {
            $this->body[] = http_build_query($body);            
        } 
        
        /**
         * 連接URL
         * @param {String} $url 連接的URL
         */
        public function conn( $url ) {
            // 分析URL
            $this->urlInfo = parse_url($url);
            
            // 判斷端口
            $this->urlInfo["port"] = isset($this->urlInfo["port"]) && $this->urlInfo["port"] == 80 ? $this->urlInfo["port"] : 80; 
            
            // 連接
            $this->fh = fsockopen($this->urlInfo["host"], $this->urlInfo["port"], $this->errno, $this->errstr, 3);
            
        }
        
        /**
         * 構(gòu)造get查詢(xún)
         */
        public function get() {
            $this->setLine("GET");
            
            $this->request();
            return $this->response;
        } 
        
        
        /**
         * 請(qǐng)求get數(shù)據(jù)
         * 請(qǐng)求POST數(shù)據(jù)
         */
        public function request() {
            // 拼接請(qǐng)求信息
            $req = array_merge($this->line, $this->header, array(""), $this->body, array(""));
            $req = implode(self::CRLF, $req);
            
            // 寫(xiě)
            fwrite($this->fh, $req);
            
            // 讀取
            while ( !feof($this->fh) ) {
                $this->response .= fread($this->fh, 1024); 
            }
            // 關(guān)閉連接
            $this->close();
        } 
        
        /**
         * 構(gòu)造post查詢(xún)
         * @param {Array} $body body 的信息
         *      
         */
         
        public function post( $body=array() ) {
            
            // 設(shè)置請(qǐng)求行
            $this->setLine("POST");
            
            // 構(gòu)造主體信息
            $this->setBody($body);
            
            // 設(shè)置 Content-type 和  計(jì)算Content-length
            $this->setHeader("Content-type: application/x-www-form-urlencoded");
            $this->setHeader("Content-length: " . strlen($this->body[0]));
            
            $this->request();
            return $this->response;
            
        } 
        
        /**
         * 關(guān)閉連接
         */
        public function close() {
            fclose($this->fh);
        } 
        
    }

    set_time_limit(0); // 設(shè)置腳本最大執(zhí)行時(shí)間

//    $url = "http://luqi.baijia.baidu.com/article/719576";
    $url = "http://www.linxingzhang.com/index.php";
    $http = new Http($url);
//    echo $http->get();
    echo $http->post(array("tit" => "xixi", "con" => "pink"));
http協(xié)議模擬登陸

需要的登陸信息,提供請(qǐng)求信息,模擬提供.

    // content
    $url = "http://w.coral.qq.com/article/comment/";
    
    $msg = array(
        "targetid" => 1665529109,
        "type" => 1,
        "format" => "SCRIPT",
        "callback" => "parent.topCallback",
        "content" => "backbone",
        "_method" => "put",
        "g_tk" => 1437957853,
        "code" => 1,
        "source" => 1,
        "subsource" => 0,
        "picture" => ""     
    );
    
    set_time_limit(0); 
    
    $http = new Http($url);
    
    // 模擬頭信息 
    $http->setHeader("cookie: ptui_loginuin=1129507496@qq.com; pt2gguin=o1129507496; uin=o1129507496; skey=@eHnHS7nT1; ptisp=ctc; RK=9gcWWrSXMK; ptcz=ad2886a1a4a2008cdf953cee396e4c18542dd5667d055f98c1cc7363fc1973ff; pac_uid=1_1129507496; o_cookie=1129507496; pgv_info=ssid=s595782189; pgv_pvid=6186477584; uid=324803742");
    $http->setHeader("Referer: http://www.qq.com/coral/coralBeta3/coralMainDom3.0.htm");
    $http->setHeader("Upgrade-Insecure-Requests:1");
    $http->setHeader("User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.75 Safari/537.36");
    
//    echo $http->post( $msg );
    
    file_put_contents("./res.html", $http->post( $msg ));
    echo "ook";
referer頭與防盜鏈

網(wǎng)站統(tǒng)計(jì)

網(wǎng)站統(tǒng)計(jì)結(jié)果,如何知道用戶(hù)從那些渠道中進(jìn)入本網(wǎng)站?
統(tǒng)計(jì)時(shí),是如何得知用戶(hù)從哪兒來(lái)到本網(wǎng)站?

在HTTP協(xié)議中,頭信息里,有一個(gè)重要的選項(xiàng):referer
referer:代表網(wǎng)頁(yè)的來(lái)源,即上一頁(yè)的地址.
如果直接在瀏覽器地址欄上輸入,進(jìn)入網(wǎng)頁(yè),則沒(méi)有referer頭.

如何配置apache服務(wù)器用于圖片防盜鏈

原理:在web服務(wù)器層面,根據(jù)http協(xié)議的referer頭信息來(lái)判斷。如果來(lái)自站外,則統(tǒng)一重寫(xiě)到一個(gè)很小的防盜鏈提醒的圖片上.(url重寫(xiě))

apache重寫(xiě)模塊 mod_rewrite。(打開(kāi)mod_rewrite.so)

LoadModule rewrite_module modules/mod_rewrite.so
開(kāi)啟后,支持重寫(xiě)模塊.

* 在需要防盜的網(wǎng)站或目錄,寫(xiě).htaccess文件,并指定防盜鏈規(guī)則.

如何指定,分析referer,如果不是來(lái)自本站,從寫(xiě)url.

重寫(xiě)規(guī)則

那種情況重寫(xiě):

是jpeg/jpg/git/png圖片時(shí).
是referer頭信息與localhost不匹配時(shí)重寫(xiě).

> 如何重寫(xiě)

統(tǒng)一rewirte 到 某個(gè)防盜鏈圖片.

mod_rewrite

.hatccess文件:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} .*.(jpg|jpeg|git|png) [NC]
RewriteCond %{HTTP_REFERER} !muchai.com [NC]
RewriteRule .* http://linxingzhang.com/blog/img/weixin.jpg 

采集

模擬referer中的信息來(lái)請(qǐng)求數(shù)據(jù).

    $http = new Http("http://linxingzhang.com/blog/img/weixin.jpg");
    
    $http->setHeader("Referer: http://www.muchai.com");
    $res = $http->get();
    
    file_put_contents("./xixi.jpg", substr(strstr($res, "

"), 4));
http協(xié)議緩存控制

圖片的下載:
第一次請(qǐng)求 200ok
第二次請(qǐng)求 304 not modified(未修改狀態(tài))

在網(wǎng)絡(luò)上有一些緩存服務(wù)器,瀏覽器自身也有緩存功能。
當(dāng)?shù)谝淮卧L(fǎng)問(wèn)某圖片時(shí),正常下載圖片,返回值200
基于一個(gè)前提(圖片不會(huì)經(jīng)常改動(dòng)),服務(wù)器在返回200的同時(shí),還返回該圖片的"簽名"Etag. (簽名:圖片的指紋)
當(dāng)瀏覽器再次訪(fǎng)問(wèn)的同時(shí)去服務(wù)器校驗(yàn)"指紋",如果圖片沒(méi)有變化。直接使用緩存中的圖片.減輕的服務(wù)器的負(fù)擔(dān).

觀(guān)察請(qǐng)求數(shù)據(jù):

第一次訪(fǎng)問(wèn)
請(qǐng)求頭:

相應(yīng)頭:

第二次請(qǐng)求
請(qǐng)求頭

如果 自"Wed, 14 Dec 2016 15:41:45 GMT" 這個(gè)時(shí)間點(diǎn)以后,圖片修改過(guò),則重新請(qǐng)求。
如果圖片最新的ETag的值和 If-None-Match的值不匹配則重新匹配,則重新請(qǐng)求。
響應(yīng)頭

如果是304時(shí),瀏覽器從本地取值.

如果網(wǎng)站比較大,有N臺(tái)緩存服務(wù)器,那么這N臺(tái)服務(wù)器,主服務(wù)器如何處理主服務(wù)器上的文件

要不要緩存 ?

緩存多久?
緩存服務(wù)器與主服務(wù)器之間,應(yīng)該有一些協(xié)議來(lái)說(shuō)明這兩個(gè)問(wèn)題。

使用什么協(xié)議,來(lái)說(shuō)明這兩個(gè)問(wèn)題。
使用頭信息,cache-control 來(lái)控制。
使用方法:
相關(guān)模塊: mod_expires.
在服務(wù)器,打開(kāi)apache的expires擴(kuò)展. 利用該擴(kuò)展,來(lái)控制圖片,css,html等緩存的生存周期及是否緩存.

打開(kāi)httpd.conf配置項(xiàng)

LoadModule expires_module modules/mod_expires.so

.htaccess 文件配置中.

ExpiresDefault " [plus] { }*"
ExpiresByType type/encoding " [plus] { }>*"

ExpiresDefault 是設(shè)置默認(rèn)的緩存參數(shù)
ExpiresByType是按照文件類(lèi)型來(lái)設(shè)置獨(dú)特的緩存參數(shù).

base 基于那個(gè)時(shí)間點(diǎn)計(jì)算緩存有效期
參數(shù):
access/now: 基于請(qǐng)求響應(yīng)的那一瞬間. (例如:從此瞬間到一個(gè)月之后)
modification: 基于被請(qǐng)求文件最后修改日期來(lái)計(jì)算. (例如:最后修改日期后一周內(nèi))

num: 緩存時(shí)間的大小 (例如:30)
type: 緩存的單位(例如:天)

jpeg圖片設(shè)置一個(gè)月的緩存周期

ExpiresActive On
ExpiresByType image/jpeg "access plus 30 days"

如果在集群環(huán)境里,緩存服務(wù)器得到此圖片,將會(huì)認(rèn)為在一個(gè)月內(nèi)有效,減輕了主服務(wù)器的負(fù)擔(dān)。

設(shè)置服務(wù)器,不讓存在緩存.

例如:有些個(gè)人信息,不允許緩存服務(wù)器,必須到主服務(wù)器去請(qǐng)求.

Control-cache: no-store,must-revalidate; // 不允許緩存,必須去主服務(wù)器驗(yàn)證.

利用apache的header模塊
開(kāi)啟httpd.conf中的header模塊

LoadModule headers_module modules/mod_headers.so


header set Cache-Control: "no-store,must-revalidate"
http內(nèi)容壓縮

為了提高網(wǎng)頁(yè)在網(wǎng)絡(luò)上的傳輸速度.服務(wù)器對(duì)主體信息進(jìn)行壓縮.
常見(jiàn)的,gzip壓縮,deflate壓縮,compress壓縮以及sdch壓縮.

壓縮的過(guò)程:

服務(wù)器返回壓縮內(nèi)容,客戶(hù)端接收到壓縮,再解壓縮,再渲染頁(yè)面.
Content-Length壓縮后的長(zhǎng)度

實(shí)際渲染的文件大?。?/p>

如何在apache啟用的壓縮功能?

開(kāi)啟deflate模塊,或者gzip模塊

LoadModule deflate_module modules/mod_deflate.so

conf文件中,配置:


DeflateCompressionLevel 6
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE text/javascript
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/atom_xml
AddOutputFilterByType DEFLATE application/x-javascript
AddOutputFilterByType DEFLATE application/x-httpd-php
AddOutputFilterByType DEFLATE image/svg+xml

為什么要指定文件類(lèi)型壓縮.

壓縮需要耗CUP資源

圖片/視頻等文件,壓縮效果不好.

一般指定壓縮文本格式的文件.

服務(wù)器如何知道瀏覽器支持gzip壓縮

客戶(hù)端允許發(fā)送Accept-Encoding信息.與服務(wù)器協(xié)商.(協(xié)商頭信息)

comet方向ajax

http協(xié)議+持久連接+分塊傳輸 => 反向ajax
反向ajax又叫:comet,server push,服務(wù)器推技術(shù).

應(yīng)用范圍:網(wǎng)頁(yè)聊天服務(wù)器,新浪微博在線(xiàn)聊天,google mail網(wǎng)頁(yè)聊天.

原理:HTTP協(xié)議的特點(diǎn),連接--斷開(kāi).

具體什么時(shí)間斷開(kāi)?
服務(wù)器響應(yīng)content-length,收到指定length長(zhǎng)度的內(nèi)容時(shí),也就斷開(kāi).

在http1.1協(xié)議中,允許不寫(xiě)content-length。(比如要發(fā)送的內(nèi)容長(zhǎng)度確實(shí)不知道)這是,需要一個(gè)特殊的content-typechunked

分塊傳輸:

";
    ob_flush();
    flush(); // 把產(chǎn)生的內(nèi)容立即返回給瀏覽器,而不要等待瀏覽器結(jié)束
     
     
    $i = 1;
    while ( $i++ ) {
        echo $pad, "
"; echo $i, "
"; ob_flush(); flush(); sleep(1); } /** * * 即時(shí)通信. * * 服務(wù)器端不間斷,推送信息. 到客戶(hù)端. */ ?>

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/22162.html

相關(guān)文章

  • php中curl和soap方式請(qǐng)求服務(wù)超時(shí)問(wèn)題

    摘要:公司中有不少服務(wù)是以或者方式連接第三方公司做的服務(wù)來(lái)交互數(shù)據(jù),最近新增加了個(gè)需求,就是第三方服務(wù)發(fā)版時(shí)候,連接不上對(duì)方服務(wù)器時(shí)候要進(jìn)行重試,其它原因?qū)е碌臉I(yè)務(wù)處理失敗,則按失敗處理,不會(huì)再進(jìn)行調(diào)用。 公司中有不少服務(wù)是以curl或者soap方式連接第三方公司做的服務(wù)來(lái)交互數(shù)據(jù),最近新增加了個(gè)需求,就是第三方服務(wù)發(fā)版時(shí)候,連接不上對(duì)方服務(wù)器時(shí)候要進(jìn)行重試,其它原因?qū)е碌臉I(yè)務(wù)處理失敗,則按...

    Apollo 評(píng)論0 收藏0
  • 鵝廠(chǎng)干貨 | 騰訊游戲APP協(xié)議迭代的那些事

    摘要:本文則主要總結(jié)了心悅俱樂(lè)部的接入層從文本協(xié)議到二進(jìn)制協(xié)議迭代過(guò)程中的技術(shù)方案,包括協(xié)議規(guī)范安全性等方面的內(nèi)容。在心悅的文本協(xié)議方案中,采用的是對(duì)請(qǐng)求數(shù)據(jù)進(jìn)行模式的加密。包括明文的協(xié)議包頭和密文的二進(jìn)制流。 歡迎大家前往騰訊云+社區(qū),獲取更多騰訊海量技術(shù)實(shí)踐干貨哦~。 作者:羅廣鎮(zhèn) | 騰訊移動(dòng)開(kāi)發(fā)工程師 App與后臺(tái)通信通常有采用json等文本協(xié)議或者采用二進(jìn)制協(xié)議,本文則主要總結(jié)了心...

    luck 評(píng)論0 收藏0
  • 網(wǎng)絡(luò)基礎(chǔ)(一)

    摘要:數(shù)據(jù)鏈路層中的主要協(xié)議有點(diǎn)對(duì)點(diǎn)協(xié)議協(xié)議以太網(wǎng)。協(xié)議是網(wǎng)際層的核心通過(guò)路由選擇將下一跳封裝后交給網(wǎng)絡(luò)接口層。用來(lái)檢測(cè)網(wǎng)絡(luò)是否通暢使用命令。開(kāi)放表明協(xié)議不是受某一家廠(chǎng)商控制而是公開(kāi)發(fā)表的。 博文參考 http://www.cnblogs.com/gsk99/p/4920699.html http://www.cnblogs.com/iloverain/p/5619665.html http...

    smallStone 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<