20170927 http服務(wù)和apache(二)

  • http-2.2常見配置
  • http協(xié)議
  • curl和elinks工具

一残炮、http-2.2常見配置

  • httpd配置文件的組成:分為三部分
    grep "Section" /etc/httpd/conf/httpd.conf
### Section 1: Global Environment              //全局配置
### Section 2: 'Main' server configuration     //主服務(wù)器配置
### Section 3: Virtual Hosts                   //虛擬主機(jī)配置
  • 配置格式:directive value (指令 值)
    directive:不區(qū)分字符大小寫
    value:當(dāng)為路徑時(shí)喧兄,是否區(qū)分大小寫取決于文件系統(tǒng)

(一)顯示服務(wù)器版本信息

  • 設(shè)置格式:ServerTokens Major|Minor|Min[imal]|Prod[uctOnly]|OS|Full

    • ServerTokens Prod[uctOnly]: Server: Apache
    • ServerTokens Major: Server: Apache/2
    • ServerTokens Minor: Server: Apache/2.0
    • ServerTokens Min[imal]: Server: Apache/2.0.41
    • ServerTokens OS: Server: Apache/2.0.41 (Unix)
    • ServerTokens Full (or not specified): Server: Apache/2.0.41 (Unix) PHP/4.2.2 MyMod/1.2师抄,被注釋時(shí)默認(rèn)狀態(tài)為Full
  • 建議將ServerTokens值設(shè)為Prod

(二)修改監(jiān)聽的IP和Port

  • 設(shè)置格式:Listen [IP:]PORT

    • 省略IP表示為0.0.0.0
    • Listen指令至少一個(gè)簿废,可重復(fù)出現(xiàn)多次
      Listen 80
      Listen 8080
    • 修改監(jiān)聽socket第晰,重載服務(wù)進(jìn)程方可生效
  • 注意:必須有端口號(hào)設(shè)置颓屑,否則服務(wù)啟動(dòng)失敗

  • 實(shí)驗(yàn):只允許從192.168.136.229:8080端口訪問http服務(wù)

vim /etc/httpd/conf/httpd.conf
Listen 192.168.136.229:8080

httpd -t
service httpd reload
curl -I 192.168.136.229:80
curl -I 192.168.136.229:8080
curl -l 172.18.250.44:80

(三)持久連接

  • 定義:連接建立棕叫,每個(gè)資源獲取完成后不會(huì)斷開連接仗岸,而是繼續(xù)等待其它的請求完成允耿,默認(rèn)關(guān)閉持久連接

  • 開啟持久連接需要設(shè)置斷開條件:數(shù)量限制、時(shí)間限制

  • 設(shè)置格式:
    KeepAlive On|Off
    KeepAliveTimeout 15:時(shí)間限制扒怖,單位為秒
    MaxKeepAliveRequests 100:數(shù)量限制

  • 實(shí)驗(yàn):設(shè)置開啟持久連接较锡,時(shí)間限制150秒(為了方便做實(shí)驗(yàn)設(shè)置時(shí)間比較長,實(shí)際根據(jù)情況設(shè)置)姚垃,數(shù)量限制100

vim /etc/httpd/conf/httpd.conf
KeepAlive On
KeepAliveTimeout 150
MaxKeepAliveRequests 100

telnet 192.168.136.229 80
GET /index.html HTTP/1.1
HOST:3.3.3.3     //目前服務(wù)器只管理一個(gè)域名念链,故可以隨便寫
GET /hello.txt HTTP/1.1
HOST:5.5.5.5

(四)MPM(Multi-Processing Module)多路處理模塊

(1)MPM分類:prefork, worker, event
  • httpd-2.2不支持同時(shí)編譯多個(gè)模塊,所以只能編譯時(shí)選定一個(gè)
  • rpm安裝的包提供三個(gè)二進(jìn)制程序文件积糯,分別用于實(shí)現(xiàn)對不同MPM機(jī)制的支持
    • /usr/sbin/httpd: prefork
    • /usr/sbin/httpd.worker: worker
    • /usr/sbin/httpd.event: event (test)
  • 查詢當(dāng)前使用的MPM機(jī)制
    ps aux | grep httpd
(2)模塊
  • 查看靜態(tài)編譯的模塊
    httpd -l
  • 查看靜態(tài)編譯及動(dòng)態(tài)裝載的模塊
    httpd -M
  • 動(dòng)態(tài)模塊加載:不需重啟即生效
  • 動(dòng)態(tài)模塊路徑:/usr/lib64/httpd/modules/
(3)切換使用的httpd程序
//切換至work模式
vim /etc/sysconfig/httpd
HTTPD=/usr/sbin/httpd.worker     //將行前的注釋符#刪除

httpd -t
service httpd restart
(4)prefork的默認(rèn)配置
vim /etc/httpd/conf/httpd.conf

