转载于:https://blog.csdn.net/a15803617402/article/details/81503137

目录

一、HTTP 简介

1、HTTP三点注意事项:

2、URI和URL和URN

二、HTTP 消息结构

客户端请求消息:

服务器响应消息:

三、HTTP 报文解析

1、请求行:

2、响应行:

3、方法:

4、状态码:

5、首部

6、持久连接

四、Cookie机制

五、HTTPS

1、HTTPS是基于SSL的HTTP

2、公开密钥加密

3、HTTP采用混合加密机制

4、数字证书

5、SSL和TLS

六、认证机制

七、代理、网关、隧道

八、参考资料


一、HTTP 简介

HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。

1、HTTP三点注意事项:

HTTP是无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。

HTTP是媒体独立的:这意味着,只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过HTTP发送。客户端以及服务器指定使用适合的MIME-type内容类型。

HTTP是无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

2、URI和URL和URN

URI:统一资源标识符,用字符串标识某一互联网资源,而URL标识资源的地点(互联网上所处的位置),URL是URI的子集

  1. 常见的URI例子:
  2. http://www.baidu.com/index.html
  3. ftp://1.1.1.1/text.txt
  4. telnet://192.168.1.1
  5. 标准的URI协议有30种左右

URI格式:

URL:统一资源定位符,我们俗称为网址,网站URL,是资源标识符(URI)中最常见的形式,描述了一台特定服务器上某资源的特定位置。

demo:    网址为:http://www.baidu.com/index.html        WEB文件在D:/web/index.html

相对URL(相对路径): 相对路径:顾名思义就是自己相对与目标位置。

绝对URL(绝对路径):绝对路径:是指文件在硬盘上真正存在的路径。

URN:URI的第二种形式(统一资源名),URN是作为特定内容的唯一名称使用的,处于实验阶段,未推广使用。

总结:URI=URL+URN

二、HTTP 消息结构

客户端请求消息:

客户端发送一个HTTP请求到服务器的请求消息包括以下格式:请求行(request line)、请求头部(header)、空行和请求数据四个部分组成:

请求行:包含一个方法和一个请求URL,和HTTP的版本,这些字段都是由空格分割。

请求方法:客户端希望服务器对资源执行的动作。

协议版本:所使用的HTTP版本

HTTP抓包截图:

服务器响应消息:

HTTP响应也由四个部分组成,分别是:状态行、消息报头、空行和响应正文。

响应行:承载了状态信息和操作产生的结果数据,包含了响应报文使用的HTTP版本、数字状态码以及描述操作状态的文本形式的原因短语。

HTTP抓包截图:

三、HTTP 报文解析

1、请求行:

请求行包括了一个方法和一个请求URL,这个方法描述了服务器应执行的操作,请求URL描述了要对哪个资源执行这个方法,还包含HTTP的版本,用来告知服务器,客户端使用的是哪种HTTP。

2、响应行:

响应行包含了状态信息和操作产生的所有数据结果,将其返回给客户端。响应报文的起始行,称为响应行,包含了响应报文使用的HTTP版本、数字状态码,以及描述操作状态的文本形式的原因短语。

3、方法:

客户端希望服务器对资源执行的动作

GET:从服务器获取一份文档

HEAD:只从服务器获取文档得首部

POST:向服务器发送需要处理得数据

PUT:将请求的主体部分存储在服务器上

TRACE:对可能经过代理服务器传送到服务器上的报文进行追踪

OPTIONS:探测服务器支持哪些方法

DELETE:从服务器上删除一份文档

扩展方法:没有在http/1.1中定义的方法,称为webDAV HTTP扩展(由于扩展方法具有危险性,可以在服务器上添加、删除文件等,故一般站点不支持扩展方法)

COPY:用于在服务器上复制资源

MOVE:用于在服务器上移动资源

MKCOL:允许用户创建资源

LOCK:允许用户锁定资源

4、状态码:

告诉客户端,服务器发生了什么事情

100-101  信息提示

200-206  成功

300-305  重定向

400-415  客户端错误

500-505  服务器错误

