1.HTTP协议介绍
- HTTP协议(HyperText Transfer Protocol,超文本传输协议)是因特网上应用最为广泛的一种网络传输协议,所有的WWW文件都必须遵守这个标准
- HTTP是基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)
- HTTP协议通常承载于TCP协议之上,有时也承载于TLS或SSL协议层之上,这个时候,就成了我们常说的HTTPS
- HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。HTTP是一个无状态的协议
- HTTP默认的端口号为80,HTTPS的端口号为443
2.HTTP请求报文
HTTP请求消息由四部分构成:请求行、请求头部、空行、请求主体
2.1 请求行
首行结构为[方法] + [url] + [版本]
URL的标准如下:
协议://服务器IP[:端口]/路径/[?查询]
请求方法如下:
- GET 获取资源
- POST 向服务器端发送数据,传输实体主体
- PUT 传输文件
- HEAD 获取报文首部
- DELETE 删除文件
- OPTIONS 询问支持的方法
- TRACE 追踪路径
GET一般用于获取/查询资源信息,而POST一般用于更新资源信息(常用)
2.2 请求头部(header)
即为请求的属性,全部为以冒号分割的键值对,请求头只出现在HTTP请求中,请求报头允许客户端向服务器端传递请求的附加信息和客户端自身的信息。
常见请求头:
Host请求报头域主要用于指定被请求资源的Interbet主机和端口号
②User-Agent
User-Agent请求报头域允许客户端将他的操作系统,浏览器和其他属性告诉服务器。
③Refere
Referer包含一个URL,代表当前访问URL的上一个URL,也就是说用户是从什么地方来到当前页面。
④Cookies
Cookies是非常重要的请求头,她是一段文本,常用来表示请求者身份等。
⑤Range
Range可以请求实体的部分内容,多线程下载一定会用到此请求头。
⑥X-forweard-for
X-forweard-for即XXF头,它代表请求端的IP,可以有多个,中间由逗号隔开。
⑦Accept
Accept请求报头域用于指定客户端接手那些MIME类型的信息,如Accept:text/html,表明客户端希望接收HTML文本。
⑧Accept-Charset
Host: www.jianshu.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:68.0) Gecko/20100101 Firefox/68.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1
2.3 空行
用于区分请求头部信息和请求正文,必不可少
2.4 请求主体(body)
可选部分,比如GET请求就没有请求正文,若方法字段是POST,则通常来说此处放置的就是要提交的数据;比如要使用POST方法提交一个表单,其中有user字段中数据为“admin”, password字段为123456,那么这里的请求数据就是 user=admin&password=123456,使用&来连接各个字段。
e.g:
username=admin&password=amdin
3.HTTP响应报文
3.1响应行
响应行一般由协议版本、状态码及其描述组成 比如 HTTP/1.1 200 OK;
其中协议版本HTTP/1.1或者HTTP/1.0,200就是它的状态码,OK则为它的描述
常见状态码:
100~199:表示成功接收请求,要求客户端继续提交下一次请求才能完成整个处理过程。
200~299:表示成功接收请求并已完成整个处理过程。常用200
300~399:为完成请求,客户需进一步细化请求。例如:请求的资源已经移动一个新地址、常用302(意味着你请求我,我让你去找别人),307和304(我不给你这个资源,自己拿缓存)
400~499:客户端的请求有错误,常用404(意味着你请求的资源在web服务器中没有)403(服务器拒绝访问,权限不够)
500~599:服务器端出现错误,常用500
3.2 响应头
响应头是服务器根据请求向客户端发送的HTTP头
服务器所使用的Web服务器名称,如Server:Apache/1.3.6(Unix),攻击者通过查看此头,可以探测web服务器名称。所以,建议服务器端修改此头信息。
②Set-Cookie
向客户端设置Cookie,通过查看此头,可以清楚看到服务器向客户端发送的Cooie信息。
③Last-Modified
服务器通过这个头告诉浏览器,资料的最后修改时间。
④Location
服务器通过这个头告诉浏览器去访问那个页面,浏览器接收到这个请求之后,通常会立刻访问localtion头所指向的页面。这个头通常配合302状态码使用。
⑤Refresh
服务器通过Refresh头告诉浏览器定时刷新浏览器。
普通头:在普通报头中,有少数报头域用于所有请求和响应消息 ,但并不用于被传输的实体,只用于传输的消息。例如:
Date,表示消息产生的日期和时间。
Connection,允许发送指定连接的选项。例如,指定连接是连续的,或者指定连接“close”选项,通知服务器,在响应完成后,关闭连接。
Cache-Control,用于指定缓存指令,缓存指令是单向的,且是独立的。
普通头了解即可
实体头:请求和响应消息都可以传送一个实体头。实体头定义了关于实体正文和请求所表示的资源的元信息。元信息也就是实体内容的属性,包括实体信息类型、长度、压缩方法、最后一次修改时间等。常见的实体头如下。
①Content-Type
Content-Type实体头用于向接收方指示实体的介质类型。
②Content-Encoding
Content-Encoding头被用作媒体类型的修饰符,它的值指示了已经被应用到实体正文的附加内容的编码,因而要获得中Content-Type报头域所引用的媒体类型,必须采用相应的解码机制。
③Content-Length
Content-Length实体报头用于指明实体正文的长度,以字节方式储存的十进制数字来表示。
④Last-Modified
Last-Modified实体报头用于指示资源的最后修改日期和时间。
常见的Content-Type:
3.3 空行
作用同上空行相同
3.4 响应(主)体(body)
响应体就是响应的消息体,如果是纯数据就是返回纯数据,如果请求的是HTML页面,那么返回的就是HTML代码,如果是JS就是JS代码。
4.HTTP协议与HTTPS协议的区别
HTTPS协议是以安全为目标的HTTP通道,其实就是HTTP的“升级”版本,只是它单纯的比HTTP协议更安全。
HTTPS的安全基础是SSL,即在HTTP下加入SSL层。也就是HTTPS通过安全传输机制进行数据传输,这种机制可保护网络传送的所有数据的隐秘性与完整性,可以降低非侵入性拦截攻击的可能性。
HTTP协议与HTTPS协议的主要区别如下:
- HTTP是超文本传输协议,信息是明文传输,HTTPS则是具有安全性的SSL加密传输协议。
- HTTP与HTTPS协议使用的是完全不同的连接方式,HTTP采用80端口连接,而HTTPS则是443端口。
- HTTPS协议需要到ca申请证书,一般免费的证书很少,需要交费,也有些web容器提供,如TOMCAT。而HTTP协议却不需要。
- HTTP连接相对简单,是无状态的,而HTTPS协议是由SSL+HTTP协议构建的课进行加密传输、身份认证的网络协议,相对来说,它要比HTTP协议更安全。