<IfModule prefork.c>
StartServers       8       //啟動(dòng)開啟的進(jìn)程數(shù)
MinSpareServers    5       //最少空閑進(jìn)程數(shù)
MaxSpareServers   20       //最大空閑進(jìn)程數(shù)
ServerLimit      256       //最多進(jìn)程數(shù)掂墓,不能超過MaxClient,最大能設(shè)置為20000
MaxClients       256       //最大并發(fā)數(shù)
MaxRequestsPerChild  4000  //子進(jìn)程最多能處理的請求看成,達(dá)到設(shè)置值子進(jìn)程被父進(jìn)程終止君编,釋放內(nèi)存
</IfModule>
(5)worker的默認(rèn)配置
vim /etc/httpd/conf/httpd.conf

<IfModule worker.c>
StartServers         4
MaxClients         300
MinSpareThreads     25
MaxSpareThreads     75
ThreadsPerChild     25    
MaxRequestsPerChild  0     //無限制
</IfModule>

啟動(dòng)時(shí)開啟4個(gè)進(jìn)程,每個(gè)進(jìn)程開啟25個(gè)線程川慌,共100個(gè)線程螟碎,但最多空閑75個(gè)線程,需要結(jié)束1個(gè)進(jìn)程共25個(gè)線程藐俺,故開啟服務(wù)后實(shí)際只能開到3個(gè)進(jìn)程共75個(gè)線程

(五)DSO(Dynamic Shared Object):動(dòng)態(tài)加載模塊

  • 加載動(dòng)態(tài)模塊配置文件:
    /etc/httpd/conf/httpd.conf

  • 配置指定模塊加載格式:
    LoadModule <mod_name> <mod_path>

  • 模塊文件路徑使用相對路徑:
    相對于ServerRoot(默認(rèn)/etc/httpd)

  • 實(shí)驗(yàn):取消加載模塊auth_basic_module

vim /etc/httpd/conf/httpd.conf
#LoadModule auth_basic_module modules/mod_auth_basic.so     //行前增加注釋符#
httpd -t

service httpd reload
httpd -M | grep auth_basic_module 

(六)定義Main server的文檔頁面路徑

  • 設(shè)置格式:DocumentRoot "/path"
    DocumentRoot指向的路徑為URL路徑的起始位置

  • 注意:SELinux和iptables的狀態(tài)影響設(shè)置是否生效

  • 實(shí)驗(yàn):將URL路徑的起始位置修改為/app

vim /etc/httpd/conf/httpd.conf
DocumentRoot "/app"     //修改此行的值為/app

httpd -t
service httpd reload
echo "/app/index.html" > /app/index.html     //在/app目錄下創(chuàng)建html文件
curl 192.168.136.229

(七)定義站點(diǎn)主頁面

  • 設(shè)置格式:DirectoryIndex index.html index.html.var

  • 當(dāng)URL并未明確目錄內(nèi)的文件時(shí)百拓,根據(jù)設(shè)置中的文件依次查詢

  • 實(shí)驗(yàn):當(dāng)訪問bbs目錄,設(shè)置主頁面為index文件

mkdir /app/bbs
echo "/bbs/index" > /app/bbs/index
curl 192.168.136.229/bbs/                         //403 Forbidden 錯(cuò)誤
vim /etc/httpd/conf/httpd.conf
DirectoryIndex index.html index    //行尾添加index

httpd -t
service httpd reload
curl 192.168.136.229/bbs/ 

設(shè)置DirectoryIndex的值包含index前

設(shè)置DirectoryIndex的值包含index后

(八)站點(diǎn)訪問控制常見機(jī)制

訪問控制機(jī)制有兩種:客戶端來源地址琴拧,用戶賬號(hào)

(1)被訪問控制的資源描述方式:
  • 文件系統(tǒng)路徑:

    • 目錄匹配
    <Directory "/path">
    ...
    </Directory>
    
    • 文件匹配
    <File "/path/file">
    ...
    </File>
    
    • 文件正則表達(dá)式匹配
    <FileMatch "PATTERN">
    ...
    </FileMatch>
    
  • URL路徑:

    • URL匹配:
    <Location "   ">
    ...
    </Location>
    
    • URL正則表達(dá)式匹配
    <LocationMatch"   ">
    ...
    </LocationMatch>
    
(2)基于源地址的訪問控制:
1)Options:后跟1個(gè)或多個(gè)以空白字符分隔的選項(xiàng)列表
  • 選項(xiàng)前的+降瞳,-表示增加或刪除指定選項(xiàng)

  • 常見選項(xiàng):
    Indexes:指明的URL路徑下不存在與定義的主頁面資源相符的資源文件時(shí),返回索引列表給用戶
    FollowSymLinks:允許訪問符號(hào)鏈接文件所指向的源文件
    None:全部禁用
    All:全部允許

  • 實(shí)驗(yàn):取消DirectoryIndex的值包含index蚓胸,訪問/bbs目錄時(shí)不顯示403錯(cuò)誤而是該目錄下的文件

    vim /etc/httpd/conf.d/bbs.conf     //建立獨(dú)立配置文件
    <Directory "/app/bbs">
        Options lndexes
    </Directory>
    
    httpd -t
    service httpd reload
    