HTTP状态码共有60多种,常见的状态码(请牢记):
200:表示从客户端发来的请求在服务器端被正常处理了。
201:一般用于PUT方法上传文件,表示文件创建成功。
301:永久重定向,表示请求的资源已分配信的URI,以后使用该URI代替现在请求的URI。这时应按照Location字段重新保存URI。
302:临时重定向,和301类似,但资源不是被永久移动,只是临时的。
401:表示该请求需要有HTTP认证的认证信息,首次接受到401响应,浏览器会弹出认证的对话窗口。
403:表示该请求的资源服务器拒绝了,一般是该资源设置了权限。
404:表示该请求资源在服务器上无法找到。
500:表示服务器端在执行请求时发生了错误。
503:表示当前服务器超负载正在进行停机维护,目前无法处理请求。

5、首部

请牢记常见的HTTP首部字段:

Accept:告诉服务器能够发送哪些媒体类型

Accept-Charset:告诉服务器能够发送哪些字符集

Accept-Encoding:告诉服务器能够发送哪些编码

Accept-Language:告诉服务器可以发送哪些语言

Accept-Ranges:对此资源来说,服务器可接受的范围类型

Authorization:包含客户端提供给服务器的认证数据,用于401中

Cookie:用户身份会话令牌,用于服务器标识客户端身份,因为HTTP是无状态的协议,需要引入cookie机制来进行有状态管理

Age:响应持续时间

Server:服务器应用程序的名称和版本

Set-Cookie:服务器返回给客户端的会话标识

Content-Length:主体的大小

Content-Type:主体的对象类型

Date:创建报文的时间

Host:请求资源所在的服务器

User-Agent:HTTP客户端程序的信息

Location:令客户端重定向到指定URL

Allow:资源可支持的HTTP方法

6、持久连接

在事物处理结束后仍然保持打开状态的TCP连接被称为持久连接,可以加快速度传输,不同在重新TCP握手了。

HTTP/1.1默认情况下是持久连接的,要关闭持久连接,需要在HTTP报文中加入Connection:close首部。

四、Cookie机制

由于HTTP是匿名、无状态的请求/响应协议,服务器处理客户端的请求,然后向客户端回送一条响应,但服务器无法通过协议判定是哪个用户发送的请求,也无法记录用户的请求序列。

1、有关用户相关信息的HTTP首部(请牢记):

From:用户的邮件地址

User-Agent:用户的浏览器信息

Referer:用户是从哪个页面跳转过来的

Authorization:用户名和密码认证

Client-IP:客户端的IP

X-Forwarded-For:客户端的IP

Cookie:服务器产生的会话令牌

可以看到,除了用Cookie首部,其他首部都无法有效的标识一个具体的用户(都可以伪造)。

Cookie分为两种:会话Cookie持久Cookie

会话Cookie:是临时Cookie,记录在浏览器内存中,关闭浏览器,内存中的Cookie就删除了(但服务器端的对应Cookie还存在)

持久Cookie:存储在硬盘上,浏览器退出再打开依然存在,通过设置过期时间来进行控制

五、HTTPS

因为HTTP通信使用明文,可能会造成窃听以及篡改,且无法识别客户端与服务器身份,正是由于这些不安全的因素导致HTTPS产生。

HTTP+加密+认证+完整性保护=HTTPS

1、HTTPS是基于SSL的HTTP

HTTPS并非是应用层的一种新协议,只是HTTP通信接口部分用SSL和TLS协议替代而已。通常,HTTP直接与TCP通信,当使用SSL时,则变成先和SSL通信,再由SSL和TCP通信。在采用了SSL后,HTTP就拥有了HTTPS的加密证书和完整性保护功能。

SSL是独立于HTTP的协议,其他运行在应用层的SMTP和TELNET等协议都可配合该协议进行使用,是目前当前世界上应用最为广泛的网络安全技术。

2、公开密钥加密

近代加密方法中加密算法是公开的,而密钥是保密的,加密和解密都需要用到密钥,这样用同一个密钥的方式叫做对称密钥加密,那在互联网上发送密钥有被窃听的风险,但不发送密钥,对方不能解密。

公开密钥(非对称加密)加密方式很好的解决了对称加密的困难,公开密钥加密使用一对非对称的密钥,一把叫做私有密钥,一把叫做公开密钥,私有密钥自己保存,不能泄露,公开密钥任何人都可获得。

原理:发送密文的一方使用对方的公开密钥进行加密处理,对方收到被加密的信息后,在使用自己的私有密钥进行解密,利用这种方式,不再需要发送用来解密的私有密钥,不必担心被窃听。

3、HTTP采用混合加密机制

