HTTP协议常用详解----学会够用

HTTP

http是一种基于消息的模型:
客户端发送一条请求信息,服务端返回一条响应信息。
该协议不需要连接,虽然http使用的是有状态的tcp协议作为它的传输机制,但每次请求和响应交换都是自动完成,并且可能使用的不是同一次tcp连接

所有的http消息,包括请求和响应,都包含一个或者几个单行显示的消息头(header),然后是一个强制空白行,最后是消息主体(可空)
下图是一个典型的http请求。
第一行由三个项目组成:此次请求包采用方法:常见GET;POST,所请求的 url,使用的http版本。
referer消息头:用于标出发请求的原始URL
User-Agent消息头:提供与浏览器或其他生成请求的客户端软件有关的信息。
Host消息头:用于指定出现在被访问的完整URL中的主机名称

HTTP响应
每个HTTP响应的第一行由3个项目组成:使用的HTTP版本,请求状态码,与状态码对应进一步说明响应状态。
Server消息头中包含了一个flag:指明web服务器软件,有时还包括了其他信息
Set-Cookie消息头想=向浏览器发送另一个cookie,它将在随后向服务器发送的请求中由cookie消息头返回
Pragma消息头:让浏览器不要将响应保存在缓存中
Expires消息头:表明响应内容已经过期,所以不需要保存在缓存中。这两个字段是为了确保浏览器随时可以获得最新的内容
Content-Type:几乎所有的HTTP响应在消息头后的空白行下面都包含了消息主题,Content-Type消息头表示这个消息主体中包含了HTML的文档。
Content-Length消息头:规定消息主题的字节长度

HTTP方法
GET的作用在于获取资源,参数拼接在URL上,URL被记录在许多地方:,浏览器的历史记录,web服务器的访问日志中。
POST方法主要用于执行操作,主要用于传参,参数不出现在URL中,在消息主体中。维护URL日志和referer消息头也将这些参数排除在外。所以返回的话,不会带入参数,也就会出现报错
URL(Uniform Resource Locator。统一资源定位符),是标识web资源的唯一标识符,通过它即可获取其标识的资源:
protocol://hostname[:port]/[path/]file[?param=value]
REST表述性状态转移(REST)是分布式系统的一种体系架构,在这类体系架构中,请求和响应包含系统资源当前状态的表述。

HTTP消息头
常用消息头
connection:告诉通信的另一端,在完成HTTP传输后是关闭TCP连接,还是保持连接开放以接收其他消息。
Content-Encoding:用于消息主体中的内容只当编码格式(如gzip),一些应用成虚使用它来涯所响应以加快传输速度
Transfer-Encoding:这个消息头指定为方便其通过HTTP传输而对消息主体使用的任何编码。

请求消息头
accept:这个消息头告诉服务器,客户端愿意接受哪些内容,图像类型、办公文档格式等
Accept-Encoding:这个消息头用于告诉服务器,客户端愿意接受哪些内容编码
Cookie:这个消息头用于向服务器提交它以前发布的cookie
Host:指定出现在所请求的完整URL中的主机名称
If-Modified-Since:用于说明浏览器最后一次收到的请求资源的时间。如果自那之后资源没有发生变化,服务器就会发出一个带状态码304的响应,指示客户端使用的资源的缓存副本
Origin:这个消息头用于跨域Ajax请求中,用于指示提出请求的域

响应请求头:
Access-Control-Alliw-Origin:用于指示可否通过跨域Ajax请求获取资源
Cache-Control:用于向浏览器传送缓存指令
ETag:指定一个实体标签。客户端刻在将来的请求中提交这个标识符
Expires:这个消息头用于向浏览器说明消息主题内容的有效时间。在这个时间之前,浏览器可以使用这个资源的缓存副本
Location:用于在重定向响应(那些状态码以3开头的响应)中说明重定向的目标
Pragma:用于向浏览器传送缓存指令
Server:提供所使用的web服务器的相关信息
www-Authenticate:用在带401状态码的响应中,提供与服务器所支持的身份验证类型有关的信息
X-Frame-Option:指示浏览器框架是否及如何加载当前响应

Cookie
cookie是大多数web应用程序所依赖的HTTP协议的关键组成部分,攻击者常常通过它来利用web应用程序中的漏洞。服务器使用cookie机制向客户端发送数据,客户端保存cookie并将其返回给服务器。
HttpOnly:设置这个属性,将无法通过客户端JS直接访问cookie

状态码
1xx---------提供信息
2xx---------请求被成功提交
3xx---------客户端被重定向到其他资源
4xx---------请求包含某种错误
5xx---------服务器执行请求时遇到错误

HTTP代理
http代理服务器是一个协调客户端浏览器与目标web服务器之间访问的服务器。当配置浏览器使用代理服务器时,它会将所有请求提交到代理服务器,代理服务器再将请求转送给相关web服务器,并将响应返回给浏览器。大多数代理还使用其他的服务。缓存,验证,访问控制。

使用代理服务器时:
当浏览器向代理服务器发布http请求时,会将完整的URL插入请求中,代理服务器将提取主机名和端口,并使用这些信息将请求指向正确的目标web服务器。
当使用HTTPS时,浏览器无法与代理服务器进行SSL握手,因为这样做会破坏安全隧道,使通信易于遭受拦截攻击。因此,代理浏览器必须将代理作为一个纯粹的TCP中继,由它传递浏览器与目标web浏览器之间的所有网络数据,并与浏览器进行正常的SSL握手。浏览器使用CONNECT方法向代理服务器提交一个HTTP请求,并指定URL中的目标主机名称与端口号,从而建立这种中继。如果代理允许该请求,它会返回一个200状态码的HTTP响应,一直开放TCP连接,从此以后作为目标web服务器的纯粹的TCP级中继
攻击web应用程序时,最有用的工具时一个处在浏览器的目标的web站点之间的专用代理服务器。使用它可以拦截并修改,所有使用HTTPS的请求和响应

HTTP身份验证
basic:一种非常简单的身份验证机制,在请求头中随每条消息以base64编码字符串的形式发送用户证书
NTLM:一种质询-响应式机制,它使用某个Windows NTLM协议版本。
Digest:一种质询-响应式机制,随同用户证书一起使用一个随机值MD5校验和。
internet的web应用基本很少使用它们

base身份验证是安全的,很多银行也在使用,只要配合HTTPS使用,防止被窃听,就比市面上绝大多数web应用程序的身份验证差不多了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值