2)AllowOverride
  • 指定目錄下的.htaccess(由AccessFileName指定)文件中哪些訪問控制相關(guān)的指令可以生效

    • 只對<directory>語句有效
    • AllowOverride All:所有指令都有效
    • AllowOverride None:所有指令都無效
    • AllowOverride AuthConfig Indexes:只有AuthConfig 和Indexes指令可以生效
  • 實(shí)驗(yàn):在/app/bbs/目錄下建立.htaccess文件挣饥,授予本目錄FollowSymLinks的權(quán)限。

echo "Options FollowSymLinks" > /app/bbs/.htaccess
ln -s /etc/issue /app/bbs/issue.link
httpd -t
service httpd reload
curl 192.168.136.229/bbs/issue.link     //403錯(cuò)誤沛膳,因?yàn)檫€沒有AllowOverride授權(quán)
vim /etc/httpd/conf.d/bbs.conf
<Directory "/app/bbs">
        Options Indexes
        AllowOverride FollowSymLinks    
</Directory>

httpd -t
service httpd reload
curl 192.168.136.229/bbs/issue.link     //成功

AllowOverride授權(quán)前

AllowOverride授權(quán)后

3)Order和Allow扔枫、Deny
  • Order:定義生效次序;寫在后面的表示默認(rèn)法則

    • Order allow,deny:后面設(shè)置出現(xiàn)沖突锹安,以deny為法則
    • Order deny,allow:后面設(shè)置出現(xiàn)沖突短荐,以allow為法則
  • Allow|Deny from IP

  • 實(shí)驗(yàn):
    只允許IP為192.168.136.230的主機(jī)訪問服務(wù)器的html文件

vim /etc/httpd/conf.d/allowdeny.conf
<files "*.html">
        order deny,allow
        allow from 192.168.136.230
        deny from 192.168.136
</files>

httpd -t
service httpd reload

當(dāng)192.168.136.230的配置出現(xiàn)沖突倚舀,默認(rèn)以order行中靠后的allow為默認(rèn)法則
故允許192.168.136.230訪問服務(wù)器的html文件

192.168.136.0的配置沒有出現(xiàn)沖突,故不允許網(wǎng)段的其他主機(jī)訪問服務(wù)器的html文件

不允許IP為192.168.136.230的主機(jī)訪問服務(wù)器的html文件

vim /etc/httpd/conf.d/allowdeny.conf
<files "*.html">
        order allow,deny
        allow from 192.168.136.230
        deny from 192.168.136
</files>

httpd -t
service httpd reload

當(dāng)192.168.136.230的配置出現(xiàn)沖突搓侄,默認(rèn)以order行中靠后的deny為默認(rèn)法則
故不允許192.168.136.230訪問服務(wù)器的html文件

192.168.136.0的配置沒有出現(xiàn)沖突瞄桨,故仍舊不允許網(wǎng)段的其他主機(jī)訪問服務(wù)器的html文件

(九)日志設(shè)置

  • 日志類型:
    訪問日志:/etc/httpd/logs/access_log
    錯(cuò)誤日志:/etc/httpd/logs/error_log

  • 訪問日志:

    • 定義日志格式:
      LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

    • 使用日志格式:
      CustomLog logs/access_log combined

    • 日志格式標(biāo)識(shí)符含義
      %h:客戶端IP地址
      %l:遠(yuǎn)程用戶,啟用mod_ident才有效讶踪,通常為減號(hào)“-”
      %u:驗(yàn)證(basic芯侥,digest)遠(yuǎn)程用戶,非登錄訪問時(shí)乳讥,為一個(gè)減號(hào)“-”
      %t:服務(wù)器收到請求時(shí)的時(shí)間
      %r:First line of request柱查,即表示請求報(bào)文的首行;記錄了此次請求的“方法”云石,“URL”以及協(xié)議版本
      %>s:響應(yīng)狀態(tài)碼
      %b:響應(yīng)報(bào)文的大小唉工,單位是字節(jié);不包括響應(yīng)報(bào)文http首部
      %{Referer}i:請求報(bào)文中首部“referer”的值汹忠;即從哪個(gè)頁面中的超鏈接跳轉(zhuǎn)至當(dāng)前頁面的
      %{User-Agent}i:請求報(bào)文中首部“User-Agent”的值淋硝;即發(fā)出請求的應(yīng)用程序

  • 實(shí)驗(yàn):自定義訪問日志的格式,包含客戶端IP宽菜、請求文件在硬盤的路徑谣膳、時(shí)間、請求的URL

/etc/httpd/conf/httpd.conf
LogFormat "%h %f %t %U"  hello
CustomLog logs/access_log hello

httpd -t
service httpd reload

(十)設(shè)定默認(rèn)字符集

  • 設(shè)置格式:AddDefaultCharset UTF-8

  • 中文字符集:GBK, GB2312, GB18030

  • 實(shí)驗(yàn):將默認(rèn)字符集改為GB2312

vim /etc/httpd/conf/httpd.conf
AddDefaultCharset GB2312
httpd -t
service httpd reload

(十一)定義路徑別名

  • 設(shè)置格式:Alias /URL/ "/PATH/"

  • 實(shí)驗(yàn):當(dāng)?shù)卿?92.168.136.229/bbs時(shí)铅乡,在服務(wù)器訪問磁盤/app/forum目錄而不是默認(rèn)的/app/bbs目錄

