HTTP协议深入解析

1、HTTP协议(超文本传输协议)(应用层)HTTP协议是无状态的协议,有长连接和短连接的用法

(1)文本:字符串(能在utf8/gdk等码表上找到合法字符)

(2) 超文本:不仅仅是字符串,还可以携带一些图片,特殊的格式啥的

(3)HTTP在3.0之前在传输层基于TCP,到了3.0这个版本基于UDP,因为UDP的传输效率更高,我们也可以基于UDP实现一些更复杂的机制来确保他的可靠性

2、HTTP协议最主要的应用场景就是网站,浏览器和服务器之间传输数据,客户端(手机,PC)和服务器之间的数据传输,也可能是HTTP

3、HTTP协议的交互过程是典型的“一问一答”,交互过程一般需要很多次

4、我们需要安装fiddler抓包工具(去官网一路NEXT就可以,不会安装可以私信我),只要是有程序应用到HTTP/HTTPS我们的fiddler就报进行抓包

(1)这就是我们抓到的数据包

(2)蓝色的表示返回的是一个html,往往是访问一个网站的入口请求

(3)点开,我们的右上角就是请求的明细,右下角是响应明细

(4)我们点击这个Raw,是显示我们HTTP请求的原始数据,更方便我们观察

(5)字太小看不清我们可以点击View in Notepad 在我们的记事本中打开

(6)我们的响应数据打开之后乱码是因为我们的响应数据是被压缩了,为了节省带宽,响应体积比较大,我们需要解压缩,这个过程需要消耗时间和cpu,点击这里可以解压缩(响应数据就是网站的网页HTML)

5、HTTP请求包含了4个部分

(1)首行

(2)请求头

(3)空行(请求头最下面会有一个空行,这个空行就可以表示结束标记)

(4)正文(body)HTTP的载荷部分,有的HTTP有body,有的没有

6、HTTP响应的基本格式

(1)首行

(2)响应头

(3)空行

(4)响应正文(body) 载荷

7、URL描述一个网络上资源的位置,唯一资源定位符。URI唯一资源标识符,严格地说,URI比URL的范围更广一些

(1)目前登录信息不显示出来了,不安全

(2)现在需要单独界面来完成,如果URL中不带端口号,浏览器会自动给一个默认的端口(服务器端口,不是客户端的端口,此处应用啥端口取决于协议,例:HTTP:80,HTTPS:443)

(3)通过ip地址知道服务器在哪,通过端口知道程序是哪个,通过路径知道访问的是哪个资源

(4)UID查询字符串,针对请求内容做的补充说明,是客户端给服务器传递信息的重要途径,这里的键值对内容是程序员自定义的

综合上述IP地址,端口号,路径,查询字符串,就可以描述出一个网络资源了

(5)ch1片段标识符:用来标识当前页面的某个部分,通过不同的片段表示可以完成页面内的跳转

8、URL encode:query string里自定义的键值对,在URL中可能有些特殊字符有特定的含义例如:/ : ?和汉字的utf8/gdk等编码值其中可能某个字节就恰好和某个符号的ascii码一致,再URL中有中文的时候务必要进行编码,我们针对这些特定的符号我们进行”转义”,转义的方法可以用16进制标识之后在前面加上%,例:%E8%9B%8B

9、方法(get,post应用的多,其他应用较少)

   我们在写代码的时候完全可以不用他这种方法这样写,这些只是一种约定,可以按约定也可以不按约定,我们可以把post给写成获取资源,都没问题(使用习惯上,GET通常没有body,post通常由body),GET会把需要的服务器的补充信息放到query string中(url中),post会把这些信息放到body中(post更多的应用在登录和上传上)

10、我们的密码抓包时候都会进行加密,可能用md5(16进制数字)base64编码(一般带有小尾巴的比如==,这种使用四个字节对原始数据中的三个字节进行重新编码,目的为了去掉二进制内容,这个base64编码格式我们也可以自己进行约定)

11、GET和POST的区别

12、Host:表示服务器主机的地址和端口,这个host和URL中的ip地址和端口啥的绝大部分都是一样的,少数部分是不一样的,如果我们想通过某个代理来转发,url就放的时代理的,我们的host里面放的是最终的

13、Content-Length 表示body中的数据长度(为了处理粘包问题,我们传输多个HTTP数据报的时候,此是接受方这边的接收缓冲区里就会积累多个包的数据,应用程序在读取这些数据时候就要有明确的长度来区分它们)