HTTPS采用共享密钥加密和公开密钥加密两者混合并用的混合加密机制。若密钥能够实现安全交换,那么就可考虑只使用公开密钥加密来通信,但公开密钥加密与共享加密相比,其处理速度较慢。

4、数字证书

如何证明收到的公开密钥是正真的服务器发行的公开密钥呢?为了解决这个问题,使用由数字证书认证机构(CA)颁发的公开密钥证书。数字证书认证机构处于客户端与服务器端双方都可信赖的第三方机构的历程。

首先服务器的运营人员向数字证书认证机构提出公开密钥的申请,数字证书认证机构在判明提出的申请者的身份后,会对已被申请的公开密钥做数字签名,然后分配这个已知的公开密钥,并将该公开密钥放入公钥证书后绑定在一起。服务器会将这份证书由数字认证机构颁发的公钥证书发送给客户都,进行公开密钥加密方式通信。接收到证书的客户端可使用数字证书认证机构的公开密钥,对那张证书上的数字签名进行验证,一旦通过验证,客户端便可明确服务器身份。(多数浏览器厂商会内置常用的公开密钥)

5、SSL和TLS

SSL技术最初由网景通信公司提倡,开发过SSL3.0之前的版本,目前已转移到IETE的手中,IETR以SSL3.0为基础,又制定了TLS1.0、1.1、1.2。TSL是以SSL为原型开发的协议,所以统一称为SSL协议。当前主流的版本是SSL3.0和TLS1.0。

六、认证机制

某些 Web 页面只想让特定的人浏览,或者干脆仅本人可见。为达到这个目标,必不可少的就是认证功能。

HTTP 使用的认证方式:
BASIC 认证(基本认证)
DIGEST 认证(摘要认证)
SSL 客户端认证
FormBase 认证(基于表单认证)
此外,还有 Windows 统一认证(Keberos 认证、NTLM 认证)

BASIC 认证

HTTP基本认证将用户名和密码打包在一起,并用Base-64编码方式进行编码,BASIC 认证虽然采用 Base64 编码方式,但这不是加密处理。不需要任何附加信息即可对其解码。换言之,由于明文解码后就是用户 ID和密码,在 HTTP 等非加密通信的线路上进行 BASIC 认证的过程中,如果被人窃听,被盗的可能性极高。

七、代理、网关、隧道

HTTP通信时,除客户端和服务器外,还有一些用于通信数据转发的应用程序,例如代理、网关和隧道,它们可以配合服务器一起工作。

代理:是一种具有转发功能的应用程序,它扮演了位于服务器和客户端“中间人”角色,接受客户端发送的请求并转发给服务器,同时也接受服务器返回的响应并转发给客户端,如我们常说代理IP上网。
使用代理服务器的理由有:利用缓存技术减少网络带宽的流量,进行上网访问控制,获取访问的日志等。

网关:也是转发其他服务器通信数据的服务器,接受从客户端发送来的请求时,它就像自己是服务器一样对请求进行处理,有时客户端不会查觉自己的通信目标是个网关。但是网关可以使通信线路上的服务器提供非HTTP协议服务,利用网关可以提高安全性,因为可以在客户端与网关之间的通信线路上加密保证数据安全,比如网关可以连接数据库,使用SQL语句查询数据。

隧道:是在相隔较远的客户端和服务器两者之间进行中转,并保持双方通信连接的应用程序,隧道本身不会解析HTTP请求。

缓存:指代理服务器或客户端本地磁盘内保存的资源副本,利用缓存技术可减少对源服务器的访问,因此也就节省了通信流量和通信时间,缓存服务器是代理服务器的一种,并归类在缓存代理类型中,如目前流行的CDN技术。

八、参考资料

请务必阅读并理解《图解HTTP》这本书,如果看完了想深入了解请参考《HTTP权威指南》这本书。该两本书脚本之家提供下载。

