20170927 http服务和apache(二)

  • http-2.2常见配置
  • http协议
  • curl和elinks工具

一、http-2.2常见配置

  • httpd配置文件的组成:分为三部分
    grep "Section" /etc/httpd/conf/httpd.conf
### Section 1: Global Environment              //全局配置
### Section 2: 'Main' server configuration     //主服务器配置
### Section 3: Virtual Hosts                   //虚拟主机配置
  • 配置格式:directive value (指令 值)
    directive:不区分字符大小写
    value:当为路径时,是否区分大小写取决于文件系统

(一)显示服务器版本信息

  • 设置格式: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,被注释时默认状态为Full
  • 建议将ServerTokens值设为Prod

(二)修改监听的IP和Port

  • 设置格式:Listen [IP:]PORT

    • 省略IP表示为0.0.0.0
    • Listen指令至少一个,可重复出现多次
      Listen 80
      Listen 8080
    • 修改监听socket,重载服务进程方可生效
  • 注意:必须有端口号设置,否则服务启动失败

  • 实验:只允许从192.168.136.229:8080端口访问http服务

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

(三)持久连接

  • 定义:连接建立,每个资源获取完成后不会断开连接,而是继续等待其它的请求完成,默认关闭持久连接

  • 开启持久连接需要设置断开条件:数量限制、时间限制

  • 设置格式:
    KeepAlive On|Off
    KeepAliveTimeout 15:时间限制,单位为秒
    MaxKeepAliveRequests 100:数量限制

  • 实验:设置开启持久连接,时间限制150秒(为了方便做实验设置时间比较长,实际根据情况设置),数量限制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     //目前服务器只管理一个域名,故可以随便写
GET /hello.txt HTTP/1.1
HOST:5.5.5.5

(四)MPM(Multi-Processing Module)多路处理模块

(1)MPM分类:prefork, worker, event
  • httpd-2.2不支持同时编译多个模块,所以只能编译时选定一个
  • rpm安装的包提供三个二进制程序文件,分别用于实现对不同MPM机制的支持
    • /usr/sbin/httpd: prefork
    • /usr/sbin/httpd.worker: worker
    • /usr/sbin/httpd.event: event (test)
  • 查询当前使用的MPM机制
    ps aux | grep httpd
(2)模块
  • 查看静态编译的模块
    httpd -l
  • 查看静态编译及动态装载的模块
    httpd -M
  • 动态模块加载:不需重启即生效
  • 动态模块路径:/usr/lib64/httpd/modules/
(3)切换使用的httpd程序
//切换至work模式
vim /etc/sysconfig/httpd
HTTPD=/usr/sbin/httpd.worker     //将行前的注释符#删除

httpd -t
service httpd restart
(4)prefork的默认配置
vim /etc/httpd/conf/httpd.conf

<IfModule prefork.c>
StartServers       8       //启动开启的进程数
MinSpareServers    5       //最少空闲进程数
MaxSpareServers   20       //最大空闲进程数
ServerLimit      256       //最多进程数,不能超过MaxClient,最大能设置为20000
MaxClients       256       //最大并发数
MaxRequestsPerChild  4000  //子进程最多能处理的请求,达到设置值子进程被父进程终止,释放内存
</IfModule>
(5)worker的默认配置
vim /etc/httpd/conf/httpd.conf

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

启动时开启4个进程,每个进程开启25个线程,共100个线程,但最多空闲75个线程,需要结束1个进程共25个线程,故开启服务后实际只能开到3个进程共75个线程

(五)DSO(Dynamic Shared Object):动态加载模块

  • 加载动态模块配置文件:
    /etc/httpd/conf/httpd.conf

  • 配置指定模块加载格式:
    LoadModule <mod_name> <mod_path>

  • 模块文件路径使用相对路径:
    相对于ServerRoot(默认/etc/httpd)

  • 实验:取消加载模块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的文档页面路径

  • 设置格式:DocumentRoot "/path"
    DocumentRoot指向的路径为URL路径的起始位置

  • 注意:SELinux和iptables的状态影响设置是否生效

  • 实验:将URL路径的起始位置修改为/app

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