vim /etc/httpd/conf.d/bbs.conf
Alias /bbs /app/forum

mkdir /app/forum
echo "/app/forum/index.html" > /app/forum/index.html
httpd -t
service httpd reload
curl 192.168.136.229/bbs/

(十二)基于用戶的訪問控制

(1)認(rèn)證的相關(guān)概念
  • 認(rèn)證質(zhì)詢(WWW-Authenticate):響應(yīng)碼為401继谚,拒絕客戶端請求,并說明要求客戶端提供賬號(hào)和密碼

  • 認(rèn)證(Authorization):客戶端用戶填入賬號(hào)和密碼后再次發(fā)送請求報(bào)文阵幸;認(rèn)證通過時(shí)花履,則服務(wù)器發(fā)送響應(yīng)的資源

  • 認(rèn)證方式兩種:
    basic:明文
    digest:消息摘要認(rèn)證,兼容性差

  • 安全域:需要用戶認(rèn)證后方能訪問的路徑挚赊;應(yīng)該通過名稱對其進(jìn)行標(biāo)識(shí)诡壁,以便于告知用戶認(rèn)證的原因

  • 用戶的賬號(hào)和密碼
    虛擬賬號(hào):僅用于訪問某服務(wù)時(shí)用到的認(rèn)證標(biāo)識(shí)
    存儲(chǔ):文本文件,SQL數(shù)據(jù)庫荠割,ldap目錄存儲(chǔ)妹卿,nis等

(2)basic認(rèn)證
  • basic認(rèn)證配置格式:

    1. 定義安全域
    <Directory "/path">
    AuthType Basic                                  //認(rèn)證方式
    AuthName "String"                               //認(rèn)證提示字符串
    AuthUserFile "/PATH/HTTPD_USER_PASSWD_FILE"     //認(rèn)證文件路徑
    Require user username1 username2 ...     //允許訪問安全域的用戶
    </Directory>
    

    允許賬號(hào)文件中的所有用戶登錄訪問:Require valid-user

    1. 使用htpasswd命令生成存儲(chǔ)賬號(hào)密碼的文件
    htpasswd [options] /PATH/HTTPD_PASSWD_FILE username
    -c:自動(dòng)創(chuàng)建文件,僅應(yīng)該在文件不存在時(shí)使用
    -m:md5格式加密
    -s:sha格式加密
    -D:刪除指定用戶
    
  • 實(shí)驗(yàn):只允許用戶tom, jerry登錄192.168.136.229/secret目錄

//1. 定義安全域
mkdir /app/secret
echo "/app/secret/index.html" > /app/secret/index.html
vim /etc/httpd/conf.d/auth.conf
<Directory /app/secret>
        AuthType basic
        AuthName "secret zone"
        AuthUserFile "/etc/httpd/conf.d/authuser"
        Require user tom jerry
</Directory>

//2. 生成存儲(chǔ)用戶密碼的文件
htpasswd  -c /etc/httpd/conf.d/authuser tom     //-c:第一次創(chuàng)建文件用
htpasswd  -s /etc/httpd/conf.d/authuser jerry   //-s:SHA加密
htpasswd  -s /etc/httpd/conf.d/authuser john

//3. 測試
httpd -t
service httpd reload
使用瀏覽器, curl, links測試
(3)基于組賬號(hào)認(rèn)證
  • 組賬號(hào)認(rèn)證配置格式:
    1. 定義安全域
    <Directory "/path">
    AuthType Basic                                 
    AuthName "String"                             
    AuthUserFile "/PATH/HTTPD_USER_PASSWD_FILE"     
    AuthGroupFile "/PATH/HTTPD_GROUP_FILE"
    Require group grpname1 grpname2 ...     //允許訪問安全域的組
    </Directory>
    
    1. 創(chuàng)建用戶賬號(hào)和組賬號(hào)文件
      組文件:每一行定義一個(gè)組
      GRP_NAME: username1 username2 ...
(4)遠(yuǎn)程客戶端和用戶驗(yàn)證的控制
  • Satisfy ALL|Any
    ALL:驗(yàn)證條件需要都通過才可以
    Any:驗(yàn)證條件有一個(gè)滿足即可

  • 實(shí)驗(yàn):允許用戶組webgrp1中的用戶(tom, jerry)或來自192.168.136.230的主機(jī)登錄192.168.136.229/admin目錄

//1. 定義安全域
mkdir /app/admin
echo "/app/admin/index.html" > /app/admin/index.html
vim /etc/httpd/conf.d/auth.conf
<Directory /app/admin>
        AuthType basic
        AuthName "admin zone"
        AuthUserFile "/etc/httpd/conf.d/authuser"
        AuthGroupFile "/etc/httpd/conf.d/authgrp"
        Require group webgrp1 
        Order deny,allow
        allow from 192.168.136.230
        deny from 192.168.136
        Satisfy Any
</Directory>

