http:超文本传输协议,属于应用层协议
通过浏览器,我们可以很方便地用http协议与其他主机通信。当然我们也可以使用curl,但浏览器会帮我们解析HTML,而curl不会。(curl是什么?打开命令行,输入“man curl ”)
HTTP请求与HTTP响应
对于使用http协议通信的应用,在数据包的应用数据段具有统一的格式。
第一行为请求行(响应行),第二行起至空白行前为请求头(响应头),空白行后为请求正文(响应正文)。
如下为一个HTTP请求
POST /example.php HTTP/1.1
Host: example.com
Connection: keep-alive
a=1
第一行:POST表示POST请求方法,/example.php 表示请求的资源,HTTP/1.1 表示使用的是HTTP1.1版本
第二行起至空白行:每一行都是一个键值对(请求头),如Host: example.com表示访问的主机域名为example.com(键值对数量不确定)
空白行后:传输的数据。
如下为一个HTTP响应
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Content-Encoding: br
......
第一行:HTTP/1.1表示HTTP版本1.1,200为状态码,OK可忽略
第二行起至空白行:每一行都是一个键值对(响应头)(键值对数量不确定)
空白行后:传输的数据。
请求方法
上文例子中我们使用的是POST请求方法,实际上有多种请求方法,以下列举部分。
• GET 将要传输的数据加入URL中,如http://example.com/index.php?user=1,其中user=1就是要传输的数据,值得一提的是,如果我们请求一个动态脚本,那么返回的是服务端已经解析的HTML代码,而不是脚本源代码。
• POST 将要传输的数据放入请求正文。
• HEAD 对于使用HEAD方法请求,服务端将不返回响应正文,其余同POST和GET方法。如果我们仅仅测试一个资源是否存在,HEAD方法无疑是最佳的(也就是方便我们快速扫描目录)。
• PUT 将数据存储在服务端下(服务器一般关闭此方法)
• DELETE 将指定资源删除(服务器一般关闭此方法)
请求头与响应头
以下列举部分请求头
• Host 表明请求的主机
• User-Agent 浏览器标识
• Cookie 即cookie
• Referer 表明用户从哪个URL来访
• X-Forwarded-For 表明用户端ip,如果有多个中间用逗号隔开
以下列举部分响应头
• Server 包含一些服务端信息,服务端可修改此部分消息
• Set-Cookie 设置cookie
状态码
状态码为三位数,第一位为1至5,含义如下
• 1xx 请求已被服务端接收
• 2xx 请求已被服务端处理
• 3xx 重定向
• 4xx 客户端错误,比如说输入了错误的URL
• 5xx 服务端错误,比如服务器过于繁忙
参考《web安全深度剖析》张炳帅 编著
参考 https://www.w3.org