HTTP协议详细总结

目录

1.HTTP协议是什么?

2.什么叫做应用层协议

3.HTTP协议的工作流程

4.HTTP报文格式

请求报文:

响应报文:

5.URL

6.方法的认识

1.GET

2.POST

3.GET和POST的区别

4.其他方法

7.报头的认识

用户登陆过程:

8.状态码的认识

9.HTTPS

9.1HTTPS是什么?

9.2HTTPS的工作流程

9.2.1对称加密

9.2.2非对称加密

9.2.3引入证书


1.HTTP协议是什么?

HTTP全称为超文本传输协议,是建立在应用层的协议.什么叫做超文本呢?其实大概意思就是不仅能传输字符串数据,还可以传输图片啊,视频等信息.我们平时打开一个网页,就是通过http协议来传输数据的,当我们在浏览器输入一个搜索的网址(URL)的时候,就会给浏览器的服务器发送一个http请求,然后浏览器的服务器会返回多个http响应,这就是http请求的主要作用,现在很多网站都升级成https了,我们拿CSDN举个例子

 可以看到,CSDN已经升级成https协议了,具体为什么升级,是防止运营商劫持,如果感兴趣,可以百度一下

2.什么叫做应用层协议

所谓应用层协议,就是收发数据的两端锁遵守的协议,我们之前认识的TCP/IP协议是传输层和互联网层协议,是用来解决信息传输问题的,而应用层协议则是用来处理源端口和目的端口的一些细节的

3.HTTP协议的工作流程

我们用一张图,来理解一些http的工作流程,用csdn来举例子

 这里其实我们访问一个网站的时候呢,并不一定只会发送一个请求.但是http是典型的一问一答模型的,这里我们可以用fiddler来抓包查看一下,这里fiddler是一个免费的抓包,当然如果有其它的也可以用其他的,这里我们抓一个包看一下

这个是我们抓到的向搜狗发送的https请求,fiddle就可以进行抓包 ,拿到请求的详细信息,

这个是我们对一个https响应抓到,得到的信息 

4.HTTP报文格式

请求报文:

1第一行:方法,URL,版本号

2 请求头 header(每一行是一个键值对,通过:分隔键值)

3.空行

4.body

响应报文:

1.第一行:版本号,状态码,状态码的描述

2.响应头 header(每一行是一个键值对,通过:分隔键值)

3.空行

4.body

用一个图来理解,会更容易一些

 空行的意义:http报文格式是依赖于TCP协议的,所以可能出现粘包问题,那么我们用一个空行来作为结束标志,就可以避免粘包问题

5.URL

URL就是我们平常说的网址,学名叫统一资源定位符

 一个URL包含很多信息,我们来简单介绍即可

1.协议方案名:就是协议名,常见的有http,https

2.登录信息:就是那种需要登陆的网址对身份的认证,现在可能很少会有了

3.服务器地址:这里是一个域名,会通过DNS系统解析成为一个具体的IP地址,可以在我们的电脑cmd上进行ping + 网址,就可以得到真实的地址

可以看到,百度的地址就是[110.242.68.66]

4.端口号 标识了需要访问目标服务器的哪一个端口

5.带层次的额文件路径:服务器提供的资源,有可能在服务器中是一个真实的文件,但是也有可能是服务器中虚拟出来的文件,HTTP服务器一般不会吧所有电脑上的资源都提供到网上,通常会指定某个目录,把目录中的某些路径作为根路径,然后放到网上资源中

6.查询字符串:?后面的也是一些键值对,称为query string 相当于浏览器给服务器传递的一些参数

7.用来区分这个片段是当前页面的第几个部分,小说网站比较 常见

注意:

URL encode:在我们进行搜索的时候,会发现有的字符是我们在实现代码的时候使用到的,这样我们就无法区分哪些是客户端发来的数据,哪些是我们原本代码中的数据,这时候就需要用到URL encode来进行转义,把字符转换成别的字符,再在服务器端口使用URL decode,这里如果不进行转换的话,某些浏览器可能会自动转义,但是某些浏览器会不兼容,导致无法访问

6.方法的认识

在我们的HTTP请求中,有如上方法,我们简单介绍一些

1.GET

GET方法是我们HTTP请求中最常见的方法,主要作用是从服务器上获取某个资源,当我们在浏览器中输入URL的时候,这是浏览器就会发送一个GET请求

特点:

1.首行的第一部分是GET