//2. 定義組賬號(hào)文件
/etc/httpd/conf.d/authgrp
webgrp1: tom jerry
webgrp2: john

//3. 測試
httpd -t
service httpd reload
使用瀏覽器, curl, links測試

(十三)虛擬主機(jī)

  • 有三種實(shí)現(xiàn)方案:

    • 基于ip:為每個(gè)虛擬主機(jī)準(zhǔn)備至少一個(gè)ip地址
    • 基于port:為每個(gè)虛擬主機(jī)使用至少一個(gè)獨(dú)立的port
    • 基于FQDN:為每個(gè)虛擬主機(jī)使用至少一個(gè)FQDN
    • 注意:一般虛擬機(jī)不要與main主機(jī)混用涨共;因此,要使用虛擬主機(jī)宠漩,一般先禁用main主機(jī)
    • 禁用方法:注釋中心主機(jī)的DocumentRoot指令即可
  • 虛擬主機(jī)的配置方法:

<VirtualHost IP:PORT>
    ServerName FQDN
    DocumentRoot "/path"
</VirtualHost>

建議:上述配置存放在獨(dú)立的配置文件中

  • 其它可用指令:
    ServerAlias:虛擬主機(jī)的別名举反;可多次使用
    ErrorLog:錯(cuò)誤日志
    CustomLog:訪問日志

  • 實(shí)驗(yàn)1:實(shí)現(xiàn)基于IP的虛擬主機(jī)

//1. 編輯獨(dú)立配置文件
vim /etc/httpd/conf.d/virtualhost.conf
<VirtualHost 192.168.136.10:80>
        DocumentRoot "/app/website1"
</VirtualHost>
<VirtualHost 192.168.136.20:80>
        DocumentRoot "/app/website2"
</VirtualHost>
<VirtualHost 192.168.136.30:80>
        DocumentRoot "/app/website3"
</VirtualHost>

//2. 建立網(wǎng)頁文件目錄
mkdir /app/website{1..3}
echo "/app/website1/index.html" > /app/website1/index.html
echo "/app/website2/index.html" > /app/website2/index.html
echo "/app/website3/index.html" > /app/website3/index.html

//3. 建立相應(yīng)的IP地址
ip a a 192.168.136.10 dev eth1
ip a a 192.168.136.20 dev eth1
ip a a 192.168.136.30 dev eth1

//4. 測試
service httpd reload
curl 192.168.136.10
curl 192.168.136.20
curl 192.168.136.30
  • 實(shí)驗(yàn)2:實(shí)現(xiàn)基于端口的虛擬主機(jī)
//1. 編輯獨(dú)立配置文件
vim /etc/httpd/conf.d/virtualhost.conf
Listen 81
Listen 82
Listen 83
<VirtualHost 192.168.136.40:81>
        DocumentRoot "/app/website1"
</VirtualHost>
<VirtualHost 192.168.136.40:82>
        DocumentRoot "/app/website2"
</VirtualHost>
<VirtualHost 192.168.136.40:83>
        DocumentRoot "/app/website3"
</VirtualHost>

//2. 建立相應(yīng)的IP地址
service network restart     //清空上一個(gè)實(shí)驗(yàn)臨時(shí)增加的IP
ip a a 192.168.136.40 dev eth1

//3. 測試
service httpd reload
curl 192.168.136.40:81
curl 192.168.136.40:82
curl 192.168.136.40:83
  • 實(shí)驗(yàn)3:實(shí)現(xiàn)基于FQDN的虛擬主機(jī),每個(gè)虛擬主機(jī)都有一個(gè)配置文件
//1. 編輯獨(dú)立配置文件
vim /etc/httpd/conf.d/virtualhost.conf
NameVirtualHost *:80
<VirtualHost *:80>
        ServerName www.hello.com
        DocumentRoot "/app/website1"
        CustomLog logs/www.hello.com-access_log common
</VirtualHost>
<VirtualHost *:80>
        ServerName www.hi.cn
        DocumentRoot "/app/website2"
        CustomLog logs/www.hi.cn-access_log common
</VirtualHost>
<VirtualHost *:80>
        ServerName www.bye.net
        DocumentRoot "/app/website3"
        CustomLog logs/www.bye.net-access_log common
</VirtualHost>

httpd -t
service httpd reload

//2. 配置DNS服務(wù)器或者編輯hosts文件

//3. 測試
curl www.hello.com
curl www.hi.cn
curl www.bye.net

(十四)status頁面

  • 需要加載status_module模塊

  • 配置格式:

LoadModule status_module modules/mod_status.so
<Location /server-status>
SetHandler server-status
Order allow,deny
Allow from 172.16     //只允許172.16.0.0網(wǎng)段主機(jī)訪問status頁面
</Location>
ExtendedStatus On 顯示擴(kuò)展信息
  • 實(shí)驗(yàn):只允許192.168.136.0/32網(wǎng)段的主機(jī)訪問192.168.136.229的status頁面
vim /etc/httpd/conf.d/status.conf
LoadModule status_module modules/mod_status.so    //默認(rèn)在/etc/httpd/conf/httpd.conf文件中開啟
<Location /status>
        SetHandler server-status
        Order allow,deny
        Allow from 192.168.136.