httpd -t
service httpd reload
echo "/app/index.html" > /app/index.html     //在/app目录下创建html文件
curl 192.168.136.229

(七)定义站点主页面

  • 设置格式:DirectoryIndex index.html index.html.var

  • 当URL并未明确目录内的文件时,根据设置中的文件依次查询

  • 实验:当访问bbs目录,设置主页面为index文件

mkdir /app/bbs
echo "/bbs/index" > /app/bbs/index
curl 192.168.136.229/bbs/                         //403 Forbidden 错误
vim /etc/httpd/conf/httpd.conf
DirectoryIndex index.html index    //行尾添加index

httpd -t
service httpd reload
curl 192.168.136.229/bbs/ 

设置DirectoryIndex的值包含index前

设置DirectoryIndex的值包含index后

(八)站点访问控制常见机制

访问控制机制有两种:客户端来源地址,用户账号

(1)被访问控制的资源描述方式:
  • 文件系统路径:

    • 目录匹配
    <Directory "/path">
    ...
    </Directory>
    
    • 文件匹配
    <File "/path/file">
    ...
    </File>
    
    • 文件正则表达式匹配
    <FileMatch "PATTERN">
    ...
    </FileMatch>
    
  • URL路径:

    • URL匹配:
    <Location "   ">
    ...
    </Location>
    
    • URL正则表达式匹配
    <LocationMatch"   ">
    ...
    </LocationMatch>
    
(2)基于源地址的访问控制:
1)Options:后跟1个或多个以空白字符分隔的选项列表
  • 选项前的+,-表示增加或删除指定选项

  • 常见选项:
    Indexes:指明的URL路径下不存在与定义的主页面资源相符的资源文件时,返回索引列表给用户
    FollowSymLinks:允许访问符号链接文件所指向的源文件
    None:全部禁用
    All:全部允许

  • 实验:取消DirectoryIndex的值包含index,访问/bbs目录时不显示403错误而是该目录下的文件

    vim /etc/httpd/conf.d/bbs.conf     //建立独立配置文件
    <Directory "/app/bbs">
        Options lndexes
    </Directory>
    
    httpd -t
    service httpd reload
    
2)AllowOverride
  • 指定目录下的.htaccess(由AccessFileName指定)文件中哪些访问控制相关的指令可以生效

    • 只对<directory>语句有效
    • AllowOverride All:所有指令都有效
    • AllowOverride None:所有指令都无效
    • AllowOverride AuthConfig Indexes:只有AuthConfig 和Indexes指令可以生效
  • 实验:在/app/bbs/目录下建立.htaccess文件,授予本目录FollowSymLinks的权限。

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错误,因为还没有AllowOverride授权
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授权前

AllowOverride授权后

3)Order和Allow、Deny
  • Order:定义生效次序;写在后面的表示默认法则

    • Order allow,deny:后面设置出现冲突,以deny为法则
    • Order deny,allow:后面设置出现冲突,以allow为法则
  • Allow|Deny from IP

  • 实验:
    只允许IP为192.168.136.230的主机访问服务器的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

当192.168.136.230的配置出现冲突,默认以order行中靠后的allow为默认法则
故允许192.168.136.230访问服务器的html文件

192.168.136.0的配置没有出现冲突,故不允许网段的其他主机访问服务器的html文件

不允许IP为192.168.136.230的主机访问服务器的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

当192.168.136.230的配置出现冲突,默认以order行中靠后的deny为默认法则
故不允许192.168.136.230访问服务器的html文件

192.168.136.0的配置没有出现冲突,故仍旧不允许网段的其他主机访问服务器的html文件

