HTTP(S)协议基础

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HTTP(S)协议基础相关的知识,希望对你有一定的参考价值。

参考技术A URL:统一资源定位符,表明所请求资源的位置和请求方法
格式: schema://host[:port#]/path/.../[?query-string][#anchor]
含义:底层协议://服务器域名或IP[:端口#]/路径/.../[发送给服务器的数据][锚]
其中域名结构为:[子域名].[域名].[根域名]

HTTP:超文本传输协议,基于请求和响应模式,是一种是无状态的应用层协议,下一次请求与上一次请求无关
HTTP请求报文组成:请求行(请求方法)、请求头(消息报头)、请求正文。请求头后面以空白行代表请求头结束
HTTP响应报文组成:响应行、响应头、响应正文。响应头后面以空白行代表响应头结束
请求报文的第一行为请求行,格式通常为:请求方法/所请求资源的路径/HTTP协议版本

如:GE/index.php HTTP/1.1

GET(直接在url显示):请求获取由Request-URL所标识的资源
POST(登录时较多):在Request-URL所标识的资源后附加新的数据
HEAD:请求获取由Request-URL所标识的资源的响应消息报头
OPTIONS:请求查询服务器的性能,或查询与资源相关的选项和需求
PUT:请求服务器存储一个资源,并用Request-URL作为其标识
DELETE:请求服务器删除由Request-URL所标识的资源
TRACE:请求服务器回送收到的请求信息,主要用于测试或诊断
CONNECT:要求用隧道协议连接代理

日常绝大多数请求方法为GET或POST,但是对其他请求方法也要了解
请求行和空白行之间的全部属于请求头的内容,请求头的参数在不同场景不尽相同,我们抓个完整的数据包分析

Host:指定请求的主机地址和端口号
User-Agent:用户代理,简称 UA,它是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本、CPU 类型、浏览器及 版本、浏览器渲染引擎、浏览器语言、浏览器插件等
Accept:代表客户端希望接受的数据类型
Accept-Language:指定一种客户端希望接受的自然语言
Content-Type:向接受端表明发送的介质类型
Content-Length:用于描述HTTP消息实体的传输长度
Referer:包含一个URL,告诉服务器该请求的来源,可用来判断来源的合法性,防止盗链和CSRF
Cookie:一段文本,表示请求者身份。Cookie 重要字段:名称[name]值[value]所属域名[domain]所属相对根路径[path]过期时间[expires][http-only][secure]。若没设置cookie过期时间则为内存Cookie :浏览器关闭而消失;本地Cookie :保存在本地;部分cookie具有httponly属性,目的是阻止客户端脚本访问Cookie,防止XSS攻击
Connection:当前链接是否保持

初此之外还有其他重要参数
X-Forward-for:XFF头,代表请求端的IP,可以有多个,以逗号隔开,用来识别通过HTTP代理或负载均衡方式连接到Web服务器的客户端最原始的IP地址的HTTP请求头字段

第一行为响应行,表明了HTTP协议版本和服务器响应状态
状态码第一个数字定义响应的类别,后两个数字没有分类的作用。第一个数字可能取5个不同的值:
1xx:信息响应类,表示接收到请求并且继续处理
2xx:处理成功响应类,表示动作被成功接收、理解和接受
3xx:重定向响应类,为了完成指定的动作,必须接受进一步处理
4xx:客户端错误,客户请求包含语法错误或者是不能正确执行
5xx:服务端错误,服务器不能正确执行一个正确的请求

server:包含了服务器用来处理请求的软件信息及其版本
Set-Cookie:向本地保存cookie

下面使用telnet模拟http
先编写请求报文
GET(POST或HEAD) / HTTP/1.1
HOST:www.baidu.com

DOS命令窗口执行:telnet www.baidu.com 80
按下ctrl + ]
然后回车
粘贴我们编写好的请求报文
连续两次回车

可以看到成功获取到了响应报文信息,还可以将GET方法改为POST或HEAD,这里不再赘述,大家自行尝试

HTTPS协议是比HTTP更为安全的一种协议,这种关系可以比喻为telnet和ssh,HTTP和telnet的数据都是明文进行传输的,例如我们上面抓取的登录DVWA的数据包,用户名和密码都是明文的,而HTTPS和ssh都是加密传输的。HTTPS是在传输层和应用层之间加了一层SSL,所有的信息都会进行加密传输,并且在数据开始传输之前要互相进行身份认证。SSL是通过证书来验证服务器的身份的,因此HTTPS需要申请CA证书,一般是需要付费的

机密性:SSL协议使用密钥加密通信数据
可靠性:服务器和客户都会被认证,客户的认证是可选的
完整性:SSL协议会对传送的数据进行完整性检查

以上是关于HTTP(S)协议基础的主要内容,如果未能解决你的问题,请参考以下文章

web工作原理及http协议(基础篇)

HTTP 基础

Web服务基础

不惧面试:HTTP协议 - 基础扫盲

100道Java基础面试题

100道Java基础面试题收集整理(附答案)