</Location>
ExtendedStatus On

httpd -t
service httpd reload

二扒吁、http協(xié)議

(一)http協(xié)議特點(diǎn)

  • http協(xié)議:stateless 無狀態(tài)
    服務(wù)器無法持續(xù)追蹤訪問者來源
  • 解決http協(xié)議無狀態(tài)方法
    cookie 客戶端存放
    session 服務(wù)端存放

(二)http報(bào)文

  • 請求報(bào)文由請求行火鼻、首部行和實(shí)體主體組成

    • 格式:
    <method> <request-URL> <version>
    <headers>
    <entity-body>
    
  • 響應(yīng)報(bào)文由狀態(tài)行室囊、首部行和實(shí)體主體組成

    • 格式:
    <version> <status> <reason-phrase>
    <headers>
    <entity-body>
    
  • 報(bào)文組成簡要描述:

    • method
      請求方法,標(biāo)明客戶端希望服務(wù)器對資源執(zhí)行的動(dòng)作:GET魁索、HEAD融撞、POST等
    • version
      HTTP/<major>.<minor>
    • status
      三位數(shù)字,如200粗蔚、301尝偎、302、404鹏控、502致扯,標(biāo)記請求處理過程中發(fā)生的情況
    • reason-phrase:
      狀態(tài)碼所標(biāo)記狀態(tài)的簡要描述
    • headers
      每個(gè)請求或響應(yīng)報(bào)文可包含任意個(gè)首部;每個(gè)首部都有首部名稱当辐,后面跟一個(gè)冒號(hào)抖僵,而后跟一個(gè)可選空格,接著是一個(gè)值
    • entity-body
      請求時(shí)附加的數(shù)據(jù)或響應(yīng)時(shí)附加的數(shù)據(jù)

(三)method方法

  • GET:從服務(wù)器獲取一個(gè)資源
  • HEAD:只從服務(wù)器獲取文檔的響應(yīng)首部
  • POST:向服務(wù)器輸入數(shù)據(jù)缘揪,通常會(huì)再由網(wǎng)關(guān)程序繼續(xù)處理
  • PUT:將請求的主體部分存儲(chǔ)在服務(wù)器中耍群,如上傳文件
  • DELETE:請求刪除服務(wù)器上指定的文檔
  • TRACE:追蹤請求到達(dá)服務(wù)器中間經(jīng)過的代理服務(wù)器
  • OPTIONS:請求服務(wù)器返回對指定資源支持使用的請求方

(四)status(狀態(tài)碼)

  • 分類:

    • 1xx:100-101信息提示
    • 2xx:200-206成功
    • 3xx:300-305重定向
    • 4xx:400-415錯(cuò)誤類信息,客戶端錯(cuò)誤
    • 5xx:500-505錯(cuò)誤類信息找筝,服務(wù)器端錯(cuò)誤
  • 常用狀態(tài)碼

    • 200:成功蹈垢,請求數(shù)據(jù)通過響應(yīng)報(bào)文的entity-body部分發(fā)送;OK
    • 301:請求的URL指向的資源已經(jīng)被刪除呻征;但在響應(yīng)報(bào)文中通過首部Location指明了資源現(xiàn)在所處的新位置耘婚;Moved Permanently(永久重定向)
    • 302:響應(yīng)報(bào)文Location指明資源臨時(shí)新位置;Moved Temporarily(臨時(shí)重定向)
    • 304:客戶端發(fā)出了條件式請求陆赋,但服務(wù)器上的資源未曾發(fā)生改變沐祷,則通過響應(yīng)此響應(yīng)狀態(tài)碼通知客戶端;Not Modified
    • 401:需要輸入賬號(hào)和密碼認(rèn)證方能訪問資源攒岛;Unauthorized
    • 403:請求被禁止赖临;Forbidden
    • 404:服務(wù)器無法找到客戶端請求的資源;Not Found
    • 500:服務(wù)器內(nèi)部錯(cuò)誤灾锯;Internal Server Error
    • 502:代理服務(wù)器從后端服務(wù)器收到了一條偽響應(yīng)兢榨,如無法連接到網(wǎng)關(guān);Bad Gateway
    • 503:服務(wù)不可用顺饮,臨時(shí)服務(wù)器維護(hù)或過載吵聪,服務(wù)器無法處理請求;Service Unavailable
    • 504:網(wǎng)關(guān)超時(shí)兼雄;Gateway Timeout