(九)日志设置

  • 日志类型:
    访问日志:/etc/httpd/logs/access_log
    错误日志:/etc/httpd/logs/error_log

  • 访问日志:

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

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

    • 日志格式标识符含义
      %h:客户端IP地址
      %l:远程用户,启用mod_ident才有效,通常为减号“-”
      %u:验证(basic,digest)远程用户,非登录访问时,为一个减号“-”
      %t:服务器收到请求时的时间
      %r:First line of request,即表示请求报文的首行;记录了此次请求的“方法”,“URL”以及协议版本
      %>s:响应状态码
      %b:响应报文的大小,单位是字节;不包括响应报文http首部
      %{Referer}i:请求报文中首部“referer”的值;即从哪个页面中的超链接跳转至当前页面的
      %{User-Agent}i:请求报文中首部“User-Agent”的值;即发出请求的应用程序

  • 实验:自定义访问日志的格式,包含客户端IP、请求文件在硬盘的路径、时间、请求的URL

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

httpd -t
service httpd reload

(十)设定默认字符集

  • 设置格式:AddDefaultCharset UTF-8

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

  • 实验:将默认字符集改为GB2312

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

(十一)定义路径别名

  • 设置格式:Alias /URL/ "/PATH/"

  • 实验:当登录192.168.136.229/bbs时,在服务器访问磁盘/app/forum目录而不是默认的/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)认证的相关概念
  • 认证质询(WWW-Authenticate):响应码为401,拒绝客户端请求,并说明要求客户端提供账号和密码

  • 认证(Authorization):客户端用户填入账号和密码后再次发送请求报文;认证通过时,则服务器发送响应的资源

  • 认证方式两种:
    basic:明文
    digest:消息摘要认证,兼容性差

  • 安全域:需要用户认证后方能访问的路径;应该通过名称对其进行标识,以便于告知用户认证的原因

  • 用户的账号和密码
    虚拟账号:仅用于访问某服务时用到的认证标识
    存储:文本文件,SQL数据库,ldap目录存储,nis等

(2)basic认证
  • basic认证配置格式:

    1. 定义安全域
    <Directory "/path">
    AuthType Basic                                  //认证方式
    AuthName "String"                               //认证提示字符串
    AuthUserFile "/PATH/HTTPD_USER_PASSWD_FILE"     //认证文件路径
    Require user username1 username2 ...     //允许访问安全域的用户
    </Directory>
    

    允许账号文件中的所有用户登录访问:Require valid-user

    1. 使用htpasswd命令生成存储账号密码的文件
    htpasswd [options] /PATH/HTTPD_PASSWD_FILE username
    -c:自动创建文件,仅应该在文件不存在时使用
    -m:md5格式加密
    -s:sha格式加密
    -D:删除指定用户
    
  • 实验:只允许用户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. 生成存储用户密码的文件
htpasswd  -c /etc/httpd/conf.d/authuser tom     //-c:第一次创建文件用
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)基于组账号认证
  • 组账号认证配置格式:
    1. 定义安全域
    <Directory "/path">
    AuthType Basic                                 
    AuthName "String"                             
    AuthUserFile "/PATH/HTTPD_USER_PASSWD_FILE"     
    AuthGroupFile "/PATH/HTTPD_GROUP_FILE"
    Require group grpname1 grpname2 ...     //允许访问安全域的组
    </Directory>
    
    1. 创建用户账号和组账号文件
      组文件:每一行定义一个组
      GRP_NAME: username1 username2 ...
(4)远程客户端和用户验证的控制
  • Satisfy ALL|Any
    ALL:验证条件需要都通过才可以
    Any:验证条件有一个满足即可

  • 实验:允许用户组webgrp1中的用户(tom, jerry)或来自192.168.136.230的主机登录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. 定义组账号文件
/etc/httpd/conf.d/authgrp
webgrp1: tom jerry
webgrp2: john

//3. 测试
httpd -t
service httpd reload
使用浏览器, curl, links测试

(十三)虚拟主机

  • 有三种实现方案:

    • 基于ip:为每个虚拟主机准备至少一个ip地址
    • 基于port:为每个虚拟主机使用至少一个独立的port
    • 基于FQDN:为每个虚拟主机使用至少一个FQDN
    • 注意:一般虚拟机不要与main主机混用;因此,要使用虚拟主机,一般先禁用main主机
    • 禁用方法:注释中心主机的DocumentRoot指令即可
  • 虚拟主机的配置方法:

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

