HTTP是什么
HTTP是HyperText Transfer Protocol的缩写,中文就是超文本传输协议,所谓的超,是个学术用语,是基于某种事物增加了更多的信息维度,比如超像素xxx之类的.
协议是什么,协议说白了就是约定,约定就是模板,就是表格,就和你去银行办手续一样,客户不知道要提供什么信息,银行又不能一个客户一个客户教,所以就准备一样表格.
HTTP的脑洞(无事实根据)
为什么会有HTTP叫做报文呢,因为我觉得以前最早大家都是通过电报机来远程快速传递信息.由于每个字都老贵了,所以能简短就简短.就有了报文这个东西,一般包含以下信息
发件人
收件人
干什么
所以说到了现在都超文本这么吊的东西了,说白了还是和电报一样,滴滴滴,你发给服务器一个电报,服务器看看,然后滴滴滴,回给你一个电报.这就是所谓的超文本传输协议.
但是吊就吊在这个超字上,现在电脑便宜了,大街上一百块一台,所以说可以发更多的信息了,所谓更多的信息,就是除了文本本身的内容外,还可以携带一些网络参数以及约定的信息等,是指的信息维度的增加(除去内容还有其它维度),而不是文本内容变长了.
所以说HTTP通信,本质上和以前的电报还是没有什么区别的,唉,人类真是聪明又愚蠢啊.
HTTP报文格式
就像刚刚说的,一张白纸,怎么写才能让两边指导什么写的是什么呢?就牵扯到格式了,这种格式约定就是协议.HTTP其实就是一张这样的表单
HTTP报文头
就如同刚刚脑洞中以电报举例一样,HTTP的报头主要是一些参数信息,类似于
发件人
收件人
并不包含实际文本内容
HTTP报文头首行有3个数据,来分辨这个是Request报文还是Response报文,接下来每行是一个字段和一个内容,这些字段都是W3C规定好的,你当然可以自定义,但是只不过通用标准不认罢了.所以说字段相当于表格中
姓名: some SB
里的姓名,”some SB”这个内容可能会变,但是不管怎么发报文,姓名这一栏不会变.
HTTP报文体
HTTP报文体是开始于HTTP报文头遇到一个仅有换行的空行开始,这也是为什么会有CRLF换行符注入这种攻击,因为报文都是通过换行符来判断哪里是内容开始,报文头结束.可以通过换行符的注入,当报文头提前结束,进入报文体.
HTTP的Request和Response
就像刚刚说的一样,虽然HTTP都是基于报文,但是你发给服务器的电报和服务器返回给你的电报是不同的,他们的主要区别在于两点
报文头的字段
报文体是否可以省略
在Request中报文体并不是必须的,有些Request方法中可以省略,而Response中是不可以省略的,如果报文体因为各种情况没有了,那么就是空返回.
HTTP报文头的字段
通用字段Connection
Content-Encoding
Content-Length
Content-Type
Transfer-Encoding
请求Request字段Accept
Accept-Encoding
Authorization
Cookie
Host
If-Modified-Since
If-None-Match
Origin
Referer
User-Agent
响应Response字段Access-Control-Allow-Origin
Cache-Control
ETag
Expires
Location
Pragma
Server
Set-Cookie
WWW-Authenticate
X-Frame-Options
HTTP的Request方法
HTTP一共有六种Request方法,其中最重要的是GET和POST方法,除了这两个外还有剩下四种,但是不太常用.
HEAD
TRACE
OPTIONS
PUT
虽然不太常用,并不是不用注意
比如有根据TRACE的机制进行攻击的方法.TRACE方法主要用于诊断,服务器会返回Request里所有的报文头诶报文内容信息,所以在某下情况下,如果本地无法获取到Request的报文头,可以通过伪造链接,使用TRACE方法从返回报文里都出来Request中的信息.