HTTP协议基础

本文内容来自蚁景网安课程。

HTTP介绍

简介

HTTP:超文本传输协议。是互联网上应用最广泛的一种网络协议,所有www文件都必须遵循的标准,以ASCII码传输,建立在TCP/IP协议之上的应用层规范。

计算机相互之间的通信

两台计算机之间的通信是通过TCP/IP协议来完成的。

TCP:传输控制协议。

IP:网际协议。

IP:计算机之间的通信

每台计算机都有一个IP用来在Internet上标识自身位置。IP负责在因特网上发送和接收数据包。通过IP,消息被分割为小的独立的包,并通过因特网在计算机之间传送。

IP协议只是允许计算机互相发送消息,但并不检查顺序和是否损坏,只会检查头部数据。

TCP:应用程序之间的通信

确保数据包顺序正确。允许计算机通过端口提供服务,一些端口号为特定服务保留(如80端口用于HTTP通信,3306用于mysql数据库等)。

网络七层模型

img

上图来自计算机网络的7层、4层和5层模型

更多协议内容可参考科来网络通信协议图

HTTP工作过程

域名解析->三次握手->发起HTTP请求->响应HTTP请求并得到HTML代码->浏览器解析HTML代码->浏览器对页面进行渲染呈现给用户。

统一资源定位符

URL(统一资源定位符):也就是我们常说的网址,包含了用于查找资源的足够信息。

完整的URL包含下面几部分:

eg: http://user:pass@exmaple.com:80/dir/index.htm?uid=1#ch1

协议方案名:http

登录信息(认证):user:pass

服务器地址:www.example.com

服务器端口号:80

带层次的文件路径:/dir/index.htm

查询字符串:?uid=1

片段标识符:#ch1

HTTP消息解析

无论是请求还是响应,都包括HTTP头部和正文信息。

HTTP头部:请求头部、响应头部。

正文:请求正文、响应正文。

客户端请求消息

包含请求行、请求头部字段、请求数据。

请求方法

GET、HEAD、POST、PUT、DELETE、CONNECT、OPTIONS、TRACE

请求头部

允许客户端传递关于自身的信息和希望的响应形式。

Host:指定请求的服务器域名和端口号。

Content Length:请求的内容长度。

Accept:指定客户端能够接收的内容类型。

X-Forwarded-For:是用来识别通过HTTP代理或负载均衡方式连接到Web服务器的客户端最原始的IP地址的HTTP请求头字段。

User Agent:包含发出请求的用户信息。

Content Type:请求的与实体对应的MIME信息。

Origin:指明当前请求来自于哪个站点。

Referer:先前网页的地址,当前请求网页紧随其后。

Accept Encoding:指定浏览器可支持的web服务器返回内容压缩编码类型。

Accept Language:浏览器可接受的语言。

Cookie:HTTP请求发送时,会把保存在该请求域名下的所有cookie值一起发送给web服务器。

Connection:表示是否需要持久连接。

空行

表示请求头结束,请求正文(请求体)开始。

请求数据

GET方法:提交数据时,数据参数会作为URL的一部分放在文件路径后面发送给服务器,被称为查询字符串。

POST方法:发送的数据放在请求体中。

服务端响应消息

包括状态行、消息报头和响应正文。

状态码

200 OK:客户端请求成功。

302:url跳转。

400 Bad Request:客户端请求有语法错误,服务器不能理解。

401 Unauthorized:请求未经授权。

403 Forbidden:服务器收到请求但拒绝提供服务。

404 Not Found:请求资源不存在。

500 Internal Server Error:服务器发生不可预期的错误

503 Server Unavailable:服务器当前不能处理客户端的请求,一段时间后可能正常。

响应头部

Server:web服务器软件名称。

Date:原始服务器消息发出的时间。

Content-Type:返回内容的MIME类型。

Set-cookie:设置HTTP Cookie。

Content-Length:响应体长度。

ETag:请求变量的实体标签的当前值。

refresh:应用于重定向或一个新的资源被创造。

WWW-Authenticate:表明客户端请求实体应该使用的授权方案。

Allow:表示对某网络资源的有效请求行为,不允许则返回405。

Location:用来重定向接收方到非请求URL的位置来完成请求或标识的资源。

空行

表示响应头结束,响应正文开始。

返回数据

服务器返回的资源内容

1
{"result":"success","message":null}

Cookie与Session

Cookie特点

总是保存在客户端中,按存储位置可分为内存Cookie和硬盘Cookie。

内存Cookie由浏览器维护,保存在内存中,浏览器关闭后就会消失。

硬盘Cookie保存在硬盘中,有一个过期时间,只有用户手工清理或到了过期时间时才会清除。

当某人访问网站时,服务器会根据浏览器编号生成一个Cookie返回给客户端,放在Set-cookie字段中。客户端下次访问该网站时就会把cookie和url访问地址一起发给服务器,服务器据此辨别用户状态。

Session简介

Session代表服务器与浏览器的一次会话过程,是一种服务器端机制。Session对象用来存储特定用户会话所需信息。

Session由服务器端生成,保存在服务器的内存、缓存、硬盘或数据库中。

Session工作原理

用户访问服务器时,若服务器启用Session,就要为用户创建一个Session并生成Session ID(身份标识)。

这个Session ID是唯一的,在本次响应中返回到客户端,而保存这个Session ID的就是COOKIE。

二者区别

存放位置不同:Cookie保存在客户端,Session保存在服务端。

存取方式不同:Cookie只能存放ASCII字符串,其他类型需要先进行编码,Session都可以存。

安全性不同:Cookie存放在浏览器中,对客户端可见,客户端的一些程序可能存在安全隐患。Session存放在服务器上,对客户端透明,不存在敏感信息泄露风险。