14、Content-Type:表示请求的body中的数据格式,后面也可能附带编码方式来确定有没有设置或者设置的对不对

15、User-Agent(简称UA):操作系统信息和浏览器信息(这是为了在我们开发中防止对方版本过低我们的最新数据显示不出,对方版本过高我们的版本较低现实的内容不够好等问题)可以判断时PC端还是手机端

16、Referer:描述了当前这个页面是哪里来的(浏览器中直接输入url/点击收藏加大开的网页是没Referer的)服务器可以记录日志,统计是从哪里点寄过来的,可以统计收取相应广告费(他有可能让其他人更改我们路由器的Referer,导致我们的日志记录有误,广告费被别人盗取)

17、HTTPS(侧重于不能被篡改,而不是被能被解密)就不会出现上述Referer中被盗取的问题,因为HTTPS中有SSL(网络中用于加密的协议)上述被盗取是因为当时用的时HTTP没有这个加密功能

18、Cookie(类似我们的就诊卡保存了我们一些重要信息):非常重要的包头中的属性,本质是一个浏览器这边本地持久化存储数据的机制(数据写到硬盘中),,浏览器进制网站访问我们的硬盘系统,但是我们需要保存一些我们的用户身份信息(浏览器给我们进行了一些限制,只能存储部分规定好的数据),Cookie就是这样一个让浏览器可以存储我们身份等重要信息的存储机制,HTTP请求中的Cookie字段,就是把本地存储的Cookie信息发送到服务器这边,HTTP响应中会有一个Set-Cookie字符,就是服务器告诉浏览器你要在本地保存哪些信息(键值对,程序员自定义的)

19、Cookie的一些重要结论:

(1)Cookie从哪里来:服务器返回给浏览器的,通常是首次访问/登录成功之后(cookie是在header中传输)

(2)Cookie到哪里去:Cookie会存储在浏览器本地主机的硬盘上,后续每次访问服务器都会带上Cookie,不同的客户端,保存的Cookie是不同的,即使是同一个主机,使用不同浏览器,Cookie也大概率不相同

(3)Cookie中存什么:键值对格式数据,这里的内容都是程序员自定义的和query string一样外人无法理解

(4)Cookie在浏览器这边如何组织:在硬盘本地保存,是按照不同的域名为维度分别存储,你的浏览器访问百度有一组Cookie和你搜狗的一组Cookie是相互隔离的不会影响彼此

(5)Cookie的用途是什莫:用来在客户端保存数据:其中最主要的时保存用户的身份标识,服务器就可以通过身份标识来区分你用户,一些其他业务数据一般不会存储在Cookie中,Cookie可以随时删掉(我们的医院存储着我们的检查的各种信息,我们的Cookie就是方便我们区分出哪些是我们的信息,业务数据一般都存在服务器里)

(6)账号密码时浏览器的另一种保存机制,如果放到Cookie中,Cookie是要传输给服务器的就可能会导致我们的密码被截取,我们的HTTPS重要的是不能被篡改,但是可能会被解密,到时候我们的密码就可能会泄露

相关推荐

  1. HTTPS握手

    2024-02-16 11:06:01       15 阅读
  2. 深入理解HTTP/HTTPS协议

    2024-02-16 11:06:01       13 阅读
  3. Webserve(4): HTTP

    2024-02-16 11:06:01       22 阅读
  4. httphttps详细

    2024-02-16 11:06:01       28 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-02-16 11:06:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-16 11:06:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-16 11:06:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-16 11:06:01       20 阅读

热门阅读

  1. Ajax,

    2024-02-16 11:06:01       31 阅读
  2. 什么时候需要 / 不需要创建索引?

    2024-02-16 11:06:01       38 阅读
  3. 通过`ssh`同步`tmux`剪贴板内容

    2024-02-16 11:06:01       31 阅读
  4. 《Docker极简教程》--Docker容器--Docker容器的概念

    2024-02-16 11:06:01       29 阅读
  5. 内网穿透与搭建私人服务器

    2024-02-16 11:06:01       30 阅读
  6. 如何使用AIGC才能有利于创新能力的培养

    2024-02-16 11:06:01       28 阅读
  7. Rust Option类型详解

    2024-02-16 11:06:01       27 阅读
  8. Rust 初体验4

    2024-02-16 11:06:01       32 阅读
  9. 如何使用 Python 通过代码创建图表

    2024-02-16 11:06:01       28 阅读