2.URL的query string可以为空

3.header部分有一些键值对结构

4.body为空

注意:GET请求并没有长度限制

2.POST

POST也是较为常见的方法,通常用于提交用户的输入数据给服务器,比如登陆界面的账号密码信息

通过HTML中的from标签可以构造POST请求,或者JS中的ajax也可以用于构造POST请求

特点:

1.首行的第一部分为POST

2.query string一般不为空

3.header部分有一些键值对

4.body一般不为空,一般通过header中的Content-type来指定body中的数据类型,Content-length来指定body长度

3.GET和POST的区别

语义:GET的语义是获取数据,POST的语义是提交数据,但是两者可以颠倒

幂等性:GET请求一般建议幂等性,POST却没有就是通过同一个地址,访问到的结果是一样的,比如改密码了,再次用原密码登陆,就不会登陆成功,就会出现错误提示

安全性:二者并没有涉及到安全性,真正的安全是在于密码传输时是否加密

传输数据量:GET和POST两个并没有规定长度,传输的数据量完全取决于不同浏览器和服务器之间的实现区别

传输类型:GET的query string随人无法直接传输二进制数据,但是可以针对二进制数据进行URL encode

4.其他方法

PUT和POST相似,一般用于更新

DELETE用于删除服务器指定资源

OPTIONS 返回服务器所支持的请求方法

HEAD类似GET,但是响应体不返回,只返回响应头

TRACE会先服务器端收到的请求,一般测试会使用

CONNECT:预留位

7.报头的认识

header是键值对结构的,每个键值对独占一行

HOST:编制服务器主句的地址和端口

Content-Length:标识body的数据长度

Content-Type:标识body的数据类型

User-Agent:标识浏览器和操作系统的属性

Referer:标识当前页面的前置页面,也就是从哪个页面跳转过来的,前面说的运营商劫持也和这个有关系

Cookie:存储了一个字符串

通过浏览器可以看到当前持有的Cookie 这个一般存储到内存上,可以用于用户标识

用户登陆过程:

1.浏览器先给服务器发送一个获取登陆界面的请求

2.服务器做出响应,提供登陆页面的HTML

3.浏览器中,用户输入用户名和密码,并且发送请求

4.如果密码正确,服务器提供一个令牌给用户

5.用户拿着令牌去访问其他的页面,发出请求

6,服务器发出对应页面的HTML响应

8.状态码的认识

1.1xx

1xx是信息性状态码,标识请求正在处理

2.2xx

2xx是标识成功的状态码,标识请求正常处理完毕,比如200标识OK

3.3xx

3xx是重定向的状态码,平常见到的有301永久重定向和302临时重定向

4.4xx

4xx是客户端错误代码,比如403拒绝访问,也就是没权限访问某些页面,404没有找到资源,如果URL标识的资源不存在,那么就会出现404

5.5xx服务器错误代码,比如500表示服务器内部出现错误,也就是服务器崩溃,504,是表示服务器负荷过大了,就会504

9.HTTPS

9.1HTTPS是什么?

HTTPS是一个应用层的协议,是再HTTP的基础上面引入了加密层,防止像HTTP中传输的数据被篡改

9.2HTTPS的工作流程

9.2.1对称加密

对称加密就是通过一个"密钥",把明文加密成暗文,同样也可以反过来,把暗文变成明文

但是这种加密并不安全,当客户端向服务器发出获取密钥的请求之后,黑客在此时就监听劫持,就能得到密钥,从而破解密文,所以引入了非对称加密

9.2.2非对称加密

非对称加密通过使用两个密钥,公钥和私钥,公钥私钥是配对使用的,我们可以通过公钥加密,私钥解密,也可以反过来,私钥加密,公钥解密,这样私钥在服务器端,公钥是客户端发送请求,从服务器获取的,私钥并不会传输,公钥加密后,只能私钥解密,那么黑客就算劫持到了,也无法解密,这样的数据,就变得安全了,但是由于非对称加密需要的工作更多,导致速率和对称加密比较,就会慢了很多,所以在开始协商密钥的时候,也就是客户端请求获取公钥的时候,会用对称加密,这样就能提高一些速率.但是你以为这就结束了?并没有,如果黑客伪造一个公钥,发送给客户端,此时客户端并不知道是谁给的公钥,那么他就会直接加密并且发送过去,这是黑客就通过自己的私钥进行解密,然后把密文通过服务器端的公钥加密,发给送给服务器,这时,因为黑客是个中间人,那么就可以得到两边的传输数据,对此,我们引入了证书的概念