建议:上述配置存放在独立的配置文件中

  • 其它可用指令:
    ServerAlias:虚拟主机的别名;可多次使用
    ErrorLog:错误日志
    CustomLog:访问日志

  • 实验1:实现基于IP的虚拟主机

//1. 编辑独立配置文件
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. 建立网页文件目录
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. 建立相应的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
  • 实验2:实现基于端口的虚拟主机
//1. 编辑独立配置文件
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. 建立相应的IP地址
service network restart     //清空上一个实验临时增加的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
  • 实验3:实现基于FQDN的虚拟主机,每个虚拟主机都有一个配置文件
//1. 编辑独立配置文件
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服务器或者编辑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网段主机访问status页面
</Location>
ExtendedStatus On 显示扩展信息
  • 实验:只允许192.168.136.0/32网段的主机访问192.168.136.229的status页面
vim /etc/httpd/conf.d/status.conf
LoadModule status_module modules/mod_status.so    //默认在/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协议

(一)http协议特点

  • http协议:stateless 无状态
    服务器无法持续追踪访问者来源
  • 解决http协议无状态方法
    cookie 客户端存放
    session 服务端存放

(二)http报文

  • 请求报文由请求行、首部行和实体主体组成

    • 格式:
    <method> <request-URL> <version>
    <headers>
    <entity-body>
    
  • 响应报文由状态行、首部行和实体主体组成

    • 格式:
    <version> <status> <reason-phrase>
    <headers>
    <entity-body>
    
  • 报文组成简要描述:

    • method
      请求方法,标明客户端希望服务器对资源执行的动作:GET、HEAD、POST等
    • version
      HTTP/<major>.<minor>
    • status
      三位数字,如200、301、302、404、502,标记请求处理过程中发生的情况
    • reason-phrase:
      状态码所标记状态的简要描述
    • headers
      每个请求或响应报文可包含任意个首部;每个首部都有首部名称,后面跟一个冒号,而后跟一个可选空格,接着是一个值
    • entity-body
      请求时附加的数据或响应时附加的数据

(三)method方法

  • GET:从服务器获取一个资源
  • HEAD:只从服务器获取文档的响应首部
  • POST:向服务器输入数据,通常会再由网关程序继续处理
  • PUT:将请求的主体部分存储在服务器中,如上传文件
  • DELETE:请求删除服务器上指定的文档
  • TRACE:追踪请求到达服务器中间经过的代理服务器
  • OPTIONS:请求服务器返回对指定资源支持使用的请求方

(四)status(状态码)

  • 分类:

    • 1xx:100-101信息提示
    • 2xx:200-206成功
    • 3xx:300-305重定向
    • 4xx:400-415错误类信息,客户端错误
    • 5xx:500-505错误类信息,服务器端错误
  • 常用状态码

    • 200:成功,请求数据通过响应报文的entity-body部分发送;OK
    • 301:请求的URL指向的资源已经被删除;但在响应报文中通过首部Location指明了资源现在所处的新位置;Moved Permanently(永久重定向)
    • 302:响应报文Location指明资源临时新位置;Moved Temporarily(临时重定向)
    • 304:客户端发出了条件式请求,但服务器上的资源未曾发生改变,则通过响应此响应状态码通知客户端;Not Modified
    • 401:需要输入账号和密码认证方能访问资源;Unauthorized
    • 403:请求被禁止;Forbidden
    • 404:服务器无法找到客户端请求的资源;Not Found
    • 500:服务器内部错误;Internal Server Error
    • 502:代理服务器从后端服务器收到了一条伪响应,如无法连接到网关;Bad Gateway
    • 503:服务不可用,临时服务器维护或过载,服务器无法处理请求;Service Unavailable
    • 504:网关超时;Gateway Timeout

