目录结构
一、HTTP概述
1. HTTP简介
2. 超文本
3. URL
4. HTTP功能
二、HTTP功能与特点
1. HTTP特点
2. HTTP与HTTPS
3. HTTP与TCP/IP的区别
三、HTTP请求
1. HTTP请求过程
2. HTTP请求方法(Request Method)
3. HTTP请求头与请求URL(Request Headers/Request URL)
4. 请求体(Request Body)
四、HTTP响应
1. Response Status Code
2. Response Headers
3. Response Body
一、HTTP概述
1. HTTP简介
超文本传输协议:(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议,所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。HTTP协议在网络OSl模型中属于应用层协议,应用层协议除了HTTP还有:FTP/SMTP/DNS/RIP/Telnet等。
HTTP协议工作于"客户端-服务端"架构上。浏览器作为HTTP客户端通过URL向HTTP服务端(Web服务器)发送请求。
2. 超文本
超文本:(Hypertext)在浏览器里面看到的网页就是超文本解析而成的,其网页源代码是一系列HTML代码,里面包含了一系列标签(如:img显示图片、p指定显示段落)。浏览器解析这些标签后便形成了平常看到的网页,而这网页的源代码HTML就可以称作超文本。
例如在Chrome浏览器里面打开如百度页面,右键点击“查看源代码”,这些源代码都是超文本。
3. URL
在浏览器的地址栏里输入的网址即URL(Uniform Resource Locator,统一资源定位器)。就像每家每户都有一个门牌地址一样,每个网页也都有一个Internet地址(如:http://www.baidu.com),当你在浏览器的地址框中输入一个URL或是单击一个超链接时,URL就确定了要浏览的地址。浏览器通过超文本传输协议(HTTP),将Web服务器上站点的网页代码提取出来,并翻译成漂亮的网页。
4. HTTP功能
HTTP协议(HyperText Transfer Protocol,超文本传输协议)是用于从服务器传输超文本到本地浏览器的传输协议。它可以使浏览器更加高效,使网络传输减少。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图片)。
二、HTTP功能与特点
1. HTTP特点
1)无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
2)媒体独立:意味着只要客户端和服务器知道如何处理数据内容,任何类型的数据都可以通过HTTP发送。客户端以及服务器指定使用适合的MIME-type 来传输。详见:MIME参考手册
3)无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。如果服务器不需要先前信息,那么它的应答就比较快。但是缺少状态意味看如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大,此时可以设置缓存。
2. HTTP与HTTPS
在浏览网站时,可以看到有的网站是https开头(如:https://www.baidu.com/),有的是http开头(如:http://www.weather.com)。
HTTPS(Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入SSL层(Secure Sockets Layer,安全套接层),简称为HTTPS。s即Security单词的首字母。
HTTPS的安全基础是SSL,因此通过它传输的内容都是经过SSL加密的,它的主要作用为:
1)是建立一个信息安全通道,保证数据传输的安全。
2)确认网站的真实性。凡是使用了https的网站,都可以通过点击浏览器地址栏的锁头标志来查看网站认证之后的真实信息,也可以通过CA机构颁发的安全签章来查询。
现在越来越多的网站和APP都已经向HTTPS方向发展。例如:谷歌从2017年1月推出的Chrome56开始,对未进行HTTPS加密的网址链接亮出风险提示,即在地址栏的显著位置提醒用户“此网页不安全”。
3. HTTP与TCP/IP的区别
TCP/IP是传输层协议,主要解决数据如何在网络中传输(“搬运”);而HTTP是应用层协议,主要解决如何包装数据(“装配”)。
关于TCP/IP和HTTP协议的关系,网络有一段比较容易理解的介绍:“我们在传输数据时,可以只使用(传输层)TCP/IP协议,但是那样的话,如果没有应用层,便无法识别数据内容,如果想要使传输的数据有意义,则必须使用到应用层协议,应用层协议有很多,比如HTTP、FTP、TELNET等,也可以自己定义应用层协议。
WEB使用HTTP协议作应用层协议,以封装HTTP文本信息,然后使用TCP/IP做传输层协议将它发到网络上。”
三、HTTP请求
1. HTTP请求过程
我们在浏览器输入百度首页的地址:https://www.baidu.com/,回车访问之后浏览器会给我们打开百度首页。实际上这个过程是浏览器向网站所在的服务器发送了1个Request(请求),网站服务器接收到这个Request之后进行处理和解析,然后返回对应的1个Response(响应),然后传回给浏览器,Response里面就包含了页面的源代码等内容,浏览器再对其进行解析便将网页呈现了出来。
2. HTTP请求方法
Request:请求。
由客户端向服务端发出,Request分为4个部分组成:
- Request Method(请求方式)
- Request URL(请求链接)
- Request Headers(请求头)
- Request Body(请求体)
Request Method
请求方式。常见的有2种类型:GET和POST。
1)GET用于信息获取,操作不会修改服务器资源状态,且每次执行操作都返回同样的结果。从发送请求的角度,GET请求相当于我们在数据库中做了查询的操作,不影响数据库本身的数据。
2)POST表示可能会修改服务器上资源的请求,也相当于在数据库中做了修改的操作,会影响数据库本身的数据(如:注册、发帖、评论、得到积分,此时服务器资源状态发生了改变)。
案例1:GET请求
DVWA系统-->SQL Injection模块-->User Id输入框,输入数字1并提交,实现查询Id=1的用户信息。对应的url为(http://localhost/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#),url中包含了请求的参数信息(id,submit),在浏览器里利用F12可查看Headrs中Query String Parameters位置包含的就是请求的参数及参数值。发起1次GET请求时,参数会以url string的形式进行传递,问号?
后的字符串即为其请求的参数,并以&
作为参数之间的连接符。
案例2:POST请求
网站登录验证的时候,需要提交用户名和密码(敏感信息),若以GET方式发送请求,密码就会暴露在URL里面,可能造成密码泄露,此时最好以POST方式发送。
如登录DVWA系统,对应url为(http://localhost/dvwa/login.php),此时以POST请求方式,用户名、密码等参数并没有在url中传递,而是在Form Data中传递。
PS:以上GET请求、POST请求的方式,并非绝对只能按照常规的方式进行操作;若从非常规or安全角度测试,利用抓包拦截工具绕过浏览器客户端直接向服务器发送请求,亦可改变请求的规则,只要服务器能接纳并处理所设置的规则,即可检查测试效果。
3. HTTP请求头与请求URL
除了常规的GET、POST请求,还有其他请求方式,如HEAD、PUT、DELETE等,具体如下:
请求方法 | 适用场景 |
---|---|
GET | 请求指定的页面信息,并返回实体主体 |
POST | 向指定资源提交数据进行处理请求,数据被包含在请求体中 |
PUT | 从客户端向服务器传送的数据取代指定的文档的内容 |
PATCH | 对PUT方法的补充,用来对已知资源进行局部更新 |
DELETE | 请求服务器删除指定的页面 |
HEAD | 类似于GET请求,只不过返回的响应中没有具体的内容,用于获取报头 |
CONNECT | HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器 |
OPTIONS | 允许客户端查看服务器的性能 |
TRACE | 回显服务器收到的请求,主要用于测试or诊断 |
Request URL
Request URL就是请求的网址,即统一资源定位符,用URL可以唯一确定所请求的资源。如:https://www.baidu.com/
Request Headers
请求头,用来说明服务器要使用的附加信息,比较重要的信息有Cookie、Referer、User-Agent等,常用的头信息说明如下:
名称 | 含义 |
---|---|
Accept | 请求报头域,用于指定客户端可接受哪些类型的信息 |
Accept-Encoding | 指定客户端可接受的内容编码 |
Accept-Language | 指定客户端可接受的语言类型 |
Cache-Control | 控制网页的缓存,阻止缓存对请求or响应造成不利干扰的行为 |
Connection | 决定当前的事务完成后,是否会关闭网络连接。如果该值是“keep-alive”,网络连接就是持久的,不会关闭,使得对同一个服务器的请求可以继续在该连接上完成 |
Content-Length | 是一个实体消息首部,用来指明发送给接收方的消息主体的大小,即用十进制数字表示的八位元组的数目 |
Content-Type | 即Internet Media Type,互联网媒体类型,也叫做MIME类型,在HTTP协议头中,使用它来表示具体请求中的媒体类型信息 |
Cookie | 网站为了辨别用户进行Session 跟踪而储存在用户本地的数据,主要用以维持当前访问的会话状态 |
Host | 用于指定请求资源的主机IP和端口号,其内容为请求URL的原始服务器or网关的位置。从HTTP1.1版本开始,Request必须包含此内容 |
Origin | 指示了请求来自于哪个站点。该字段仅指示服务器名称,并不包含任何路径信息。该首部用于 CORS 请求或 POST 请求。除了不包含路径信息,该字段与 Referer 字段相似 |
Referer | 此内容用来标识这个请求是从哪个页面发过来的,服务器可以拿到这一信息并做相应的处理,如:来源统计、防盗链处理等 |
Upgrade-Insecure-Request | 用来向服务器端发送信号,表示客户端优先选择加密及带有身份验证的响应,并且它可以成功处理 upgrade-insecure-requests CSP 指令 |
User-Agent | 简称UA,它是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本、浏览器及版本等信息。在做爬虫时加上此信息可以伪装为浏览器,如果不加很可能会被识别出为爬虫而被限制操作 |
4. 请求体
Request Body
请求体,一般用于POST请求中,主要定义向服务器提交的数据类型,而对于GET 请求Request Body则为空。
比如在登录之前填写了用户名和密码信息,提交时就这些内容就会以Form-Data的形式提交给服务器,此时Request Headers 中指定了Content-Type为applicatidb/x-wu-form-urlencoded,才会以Form-Data形式提交。另外也可将Content-Type设置为application/json来提交Json数据,or设置为multipart/form-data来上传文件。
常用Content-Type和POST提交数据方式的关系:
Content-Type | 提交数据方式 |
---|---|
application/x-www-form-urlencoded | Form表单提交 |
multipart/form-data | 表单文件上传提交 |
application/json | 序列化Json数据提交 |
text/xml | XML数据提交 |
multipart/form-data与x-www-form-urlencoded区别
1)multipart/form-data:既可以上传文件等二进制数据,也可以上传表单键值对,只是最后会转化为一条信息
2)x-www-form-urlencoded:只能上传键值对,并且键值对都是间隔分开的
3)"application/x-www-form-urlencoded",是默认的MIME内容编码类型,一般可以用于所有的情况。但在传输比较大的二进制or文本数据时效率极低,此时应该使用"multipart/form-data",如上传文件or二进制数据和非ASCII数据
四、HTTP响应
Response:响应,由服务端返回给客户端。Response由3部分组成:
- Response Status Code
- Response Headers
- Response Body
1. Response Status Code
响应状态码,表示服务器的响应状态,如200则代表服务器正常响应,404代表页面未找到,500代表服务器内部发生错误。常用响应状态码如下:
状态码 | 说明 | 详情 |
---|---|---|
200 | 成功 | 服务器已成功处理了请求 |
201 | 已创建 | 请求成功并目服务器创建了新的资源 |
301 | 永久移动 | 请求的网页已永移动到新位置,即永久重定向 |
302 | 临时移动 | 请求的网页暂时跳转到其他页面,即暂时重定向 |
400 | 错误请求 | 服务器无法解析该请求 |
401 | 未授权 | 请求没有进行身份验证或验证未通过 |
403 | 禁止访问 | 服务器拒绝此请求 |
404 | 未找到 | 服务器找不到请求的网页 |
405 | 不允许 | 请求行中指定的请求方法不能被用于请求相应的资源 |
500 | 服务器内部错误 | 服务器遇到错误,无法完成请求 |
501 | 未实现 | 服务器不具备完成请求的功能 |
502 | 错误网关 | 服务器作为网关或代理,从上游服务器收到无效响应 |
2. Response Headers
响应头,其中包含了服务器对请求的应答信息,如Content-Type、Server、Set-Cookie等,常用的头信息如下:
名称 | 含义 |
---|---|
Date | 标识Response产生的时间 |
Last-Modified | 指定资源的最后修改时间 |
Content-Encoding | 指定Response内容的编码 |
Server | 包含了服务器的信息,名称,版本号等 |
content-Type | 文档类型,指定了返回的数据类型是什么,如text/html代表返回HTML文档,application/x-javascript代表返回JavaScript文件,image/jpeg代表返回图片 |
set-cookie | 设置Cookie,Response Headers 中的 Set-Cookie即告诉浏览器需要将此内容放在Cookies中,下次请求时携带在Cookies内容中 |
Expires | 指定Response的过期时间,用以控制代理服务器or浏览器将内容更新到缓存中。如再次访问时,直接从缓存中加载,降低服务器负载,缩短加载时间 |
3. Response Body
响应体,响应的正文数据都是在响应体中。如:请求一个网页,它的响应体就是网页的HTML代码;请求一张图片,它的响应体就是图片的二进制数据;一般在接口的响应内容大多都是Json数据内容。
参考资料:
[1] Web技术文档-HTTP
[2] HTTP状态码详解
网友评论