9.2.3引入证书

当我们客户端在刚和服务器创建链接的时候,服务器返回的数据捎带一个证书给客户端,这种证书是通过CA机构申请的一个证书,所以不用怕被伪造,然后后续客户端在收到响应的时候,就会去判断这个数据是否被篡改过,从而就使我们的数据安全了.建立连接返回的数据包括证书发布机构和有效期,还包括公钥,证书所有者签名等等

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
自己在做CTF过程中做的总结下面中实验室指的是网络安全实验室 题目全部来自bugku,南邮和网络安全实验室,题较基础,实验吧要复杂些 文中所有知识点内容并不全,要学习原理及深入得自己去找资源学习 看这个的时候,以做题为主 所有工具的使用,就做题,遇到要用什么学什么 先去DVWA中学习文件上传,文件包含,代码执行,命令执行,尽量亲手操作一遍,然后看前三个难度的源码,impossible难度的可以了解,网上有针对DVWA很详细的讲解 1.养成看源代码的习惯(简单) flag在源代码中(): 题目 firebug修改源码绕过本地验证(有视频) 题目 答案 CTF中源代码中一般有提示或者有敏感信息,建议养成看源代码的习惯 ctrl加F通用的搜索快捷键。 这个题真是全程看源代码,快捷方式:F12 题目 答案 2. http头(不难): burpsuite,浏览器代理设置教程抓了包后右键放到repeater里,点go可以进行发包测试,用完Burpsuite过后,要正常上网的话,要把代理关了。 浏览器插件改包的话,(有视频) 找flag:在请求头,响应头尝试实验室:key究竟在哪里呢? 302跳转的中转网页,burp抓包在HTTP history中找本应该访问的网站链接(为了方便寻找可以先clear一下历史),简单方法用firefox右键查看元素的查看网络中找到302跳转的网页,寻找flag(有视频) 南邮:单身一百年也没用 如果题目中遇到只能某某ip才能访问(ip伪造),修改或添加http请求头的X-Forwarded-For为题目允许的Ip地址,实验室:本地的诱惑 题目中说为了外国人的话:确保Accept-Language中有en-US 没有就自己加,如果说了只为了的话,就删掉其它的语言类型。(有视频) 实验室:种族歧视 只能用某种浏览器访问,直接修改user-agent为对应浏览器名字 实验室:HAHA浏览器 Cookie的修改 实验室:冒充登陆用户 Referer来源伪造 题目这个题好像坏了,可以去看下wp。 答案 最后来一个综合的题考察下你学的怎么样实验吧:头有点大 3. 文件包含(感觉必考) 利用: 读取敏感文件:如直接../../../../../etc/passwd来读取本地文件内容,其他敏感文件的读取是类似的 包含Apache日志文件(应该不会考) 远程包含shell 使用PHP封装协议读取文件和入PHP文件 配合文件上传漏洞: 文件包含建议理解并操作dvwa的前三个难度的这个漏洞 例题:1.看到url里有?file=xxx.php(文件名) 考虑php伪协议读取源码, 然后利用这一点,可以读取到你想获取的页面的源码例如: index.php,flag.php,login.php的源码,然后base64解密 url里?后面改成这个?file=php://filter/read=convert.base64-encode/resource=index.php 本句的意思是将Index.php的源码以base64加密后的形式读出来 南邮:文件包含 4.暴力破解:burpsuite暴力破解教程 bugku:输入密码查看flag 5. 文件上传(感觉必考) 例:只能传jpg等不能传php 查看网页源码,很清楚看到是前端JS控制的话,那么直接禁用 JavaScript就可以上传php文件了, 或者可以用burpsuite通过拦截数据包,修改filenmae后文件名后缀为php 1.jpg.php 1.php.jpg 1.php;.jpg 后缀名修改为php2, php3, php4, php5, phps, pht, phtm, phtml(php的别名) 抓包修改Content_Type里的multipart/form-data为Multipart/form-data(大小绕过) bugku:求getshell 上传过后通过显示的路径进行访问,或者右键文件属性里查找。 bugku:文件包含2 答案该题因为结合了上传,所以可以上传一句话木马,然后用菜刀连接 文件上传建议理解并操作dvwa的四个难度的这个漏洞

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值