- 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认证配置格式:
- 定义安全域
<Directory "/path"> AuthType Basic //认证方式 AuthName "String" //认证提示字符串 AuthUserFile "/PATH/HTTPD_USER_PASSWD_FILE" //认证文件路径 Require user username1 username2 ... //允许访问安全域的用户 </Directory>
允许账号文件中的所有用户登录访问:
Require valid-user
- 使用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)基于组账号认证
- 组账号认证配置格式:
- 定义安全域
<Directory "/path"> AuthType Basic AuthName "String" AuthUserFile "/PATH/HTTPD_USER_PASSWD_FILE" AuthGroupFile "/PATH/HTTPD_GROUP_FILE" Require group grpname1 grpname2 ... //允许访问安全域的组 </Directory>
- 创建用户账号和组账号文件
组文件:每一行定义一个组
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
(三)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:打印源码