Linux自学笔记——http协议进阶及httpd配置(2)

简介:

 

URL:Uniform ResourceLocator

      URL方案:scheme

      服务器地址:ip:port

      资源路径:

           http://www.claude.com:80/bbs/index.php

      基本语法:

           <scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>

                 params:参数

                      http://www.claude.com/bbs/item.php?username=tom&title=abc

                 frag

https://access.rehat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html-single/Installation_Guide/index.html#ch-Boot-x86

      相对URL:

      绝对URL:

http协议:

      http/0.9,http/1.0,http/1.1,http/2.0

     

      http协议:stateless无状态;

           服务器无法持续追踪访问者来源;

 

      http事务:

           请求:request

           响应:response

     

           报文语法格式:

                 request报文

                      <method><request-URL> <version>

                      <headers>

 

                      <entity-body>

                 response报文

                      <version><status> <reason-phrase>

                      <headers>

          

                      <entity-body>

                 menthod:请求方法,表明客户端希望服务器对资源执行的动作;

                       GET、HEAD、POST

                 version

                      HTTP/<major>.<minor>

                 status

                      三位数字,如200,301,302,404,502;标记请求处理过程中发生的情况;

                 reason-phrase

                      状态码所标记的状态的简要描述;

                 headers

每个请求或响应报文可包含任意个首部;每个首部都有首部名称,后面跟一个冒号,而后跟上一个可选空格,接着是一个值;

                 entity-body:请求时附加的数据或响应时附加的数据;

           method(方法):

                 GET:从服务器获取一个资源;

                 HEAD:只从服务器获取文档的响应首部;

                 POST:向服务器发送要处理的数据;

                 PUT:将请求的主体部分存储在服务器上。

                 DELEFE:请求删除服务器上指定的文档;

                 TRACE:追踪请求到达服务器中间经过的代理服务器;

                 OPTIONS:请求服务器返回对指定资源支持使用的请求方法;

          

                 协议查看或分析的工具:

                      tcpdump,tshark,wireshark

           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:与301相似,但在响应报文中通过Location指明了现在所处的临时新位置;Found

304:客户端发出了条件式请求,但服务器上的资源未曾发生改变,则通过响应此响应状态码通知客户端:Not Modified

401:需要输入账号和密码认证方能访问资源:Unanthorized;

403:请求被禁止;Forbindden;

404:服务器无法找到客户端请求的资源:NotFound

500:服务器内部错误:Internal Server Error