(四)首部

  • 分类:通用首部、请求首部、响应首部、实体首部、扩展首部

  • 通用首部:
    Date:报文的创建时间
    Connection:连接状态,如keep-alive, close
    Via:显示报文经过的中间节点(代理,网关)
    Cache-Control:控制缓存,如缓存时长
    MIME-Version:发送端使用的MIME版本

  • 请求首部:
    Accept:通知服务器自己可接受的媒体类型
    Accept-Charset:客户端可接受的字符集
    Accept-Encoding:客户端可接受编码格式,如gzip
    Accept-Language:客户端可接受的语言
    Client-IP:请求的客户端IP
    Host:请求的服务器名称和端口号
    Referer:跳转至当前URL的前一个URL
    User-Agent:客户端代理,浏览器版本

  • 条件式请求首部:
    Expect:允许客户端列出某请求所要求的服务器行为
    If-Modified-Since:自从指定的时间之后,请求的资源是否发生过修改
    If-Unmodified-Since:与上面相反
    If-None-Match:本地缓存中存储的文档的ETag标签是否与服务器文档的Etag不匹配
    If-Match:与上面相反

  • 安全请求首部:
    Authorization:向服务器发送认证信息,如账号和密码
    Cookie:客户端向服务器发送cookie
    Cookie2:用于说明请求端支持的cookie版本

  • 代理请求首部:
    Proxy-Authorization:向代理服务器认证

  • 信息响应首部:
    Age:从最初创建开始,响应持续时长
    Server:服务器程序软件名称和版本

  • 协商响应首部:某资源有多种表示方法时使用
    Accept-Ranges:服务器可接受的请求范围类型
    Vary:服务器查看的其它首部列表

  • 安全响应首部:
    Set-Cookie:向客户端设置cookie
    Set-Cookie2:与上面相似
    WWW-Authenticate:来自服务器对客户端的质询列表

  • 实体首部:
    Allow:列出对此资源实体可使用的请求方法
    Location:告诉客户端真正的实体位于何处
    Content-Encoding:对主体执行的编码
    Content-Language:理解主体时最适合的语言
    Content-Length:主体的长度
    Content-Location:实体真正所处位置
    Content-Type:主体的对象类型,如text
    缓存相关:
    ETag:实体的扩展标签
    Expires:实体的过期时间
    Last-Modified:最后一次修改的时间

三、curl和elinks工具

(一)curl工具

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

  • 选项:
    -A/--user-agent <string>:设置用户代理(浏览器)发送给服务器
    -e/--referer <URL>:来源网址(从哪个网址跳转过来)
    --cacert <file>:CA证书(SSL)
    -k/--insecure:允许忽略证书进行SSL 连接
    --compressed:要求返回压缩的格式
    -H/--header <line>:自定义首部信息传递给服务器
    -i:显示页面内容,包括报文首部信息
    -I/--head:只显示响应报文首部信息
    -D/--dump-header <file>:将url的header信息存放在指定文件中
    --limit-rate <rate>:设置传输速度
    --basic:使用HTTP基本认证
    -u/--user <user[:password]>:设置服务器的用户和密码
    -L:如果有3xx响应码,重新发请求到新位置
    -o <file>:将网络文件保存为指定的文件中
    -O:使用URL中默认的文件名保存文件到本地
    -0/--http1.0:使用HTTP 1.0
    -C:可对文件使用断点续传功能
    -c/--cookie-jar <file name>:将url中cookie存放在指定文件中
    -x/--proxy <proxyhost[:port]>:指定代理服务器地址
    -X/--request <command>:向服务器发送指定请求方法
    -U/--proxy-user <user:password>:代理服务器用户和密码
    -T:将指定的本地文件上传到FTP服务器上
    --data/-d:指定使用POST方式传递数据

  • 实验: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选项:伪造浏览器和-e选项:伪造转发地址

-H选项:存在虚拟主机时,指定host首部信息返回不同结果

-D选项:保存相应报文首部信息到文件

--limit-rate选项:限制下载速度,单位B/s; -O 按照默认文件名存储

-L选项:强制重定向,下面的例子可以看到两次重定向跳转过程

(二)elinks工具:

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

  • 选项:
    -dump:非交互式模式,将URL的内容输出至标准输出(只输出网页文本内容)
    -source:打印源码

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,968评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,601评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,220评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,416评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,425评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,144评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,432评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,088评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,586评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,028评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,137评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,783评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,343评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,333评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,559评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,595评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,901评论 2 345

推荐阅读更多精彩内容