(四)首部

  • 分類:通用首部吟逝、請求首部、響應(yīng)首部赦肋、實(shí)體首部块攒、擴(kuò)展首部

  • 通用首部:
    Date:報(bào)文的創(chuàng)建時(shí)間
    Connection:連接狀態(tài)励稳,如keep-alive, close
    Via:顯示報(bào)文經(jīng)過的中間節(jié)點(diǎn)(代理,網(wǎng)關(guān))
    Cache-Control:控制緩存囱井,如緩存時(shí)長
    MIME-Version:發(fā)送端使用的MIME版本

  • 請求首部:
    Accept:通知服務(wù)器自己可接受的媒體類型
    Accept-Charset:客戶端可接受的字符集
    Accept-Encoding:客戶端可接受編碼格式驹尼,如gzip
    Accept-Language:客戶端可接受的語言
    Client-IP:請求的客戶端IP
    Host:請求的服務(wù)器名稱和端口號(hào)
    Referer:跳轉(zhuǎn)至當(dāng)前URL的前一個(gè)URL
    User-Agent:客戶端代理,瀏覽器版本

  • 條件式請求首部:
    Expect:允許客戶端列出某請求所要求的服務(wù)器行為
    If-Modified-Since:自從指定的時(shí)間之后庞呕,請求的資源是否發(fā)生過修改
    If-Unmodified-Since:與上面相反
    If-None-Match:本地緩存中存儲(chǔ)的文檔的ETag標(biāo)簽是否與服務(wù)器文檔的Etag不匹配
    If-Match:與上面相反

  • 安全請求首部:
    Authorization:向服務(wù)器發(fā)送認(rèn)證信息新翎,如賬號(hào)和密碼
    Cookie:客戶端向服務(wù)器發(fā)送cookie
    Cookie2:用于說明請求端支持的cookie版本

  • 代理請求首部:
    Proxy-Authorization:向代理服務(wù)器認(rèn)證

  • 信息響應(yīng)首部:
    Age:從最初創(chuàng)建開始,響應(yīng)持續(xù)時(shí)長
    Server:服務(wù)器程序軟件名稱和版本

  • 協(xié)商響應(yīng)首部:某資源有多種表示方法時(shí)使用
    Accept-Ranges:服務(wù)器可接受的請求范圍類型
    Vary:服務(wù)器查看的其它首部列表

  • 安全響應(yīng)首部:
    Set-Cookie:向客戶端設(shè)置cookie
    Set-Cookie2:與上面相似
    WWW-Authenticate:來自服務(wù)器對客戶端的質(zhì)詢列表

  • 實(shí)體首部:
    Allow:列出對此資源實(shí)體可使用的請求方法
    Location:告訴客戶端真正的實(shí)體位于何處
    Content-Encoding:對主體執(zhí)行的編碼
    Content-Language:理解主體時(shí)最適合的語言
    Content-Length:主體的長度
    Content-Location:實(shí)體真正所處位置
    Content-Type:主體的對象類型千扶,如text
    緩存相關(guān):
    ETag:實(shí)體的擴(kuò)展標(biāo)簽
    Expires:實(shí)體的過期時(shí)間
    Last-Modified:最后一次修改的時(shí)間

三料祠、curl和elinks工具

(一)curl工具

  • 語法:curl [options] [URL...]

  • 選項(xiàng):
    -A/--user-agent <string>:設(shè)置用戶代理(瀏覽器)發(fā)送給服務(wù)器
    -e/--referer <URL>:來源網(wǎng)址(從哪個(gè)網(wǎng)址跳轉(zhuǎn)過來)
    --cacert <file>:CA證書(SSL)
    -k/--insecure:允許忽略證書進(jìn)行SSL 連接
    --compressed:要求返回壓縮的格式
    -H/--header <line>:自定義首部信息傳遞給服務(wù)器
    -i:顯示頁面內(nèi)容,包括報(bào)文首部信息
    -I/--head:只顯示響應(yīng)報(bào)文首部信息
    -D/--dump-header <file>:將url的header信息存放在指定文件中
    --limit-rate <rate>:設(shè)置傳輸速度
    --basic:使用HTTP基本認(rèn)證
    -u/--user <user[:password]>:設(shè)置服務(wù)器的用戶和密碼
    -L:如果有3xx響應(yīng)碼澎羞,重新發(fā)請求到新位置
    -o <file>:將網(wǎng)絡(luò)文件保存為指定的文件中
    -O:使用URL中默認(rèn)的文件名保存文件到本地
    -0/--http1.0:使用HTTP 1.0
    -C:可對文件使用斷點(diǎn)續(xù)傳功能
    -c/--cookie-jar <file name>:將url中cookie存放在指定文件中
    -x/--proxy <proxyhost[:port]>:指定代理服務(wù)器地址
    -X/--request <command>:向服務(wù)器發(fā)送指定請求方法
    -U/--proxy-user <user:password>:代理服務(wù)器用戶和密碼
    -T:將指定的本地文件上傳到FTP服務(wù)器上
    --data/-d:指定使用POST方式傳遞數(shù)據(jù)

  • 實(shí)驗(yàn):curl工具使用

curl -A "Internet Explorer 12" 192.168.136.229
curl -e "www.baidu.com" 192.168.136.229
curl -H host: www.hello.com 192.168.136.229
curl -D head.txt 192.168.136.229
curl --limit-rate 2048 -O ftp://172.18.0.1/pub/ISOs/CentOS-7-x86_64-Everything-1708.iso
curl -I -L www.360buy.com 

-A選項(xiàng):偽造瀏覽器和-e選項(xiàng):偽造轉(zhuǎn)發(fā)地址

