基本概念
- 代理:位于客户端和服务器之间的
HTTP
中间实体 - 缓存:
HTTP
的仓库,使常用的页面的副本可以保存在离客户端更近的位置 - 网关:链接其他应用程序的特殊的web服务器
- 隧道:对HTTP通信报文进行盲转发的特殊代理
- Agent代理:发起HTTP请求的半智能web客户端
代理

代理位于客户端和服务器之间,接受了所有的HTTP
的请求,并将这些请求发送给服务器(也可能会对请求进行修改然后再进行发送)。在安全的角度来看,通常会将代理作为转发所有的web流量的可信的中间节点进行使用,因为代理可以对一些请求和响应进行过滤。
缓存
web
缓存或是代理缓存,是一种特殊的HTTP
代理服务器,可以将进过代理传送为常用文档复制保存起来,下一次请求同一个文档就可以享受缓存的私有副本所提供的服务了。

网关
也是一种特殊的服务器,作为其他服务器的中间实体来使用,通常的作用是将HTTP
流量转换成其他的协议。网关在接受请求的时候,就好像自己是自愿服务器一样,客户端可能并不知道自己是在和一个网关进行通信。

隧道
隧道是建立起来后,就会在两条链接之间对原始数据进行盲转发的HTTP
应用程序。HTTP
隧道通常用来在一跳或是多条HTTP
链接上转发非HTTP
数据,而且在转发的时候是不会进行数据的窥视的。
我们经常使用HTTP
隧道来:通过HTTP
连接承载加密的安全套接字层流量,这样的话SSL流量就可以穿过仅仅允许web流量通过的防火墙了。

Agent代理
用户Agent代理是代表用户发起HTTP请求的客户端程序,所有发布web请求的应用程序都是HTTP Agent
代理。比如:有些自己会在web上闲逛的自动Agent代理,可以在无人监听的情况下发布HTTP
的事物或是获取内容。

HTTP报文
举个栗子:如果说HTTP
是因特网的信使,那么HTTP
就是它用来搬东西的包裹。
HTTP报文是在HTTP应用程序之间发送的数据块,这些数据块以一些文本形式的元数据开头,这些信息描述了报文的内容和含义。

报文的组成部分
报文由三部分组成:对报文进行描述的起始行(有首部header,以及可选的数据主体body)

报文的语法
HTTP报文分类:请求报文(request message
)和响应报文(response message
)
请求报文:向web服务器请求一个动作
响应报文:会将请求的结果返回给客户端

方法:
GET
:从服务器获取一份文档
HEAD
:只从服务器获取文档的首部
POST
:向服务器发送需要处理的数据
PUT
:将请求的主体部分存储到服务器上
TRACE
:对可能经过代理服务器传送到服务器上的报文进行追踪
OPTIONS
:决定可以在服务器上执行哪些方法
DELETE
:从服务器上删除一份文档
GET
客户端用GET
方法发送一次HTTP
的请求

HEAD
HEAD
和GET
的请求行为很类似,但是服务器仅仅会返回首部,不会返回实体的主体部分。
使用HEAD
的应用场景:
- 在不获取资源的情况下了解资源的情况(判断类型)
- 通过查看响应中的状态码,看看某个对象是否存在
- 查看首部,看一下资源是否被修改了

PUT(更新)
与GET
从服务器读取文档相反,PUT
方法是向服务器写入文档。PUT
的本意是让服务器用请求的主体部分创建一个由所请求的URL
命名的新文档。如果原来的URL
已经存在的话,就用这个主体来代替。

POST
POST
方法的初衷是向服务器发送数据,实际上我们用它来支持HTML
的表单。

TRACE
当客户端发送一个请求的时候,这个请求可能要穿过防火墙、代理、网关或是其他的一些应用程序。在这个过程中,每一个节点都可能改变原始的HTTP请求,TRACE方法允许客户端在最终将请求发给服务器的时候,看看它变成了什么样。

OPTIONS
OPTIONS
方法请求web
服务器告知其支持的各种功能,可以查询浏览器支持哪些方法,或者对某些资源支持哪些方法。

DELETE
DELETE
所做的就是删除指定服务器删除请求URL所指定的资源,但是客户端是无法确定删除的操作一定会被执行,因为HTTP
规范允许服务器在不告知客户端的情况下撤销请求。

状态码
100~199 --信息性状态码

200~299 --成功状态码

300~399-- 重定向状态码
重定向状态码要么告知客户端使用替代未知来访问客户端感兴趣的资源,要么就是提供一个替代的响应而不是资源的内容。如果资源被移动了,可以发送一个重定向的状态码和一个可选的location
首部来告诉客户端资源已经被移动了,以及现在在哪里可以找到。

304:比较常用的,比如说客户端发送了一个特殊的If-Modified-Since首部,在这个日期之后,如果这个文档没有进行修改过,服务器就会返回一个304的状态码。



其实302,303,307在功能上是有一些交叉的,出现这么多主要是为了兼容HTTP的版本
400~499客户端的错误


500~599服务器错误状态码


网友评论