502:代理服务器从后端服务器收到了一条伪响应:Bad Gateway

           headers

                 格式:

                      Name:Value

                 响应首部示例:

                      Cache-Control:public,max-age=600

                      Connection:keep-alive

                      Content-Type:image/png

                      Date:Wed,3 Nov 2017 01:43:54 GMT

                      ETag:“5af34e-ce6-504ea605b2e40”

                      Last-Modified:Thu,2 Nov 2017 02:45:32 GMT

                 请求首部示例:

                      Accept:image/webp,*/*;q=0.8

                      Accept-Encoding:gzip,deflate, sdch

                      Accept-Language:zh-CN,zh;q=0.8

                      Cache-Control:max-age=0

                      Connection:keep-alive

                      Host:access.redhat.com

                      If-Modified-Since:Sun, 08Oct 201714:46:09 GMT

                      If-None-Match:"5af34e-ce6-504ea605b2e40"

Referer:https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html-single/Installation_Guide/index.html

User-Agent:Mozilla/5.0 (Windows NT6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.101Safari/537.36

                 首部的分类:

                      通用首部

                      请求首部

                      响应首部

                      实体首部

                      扩展首部

 

                      通用首部:

                            Date:报文的创建时间

                            Connection:连接状态,如keep-alive,close

                            Via:显示报文经过的中间节点

                            Cache-Control:控制缓存;

                            Pragma

                      8b3d1ce2accfc1999a6bb89ee316a86a.png-wh_

                      请求首部:

                            Accept:通过服务器自己可接受的媒体类型;

                            Accept-Charset

                            Accept-Encoding:接受编码格式,如gzip

                            Accept-Language:接受的语言

 

                            Client-IP

                            Host:请求的服务器名称和端口号

                            Referer:包含当前正在请求的资源的上一级资源;

                            User-Agent:客户端代理;

                            7ef1c572d65854d5da6249b27a5ed563.png-wh_

                            条件请求首部:

                                  Expect

                                  If-Modified-Since:自从指定的时间之后,请求的资源是否发生过修改;

                                  If-Unmodified-Since

    If-None-Match:本地缓存中存储的文档的ETag标签是否与服务器文档的Etag不匹配;

If-Match:本地缓存中存储的文档的ETag标签是否与服务器文档的ETag匹配;

                            安全请求首部:

                                  Authorization:向服务器发送认证信息,如账号和密码;

                                  Cookie:客户端向服务端发送cookie;

                                  Cookie2

                            代理请求首部:

                                  Proxy-Authorization:向代理服务器认证

                      响应首部:

                            信息性:

                                  Age:响应持续时长

                                  Server:服务器程序软件名称和版本;

                            协商首部:某资源有多种表示方法时使用

                                  Accept-Ranges:服务器可接受的请求范围类型

                                  Vary:服务器查看的其它首部列表;

                            安全响应首部:

                                  Set-Cookie:向客户端设置Cookie;

                                  Set-Cookie2

                                  WWW-Authenticate:来自服务器的对客户端的和质询认证表单

                            c170b3c0feeebfd076dec17e3fa88e61.png-wh_

                      实体首部:

                            Allow:列出对此实体可使用的请求方法;

                            Location:告诉客户端真正的实体位于何处;

 

                            Content-Encoding

                            Content-Language

                            Content-Length:主体的长度

                            Content-Location:实体真正所处位置;

                            Content-Type:主提的对象类型

          

                            缓存相关:

                                  ETag:实体的扩展标签;

                                  Expires:实体的过期时间;

                                  Last-Modified:最后一次修改时间;

Httpd-2.2的常见配置(2)

1.     curl命令

curl是基于URL语法在命令行方式下工作的文件传输工具,它支持FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE及LDAP等协议。curl支持HTTPS认证,并且支持HTTP的POST、PUT等方法,FTP上传,kerberos认证,HTTP上海窜,代理服务器,cookies,用户名/密码认证,下载文件断点续传,上载文件断点续传,http代理服务器管道(proxy tunneling),甚至它还支持IPv6,socks5代理服务器,通过http代理服务器上传文件到FTP服务器等等,功能十分强大。

MIME:major/minor,image/png,image/gif

curl [options][URL…]

curl的常用选项:

-A/--user-agent <string> :设置用户代理发送给服务器;

--basic: 使用HTTP基本认证

--tcp-nodelay: 使用TCP_NODELAY选项

-e/--referer <URL>:来源网址

--cacert <file> :CA证书(SSL)

--compressed:要求返回是压缩的格式

-H/--head <line>:自定义首部信息传递给服务器

-I/--head:只显示响应报文首部信息;

b70fd14119547af8602451cfb2b53def.png-wh_

--limit-rate <rate>:设置传输速度;

-u/--user <user[:password]>:设置服务器的用户和密码

-0/--http1.0:使用HTTP1.0

2.     elinks命令

elinks[OPTION]…  [URL…]

-dump:不进入交互式模式,而直接将URL的内容输出至标准输出;

45841a47e385161ea0928df1f6625bc7.png-wh_

3.     user/group

指定以哪个用户的身份运行httpd服务进程;

User apache

Group apache

4.     使用mod_deflate模块压缩页面优化传输速度;

适用场景:

1)    节约带宽,额外消耗CPU;同时,可能有些较老浏览器不支持;

2)    压缩适于压缩的资源,例如文本文件;

       SetOutputFilter  DEFLATE

      # mod_deflate configuration

     

      # Restrict compression to these MIME types

      AddOutputFilterByType DEFLATE text/plain

      AddOutputFilterByType DEFLATE text/html

      AddOutputFilterByType DEFLATEapplication/xhtml+xml

      AddOutputFilterByType DEFLATE text/xml

      AddOutputFilterByType DEFLATEapplication/xml

      AddOutputFilterByType DEFLATEapplication/x-javascript

      AddOutputFilterByType DEFLATEtext/javascript

      AddOutputFilterByType DEFLATE text/css

     

      # Level of compression (Highest 9 - Lowest1)

      DeflateCompressionLevel 9

     

      # Netscape 4.x has some problems.

      BrowserMatch ^Mozilla/4  gzip-only-text/html

       

      # Netscape 4.06-4.08 have some moreproblems

      BrowserMatch  ^Mozilla/4\.0[678]  no-gzip

                  

      # MSIE masquerades as Netscape, but it isfine

      BrowserMatch \bMSI[E]  !no-gzip !gzip-only-text/html

演示:

1)    检查该模块是否安装,要确保模块已经安装才可以启用模块;

 3d3295a5b9fe16d0e050b142a4605929.png-wh_

2)    复制一个大文件至documentroot目录;

 6cda6f1d061307c928fd8127b3ec20f2.png-wh_

Note:如果复制后的文件其他用户没有读权限需要给它读权限,否则apache用户不能访问;

3)    查看网页响应首部信息,看是否有deflate压缩机制;

b417c98abf9d0d4d827f93b07948e159.png-wh_

Note:可以看出此时不支持压缩功能;

4)    启动压缩模块,但是在压缩之前要先过滤,把适合压缩的文本文件过滤出来;编辑配置文件,添加以下内容;

a591e8b1f33b0b339484ad57d9ab188a.png-wh_

5)    检查语法,并重载;

e4caebb6ca5421b62a5278c2d4f406a7.png-wh_

6)    验证,查看之前的响应首部文件;

0264b81306f52237e02c7f20b7ac868f.png-wh_

可以看出,现在可以支持压缩机制,并且压缩后的内容字节大小比未压缩减少很多。

5.     https,http over ssl,对应端口443端口;

SSL会话的简化过程;

1)    客户端发送可供选择的加密方式,并向服务器请求证书;

2)    服务器端发送证书以及选定的加密方式给客户端;

3)    客户端取得证书并进行证书验证;

如果新人给其发证输的CA;

a.     验证证书来源的合法性:用CA的公钥解密证书上数字签名;

b.    验证证书的内容的合法性:完整性验证;

c.     检查证书的有效期限;

d.    检查证书是否被吊销;

e.     证书中拥有者的名字,与访问的目标主机要一致;

4)    客户端生成临时会话密钥(对称密钥),并使用服务器端的公钥加密此数据发给服务器,完成密钥交换;

5)    服务用此密钥加密用户请求的资源,响应给客户端;

注意:SSL会话是基于IP地址创建,所以单一IP的主机上,仅可以使用一个https虚拟主机;

配置httpd支持https:

1)    为服务器申请数字证书;

测试:通过私建CA发证书;

     创建私有CA;

在服务器创建证书签署请求;

CA签证;

2)    配置httpd支持使用ssl,及使用的证书;

#yum –yinstall mod_ssl

配置文件:/etc/httpd/conf.d/ssl.conf

DocumentRoot

ServerName

SSLCertificateFile

SSLCertificateKeyFile

3)    测试基于https访问相机的主机;

#openssl s_client[-connect host:port] [-cert filename] [-CApath directory] [-CAfile filename];

示例:

准备两台主机,一台作CA主机,一台作httpd服务器主机;

1)    在CA主机上创建私有CA;CA主机ip地址为192.168.19.134;

a.     生成私钥;

17da28c6d647d32930d620fcfa9cb43e.png-wh_

b.    生成自签证书;

~]#openssl req–new –x509 –key /etc/pki/CA/private/cakey.pem –out /etc/pki/CA/cacert.pem –days3655

-new:生成新证书签署请求;

-x509:生成自签格式证书,专用于创建私有CA;

-key:生成请求时用到的私钥文件路径;

-out:生成的请求文件路径;如果自签操作将直接生成签署过的证书;

-days:证书的有效时长,单位为day;

f71e4e537dc0d543c7680d9636c43042.png-wh_

c.     为CA提供所需目录及文件;

e9494037197b52f6b46cce26481d3f9e.png-wh_

2)    在httpd服务器主机上,向CA主机签署证书;httpd服务器主机ip:192.168.19.128;

a.     创建httpd通信时用到的私钥;

4765be54e825267f171b4533fc2c9fea.png-wh_

b.    生成证书请求;

a22d483cf7f10b3e434270e0a73a0b46.png-wh_

c.     将请求通过可靠方式发给CA主机;

93f27e595a2d777c79cea3684663a941.png-wh_

3)    在CA主机上签署请求;

a.     查看httpd服务器发来的证书请求;

2a0d9673c10deb70a14c4d55b570ce79.png-wh_

b.    签署证书;

28d23f432f1f93a0a70e77de569c47c3.png-wh_

c.     将签署玩的证书发给httpd服务器;

f4b28001edd98498a4b187fe77961e84.png-wh_

4)    在httpd服务器主机上配置httpd支持使用ssl,及使用的证书;

a.     安装ssl模块(httpd默认没有安装ssl的模块,所以需要额外安装);

cb0c87ce449153aa0b09fbb950a04ace.png-wh_

b.    检查是否安装完成;

0c77cd8c1210ddb6349ce90806242bac.png-wh_

c.     修改ssl配置文件:/etc/httpd/conf.d/ssl.conf

16a2f7acb1be58dc7c4a21bf08f71dc7.png-wh_

d.    修改主配置文件/etc/httpd/conf/httpd.conf

67eaa92c0501220878a3c8e8149a7ebe.png-wh_

5)    查看监听端口;

0d9b5c3e8dc94abb2f361a5e415b44d4.png-wh_

6)    测试,测试,导入证书文件,并且主机名要和证书一致;

1a3644690fdb3a38eaff7f5097fc212d.png-wh_

Note:也可利用openssls_client测试;

 

6.     httpd自带的工具程序;

htpasswd:basic认证基于文件实现时,用到的账号密码文件生成工具;

apachectl:httpd自带的服务控制脚本,支持start和stop;

apxs:由httpd-devel包提供,扩展http使用第三方模块的工具;

rotatelogs:日志滚动工具;

access.log -->

      access.log , access.1.log -->

            access.log , access.1.log ,access.2.log

suexec:访问某些有特殊权限配置的资源时,临时切换至指定用户身份运行;

ab:apache bench

 

7.     httpd的压力测试工具;

ab,webbench,http_load,seige

jmeter,loadrunner

tcpcopy:网易研发,复制生产环境中的真实请求,并将之保存下来;

 

ab [OPTIONS]URL

ab [options] [http[s]://]hostname[:port]/path

-n:总请求数;

-c:模拟的并行数;

-k:以持久连接模式 测试;

348c8355b52a785b2d1739de947a1489.png-wh_




本文转自 claude_liu 51CTO博客,原文链接:http://blog.51cto.com/claude666/1979623,如需转载请自行联系原作者

相关文章
|
1天前
|
Linux C语言
|
1天前
|
JSON Linux 数据格式
Linux命令发送http
请注意,`curl`命令非常灵活,可以根据您的需求进行多种配置和自定义。您可以查看 `curl`命令的文档以获取更多详细信息。
5 0
|
3天前
|
安全 网络协议 网络安全
干货|代理IP协议有何区别?深入了解 SOCKS5、HTTP 代理
HTTP和HTTPS是互联网主要的两大协议,HTTP是基础的简单请求-响应协议,常用于TCP上,但数据传输不安全。HTTPS是HTTP的安全版本,添加了SSL层进行加密和身份验证,提供更高的安全性,用于保护数据和验证网站真实性。HTTPS需CA证书,可能产生费用,并使用443端口而非HTTP的80端口。
|
3天前
|
网络协议 安全 数据安全/隐私保护
干货|代理IP协议有何区别?深入了解 SOCKS5、HTTP 代理
SOCKS5和HTTP是两种代理协议,前者是通用型,支持多种网络流量,提供身份验证、IPv6支持及UDP兼容性,更适合实时数据传输。HTTP代理专用于HTTP协议,适用于Web资源请求。SOCKS5在传输方式、功能、兼容性和安全性上更胜一筹,而HTTP代理则在处理HTTP请求时更专业。选择代理协议应根据需求和应用场景,考虑服务的稳定性和安全性。付费代理如kookeey全球代理,支持双协议,速度快且可扩展性强,是可靠的选择。
|
4天前
|
数据采集 网络协议 安全
2024年,你还在等什么?一起探索HTTP协议的奥秘!
2024年,你还在等什么?一起探索HTTP协议的奥秘!
|
4天前
|
网络协议 Java 应用服务中间件
HTTP协议与Tomcat在IJ中配置
本文是对自己学习JavaWeb学习的笔记的总结,添加了一些自己的东西,然后进行一次复盘,并加深一下学习的理解和印象.其中内容主要包括对http协议的详细介绍,java常见服务器的初步介绍,以及IJ旧版和新版的tomcat服务器的配置图解教程
|
4天前
|
存储 网络协议 JavaScript
应用层 HTTP协议(1)
应用层 HTTP协议(1)
7 0
|
5天前
|
缓存 安全 Linux
【探索Linux】P.33(HTTP协议)
【探索Linux】P.33(HTTP协议)
30 7
|
5天前
|
JSON Linux 数据格式
【探索Linux】P.32(自定义协议)
【探索Linux】P.32(自定义协议)
21 4
|
5天前
|
网络协议 算法 Linux
【探索Linux】P.27(网络编程套接字 —— UDP协议介绍 | TCP协议介绍 | UDP 和 TCP 的异同)
【探索Linux】P.27(网络编程套接字 —— UDP协议介绍 | TCP协议介绍 | UDP 和 TCP 的异同)
14 0