【3】WEB安全学习----HTTP协议相关推荐

  1. web安全学习—Http协议基础

    今天在安全龙网站上听老师讲了Http协议基础,有的东西不是一遍就可以记住的,就先记录一下,方便以后自己看(截图都是转载于安全龙网站). 1.超文本 包含有超链接(link)和各种多媒体元素标记(Mar ...

  2. Web安全学习思维导图,[web入门菜鸡萌新必备]

    写在前面,自制了一个web安全学习的思维导图,写的并不是很全面,自己本身其实也是个弟弟, 总结了一些师傅们的资源,希望大家给予一定的建议和提升的空间,另外也给萌新一个思路吧~ 下面是大纲,可以参考内容 ...

  3. Web Service学习笔记

    Web Service概述 Web Service的定义 W3C组织对其的定义例如以下,它是一个软件系统,为了支持跨网络的机器间相互操作交互而设计.Web Service服务通常被定义为一组模块化的A ...

  4. web后端语言_web前端学习路线图_快速入门web前端学习路线图

    如何学好Web前端开发技术?前端学习路线是什么?如今,移动开发的发展依旧如火如荼,企业对于Web前端人才需求产生了巨大的缺口,从事Web前端开发的程序员们则是其中较大的获益者.Web前端的广泛运用,造 ...

  5. 文件上传漏洞---Web渗透学习

    文件上传本身是一个系统的正常需求,但是由于开发人员在开发时欠缺相关的安全知识,在对用户文件上传部分的控制不足或者缺陷,而导致用户越过其本身权限向服务器上传可执行的动态脚本文件. 这里上传的文件可以是木 ...

  6. 禁欲28天!一宅男居然肝出如此详细Web安全学习笔记,学妹看完直接抽搐了!(第二弹)

    2.1. 网络基础 2.1.1. 计算机通信网的组成 计算机网络由通信子网和资源子网组成.其中通信子网负责数据的无差错和有序传递,其处理功能包括差错控制.流量控制.路由选择.网络互连等. 其中资源子网 ...

  7. 给你一份完整的Web前端学习路线图

    随着Web2.0思想的日益普及,让企业都慢慢认识到前端的重要性.前端开发人员的地位也日益提高,相应的技术要求要是越来越高,那么现在想成为一名合格的Web前端工程师应该怎样学习呢 Web前端学习路线图, ...

  8. Regeorg 从python2改造为python3-从实战中学习socks5协议

    Regeorg 从python2改造为python3-从实战中学习socks5协议 问题描述 解决过程 环境准备 过程 这两天没啥工作,一般这时候我都不会发挥自己的主观能动性去主动找活,于是乎只能上网 ...

  9. Web前端学习之正向代理与反向代理

    Web前端入门简单.精通不易,其中涉及很多知识点.初学Web前端不仅需要了解前端三要素(HTML.CSS.JavaScript或jQuery),还需要掌握一些不常用的知识点.有很多同学对正向代理与反向 ...

最新文章

  1. 程序员过年最怕问到什么?
  2. 扩增子分析流程QIIME. 1 使用Docker配置QIIME
  3. hc05与单片机连接图_基于proteus的51单片机开发实例(13)-LED指示那个按键被按下
  4. 工厂设计模式–一种有效的方法
  5. Ubuntu18.04 安装搜狗输入法后无法启动的问题
  6. Privoxy安装及配置
  7. lua调用c 模块linux,Lua 调用自定义C模块
  8. (07)Verilog HDL组合逻辑:assign
  9. Linux进度条的实现
  10. C/C++中break、return、continue和goto在循环语句中的使用
  11. Android6.0动态权限
  12. 大学c语言python_C语言和Python爬虫哪个好?老男孩IT教育
  13. 通过 Socket 实现 TCP 编程入门
  14. UVALive - 5857 Captain Q's Treasure
  15. Android单元测试 - 如何开始?
  16. 电路板上各种标志的含义
  17. 常用 25/26 Flash 系列器件型号、ID、容量对照表
  18. java 微服务 dubbo_Dubbo Spring Cloud 重塑微服务治理
  19. Pytorch中的model.modules()和model.children()的区别
  20. 前端实战小案例--canvas实战之FlappyBird小游戏

热门文章

  1. 使用sklearn进行增量学习
  2. spreadsheet属性方法事件
  3. TP 全系列调试通用参考说明
  4. 这是我见过最通俗易懂的MES与ERP介绍文章,带你剖析工业4.0!
  5. 计算相似度的LLR算法
  6. 解决 Macbook 连接蓝牙鼠标卡顿问题
  7. 【iis】解决:Could not load type ‘System.ServiceModel.Activation.HttpModule‘ from assemb
  8. 近期抖音刷播放量怎么刷、抖音刷播放量苹果突然走火如何防止刷量呢?
  9. Java使用Netty实现Modbus-RTU通信协议
  10. 硬实时RTLinux安装配置详解 (一):准备工作