-H選項(xiàng):存在虛擬主機(jī)時(shí)髓绽,指定host首部信息返回不同結(jié)果

-D選項(xiàng):保存相應(yīng)報(bào)文首部信息到文件

--limit-rate選項(xiàng):限制下載速度,單位B/s妆绞; -O 按照默認(rèn)文件名存儲(chǔ)

-L選項(xiàng):強(qiáng)制重定向顺呕,下面的例子可以看到兩次重定向跳轉(zhuǎn)過程

(二)elinks工具:

  • 語法:elinks[OPTION]... [URL]...

  • 選項(xiàng):
    -dump:非交互式模式,將URL的內(nèi)容輸出至標(biāo)準(zhǔn)輸出(只輸出網(wǎng)頁文本內(nèi)容)
    -source:打印源碼

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末括饶,一起剝皮案震驚了整個(gè)濱河市株茶,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌图焰,老刑警劉巖启盛,帶你破解...
    沈念sama閱讀 216,843評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異技羔,居然都是意外死亡僵闯,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,538評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門藤滥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來鳖粟,“玉大人,你說我怎么就攤上這事拙绊∠蛲迹” “怎么了?”我有些...
    開封第一講書人閱讀 163,187評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵标沪,是天一觀的道長榄攀。 經(jīng)常有香客問我,道長金句,這世上最難降的妖魔是什么檩赢? 我笑而不...
    開封第一講書人閱讀 58,264評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮趴梢,結(jié)果婚禮上漠畜,老公的妹妹穿的比我還像新娘。我一直安慰自己坞靶,他們只是感情好憔狞,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,289評(píng)論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著彰阴,像睡著了一般瘾敢。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上尿这,一...
    開封第一講書人閱讀 51,231評(píng)論 1 299
  • 那天簇抵,我揣著相機(jī)與錄音,去河邊找鬼射众。 笑死碟摆,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的叨橱。 我是一名探鬼主播典蜕,決...
    沈念sama閱讀 40,116評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼罗洗!你這毒婦竟也來了愉舔?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,945評(píng)論 0 275
  • 序言:老撾萬榮一對情侶失蹤伙菜,失蹤者是張志新(化名)和其女友劉穎轩缤,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體贩绕,經(jīng)...
    沈念sama閱讀 45,367評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡火的,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,581評(píng)論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了丧叽。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片卫玖。...
    茶點(diǎn)故事閱讀 39,754評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖踊淳,靈堂內(nèi)的尸體忽然破棺而出假瞬,到底是詐尸還是另有隱情,我是刑警寧澤迂尝,帶...
    沈念sama閱讀 35,458評(píng)論 5 344
  • 正文 年R本政府宣布脱茉,位于F島的核電站,受9級(jí)特大地震影響垄开,放射性物質(zhì)發(fā)生泄漏琴许。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,068評(píng)論 3 327
  • 文/蒙蒙 一溉躲、第九天 我趴在偏房一處隱蔽的房頂上張望榜田。 院中可真熱鬧益兄,春花似錦、人聲如沸箭券。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,692評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽辩块。三九已至蛔六,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間废亭,已是汗流浹背国章。 一陣腳步聲響...
    開封第一講書人閱讀 32,842評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留豆村,地道東北人液兽。 一個(gè)月前我還...
    沈念sama閱讀 47,797評(píng)論 2 369
  • 正文 我出身青樓,卻偏偏與公主長得像掌动,于是被迫代替她去往敵國和親抵碟。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,654評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 本篇文章篇幅比較長坏匪,先來個(gè)思維導(dǎo)圖預(yù)覽一下拟逮。 一、概述 1.計(jì)算機(jī)網(wǎng)絡(luò)體系結(jié)構(gòu)分層 2.TCP/IP 通信傳輸流 ...
    滌生_Woo閱讀 55,003評(píng)論 24 557
  • 本文是《圖解HTTP》讀書筆記的第二篇适滓,主要包括此書的第六章內(nèi)容敦迄,因?yàn)榈诹碌膬?nèi)容較多,而且比較重要凭迹,所以單獨(dú)寫為...
    lijiankun24閱讀 1,363評(píng)論 0 6
  • http協(xié)議及Apache服務(wù) http協(xié)議 什么是http? http全稱為超文件傳輸協(xié)議(Hyper text...
    魏鎮(zhèn)坪閱讀 2,270評(píng)論 0 1
  • 1. 網(wǎng)絡(luò)基礎(chǔ)TCP/IP HTTP基于TCP/IP協(xié)議族罚屋,HTTP屬于它內(nèi)部的一個(gè)子集。 把互聯(lián)網(wǎng)相關(guān)聯(lián)的協(xié)議集...
    yozosann閱讀 3,443評(píng)論 0 20
  • 一 葉初靜嗅绸,夢寒輕脾猛。月上柳梢枝上明,梧桐墜鱼鸠,堪腸歲猛拴。無言有淚,西風(fēng)獨(dú)睡蚀狰。愧愉昆!愧!愧麻蹋! 病千索跛溉,卻情何。魂似天馬渡銀...
    迷曳閱讀 328評(píng)論 0 1