[网络协议] Http知识点记录(采自-HTTP权威指南)

像tomcat这样的 java代理 叫做网关服务器,他们接受http请求,同时也管理java类,当收到http 的 post请求时,会
在自己管理的java类中找到对应的url,然后把参数传递给这个类处理。这里就涉及到jvm的问题,jvm会管理所有的
java类,然后将他们编译好放在自己的内存空间中,当收到到http 的 post请求时,便会去找对应的类,找到则传入参数
处理。

TRACE方法可以用来检查当前请求的整个通路情况

在http代理转发的场景下,connection 字段的值只会影响相邻的两个http节点,在转发给下一个节点时当前节点会把connection的值删除,
然后再根据需要添加新的值

HOST 字段用来表示当前请求的HOST是哪一个,虽然这看起来和URL中的ip地址字段有点重复,但是还是有些用的,比如
代理服务器(nginx/tomcat) 可能会同时代理多个服务器,这个时候就需要根据HOST字段来确定不同服务器对应的根路径在哪

web代理服务器是 web客户端和 web服务器的中间人,客户端可以直接与服务器交互,也可以通过代理与服务器交互。
web代理既是客户端也是服务端,它是web客户端的服务端,是web服务端的客户端,即是一个 “前置服务器”


代理连接的是两个或多个使用 “相同”协议 的应用程序。
网关连接的是两个或多个使用 “不同”协议 的应用程序。网关即是 “协议转换器”

举例:http 和 E-mail是两套完全不同的协议,那么为什么可以在网页上收发邮件呢?这就依赖于 HTTP/POP网关程序,
这个程序很可能作为浏览器的插件被集成在浏览器中,当有转换业务需要的时候,这个插件便会工作。


代理存在的意义:1)软件架构层面,是很好的解耦中间件;
                2)流量控制层面,可以作为流量控制集散中心;
                3)内容过滤,即墙
                4)文件访问控制
                5)等等
                
主要还是为了架构解耦,服务器专心做业务,对于业务的控制则有代理来做

反向代理,集成了业务的代理便是反向代理,反向代理和正常代理唯一不同在于,web客户端认为反向代理服务器的地址
就是服务器地址,而正常代理则仅仅是一个网络桐庐,客户端访问的路径还是服务器路径,http协议会通过代理进行
跳转。

反向代理是代理了服务器服务的代理,即其包含自己的业务,以及告知服务器该如何注册业务到自己的服务列表中

浏览器可以设置代理,那么在访问服务器的时候,浏览器会把请求先发给代理,然后让代理去访问服务器
反向代理,浏览器以为自己访问的是服务器,而其实是反向代理服务器

正常代理是服务web客户端的
反向代理是服务web服务端的


如何区分一个http请求时发给代理的还是发给服务器的?
GET /index.html HTTP/1.0    发给服务器的不包含服务器地址信息,地址信息包含在底层的tcp/ip中了,服务器只需要提供服务
GET http://www.marys-antiques.com/index.html HTTP/1.0   发给代理的包含服务器地址信息,因为代理需要知道自己收到的东西要转发给谁

为什么会有两种不同的请求格式,一种用于代理,另一种用于服务器呢?在原始的
HTTP 设计中,客户端会直接与单个服务器进行对话。不存在虚拟主机,也没有为
代理制定什么规则。单个的服务器都知道自己的主机名和端口,所以,为了避免发
送冗余信息,客户端只需发送部分 URI 即可,无需发送方案和主机(以及端口)。
代理出现之后,使用部分 URI 就有问题了。代理需要知道目标服务器的名称,这样
它们才能建立自己与服务器的连接。基于代理的网关要知道 URI 的方案才能连接到
FTP 资源和其他方案上去。HTTP/1.0 要求代理请求发送完整的 URI,解决了这个问
题,但它为服务器请求保留部分 URI 的形式(已经有相当多的服务器都改为支持完
整 URI 了)。 

ps:反向代理的请求时和服务器是一样的,因为客户端以为自己发给的是服务器。


Via首部字段列出了报文经过的每个中间节点的有关信息,比如代理和网关,报文每经过一个
节点,就会添加一个Via条目

请求和应答都会经过中间节点,所以都有Via字段

如果是经过网关节点,那么Via字段还会标注当前网关进行了HTTP到哪种协议的转换
ps:网关的功能就是进行协议转换,比如把一个http请求转换成一个ftp请求

OPTIONS方法用来获取服务器的所有可操作选项或者某个uri的可操作选项

网关的目的是将所有请求都转换成http协议进行交互,可以认为网关是http协议与其他协议的转换器,根据客户端的需求进行切换

隧道:
HTTP是基于tcp的 ,因此可以利用http协议捎带一些自定义的数据,这样做可以使用现有的http网络拓扑,可以很好地避免防火墙拦截。

隧道的建立是通过CONNECT方法

例子:CONNECT orders.joes-hardware.com:443 HTTP/1.0
可见创建隧道时,还是需要制定服务器ip和port,相当于再创建一个新的tcp链接


网络爬虫的设计规则和绕过陷阱的方法:
1)URL规范化
2)广度优先的爬行
3)节流
4)限制URL的大小
5)站点黑名单
6)模式检测
7)内容指纹
8)人工监视


#########  秘钥  ##########

秘钥:
加解密算法一般都是固定的,但是如何生成不同的输出,这就要依赖秘钥因子,可以理解秘钥为加密算法的一个输入值,用
来配合明文做加密使用。

#1 对称秘钥技术

对称秘钥算法:
加解密使用的秘钥是一样的,流行的对称秘钥算法有 DES/3DES/RC2/RC4


众所周知,加解密算法规则都是公布于众的,那么加密的关键就是秘钥了。

评价一个加密算法的好坏主要看通过枚举秘钥的方式来暴力破解时使用枚举值的多少。

对称秘钥技术的缺点在于双方在交互之前需要都持有秘钥,如果服务器中有10000个用户,那么服务器就要为这10000个用户
分配不同的秘钥并想办法吧秘钥告知这些用户。

#2 公开秘钥技术

非对称秘钥算法:
加密和解密使用不同的秘钥

服务器将加密秘钥公开,让所有人都能持有,但是解码的秘钥只有服务器有,这样的话所有客户端都能给服务器发送加密的
报文,而且只有服务器能够解码,这有一个问题就是客户端没法解码服务器加密的密文,因为客户端持有的公钥只能用来解密
不能用来解密。

公开秘钥技术(非对称算法)适合用在客户端发送密文但接受明文的场景,收发都是密文的话就需要客户端定义自己的公钥并
让服务端按照自己的公钥进行加密。

公开秘钥技术的应用场景是:客户端无需和服务端进行秘钥协商便可使用公开秘钥向服务端发送加密的安全报文


 

猜你喜欢

转载自blog.csdn.net/ykun089/article/details/107338352