| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 网络协议 -> 我对http协议的相关理解 -> 正文阅读 |
|
[网络协议]我对http协议的相关理解 |
一、浏览器输入 url 按回车背后经历了哪些? 1、浏览器地址栏输入url,先解析url,检测url地址是否合法 2、浏览器先看浏览器缓存-系统缓存-路由器缓存,如果缓存有,则直接跳页面显示内容,否则,直接跳到第三步操作 浏览器缓存:浏览器会记录 DNS 一段时间,因此,只是第一个地方解析 DNS 请求; 操作系统缓存:如果在浏览器缓存中不包含这个记录,则会使系统调用操作系统, 获取操作系统的记录(保存最近的 DNS 查询缓存); 路由器缓存:如果上述两个步骤均不能成功获取 DNS 记录,继续搜索路由器缓存; ISP 缓存:若上述均失败,继续向 ISP 搜索。 3、发送http请求前,需要域名解析(DNS解析),解析获取对应的IP地址 4、浏览器向服务器发起tcp连接,与浏览器建立tcp三次握手 5、握手成功后,浏览器向服务器发送http请求,请求数据包 6、服务器处理收到的请求, 并将数据返回给浏览器 7、浏览器收到http响应 8、浏览器解码响应,如响应有缓存则存入 9、浏览器发送请求获取嵌入在 HTML 中的资源(html,css,javascript,图片, 音乐······),对于未知类型,会弹出对话框。 11、页面全部渲染结束 上述过程我可以比喻成一个人质交易过程,浏览器相当于是人质家属,服务器相当于绑架犯,双方确定好交易地址,浏览器带着金钱(url)来交易,绑架犯小弟先检查是不是假钱,是不是合法,如果带来的是卡,就需要先验证卡里是否有存款,也就是上述第二步验证,如果验证通过,需要教研交易者身份,即域名解析,获取对应的ip地址也就是拿身份证证明自己确实是人质家属后,人质家属开始交易,为防止绑架犯耍诈,人质家属要求见人质,要确认人质的安全,也就是浏览器向服务器发起tcp连接,与浏览器建立tcp三次握手的过程,绑架犯同意人质家属的要求,带出人质给其家属见面再给钱,这个即服务器处理收到的请求, 并将数据返回给浏览器,人质家属见到人质,即浏览器收到http响应,人质见到人质家属后,立马给人质解绑,绑架犯也放行,即浏览器解码响应,如响应有缓存则存入,人质家属发现安全后,开始准备报警并向警方提交相关犯罪资料,即浏览器发送请求获取嵌入在 HTML 中的资源(html,css,javascript,图片, 音乐······),对于未知类型,会弹出对话框。事前家属也告诉自己的孩子,要是自己没活着回来,就报警,即浏览器发送异步请求,最终故事结束,最终的结果看警察后面的处理,即页面全部渲染结束,效果看请求的url是啥样。 二、GET 和 POST 的区别 浏览器记忆及安全性: 1、get浏览器回退时无害,而POST会再次提交请求 2、get产生url地址可以被标记,而post不可以 3、get请求会被浏览器主动存储且请求参数会被完整的保留在浏览器历史记录里,而post不会,除非手动设置,且参数不会被保留 4、get比post更不安全,因为参数直接暴露在url上,故不便传递敏感信息 编码传参方式: 5、get请求只能进行url编码,而post支持多种编码方式 6、对参数类型,get只接受ASCLL字符,而post无限制 7、get参数通过url传递,post放在request body中(post请求也可以没有body) 以上可能是标准答案,但是我认为没有所谓真正的安全性可言,无论通过抓包或者f12的形式,都可以直接拿到请求的数据。实际真的区别在于: 简单的说: get产生一个tcp数据包,而post产生2个 展开的说: 对于get,浏览器会把http header 和data一并发送出去,服务器响应200(返回数据) 对于post,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据) 这个打个比喻就相当于取钱和转账,取钱,我只要输入金额和密码,就可以从卡里那到钱 给陌生人转账,就需要先给输入转账金额,此时会弹出一个身份验证,填对对方身份后,再输入密码,则才可以转账成功 三、 cookies 机制和 session 机制的区别 1、cookies数据保存在客户端, session 数据保存在服务器端 2、cookies 可以减轻服务器压力,但是不安全,容易进行cookies欺骗 3、session 较安全,但占用服务器资源 四、http状态码 1、200 请求已成功,请求所希望的响应头或数据体将随此响应返回。 3、202 服务器已接受请求,但尚未处理 4、301 (永久移动) 请求的网页已永久移动到新位置。 服务器返回此响应 (对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。 5、302 (临时移动) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。 6、303 (查看其他位置) 请求者应当对不同的位置使用单独的 GET 请求来检索响应时,服务器返回此代码。 7、304 (未修改) 自从上次请求后,请求的网页未修改过。 服务器返回此响应时,不会返回网页内容。 8、305 (使用代理) 请求者只能使用代理访问请求的网页。 如果服务器返回此响应,还表示请求者应使用代理。 9、307 (临时重定向) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。 10、 401 当前请求需要用户验证。如果当前请求已经包含了 Authorization证书,那么 401 响应代表着服务器验证已经拒绝了那些证书 11、403 服务器已经理解请求,但是拒绝执行它。与 401 响应不同的是,身份验证并不能提供任何帮助,而且这个请求也不应该被重复提交 12、404 请求失败,请求所希望得到的资源未被在服务器上发现 13、500 服务器遇到了一个未曾预料的状况,导致了它无法完成对请求的处理。一般来说,这个问题都会在服务器的程序码出错时出现。 14、501 服务器不支持当前请求所需要的某个功能。当服务器无法识别请求的方法,并且无法支持其对任何资源的请求。 15、 502 作为网关或者代理工作的服务器尝试执行请求时,从上游服务器接收到无效的响应。 16、503 由于临时的服务器维护或者过载,服务器当前无法处理请求。这个状况是临时的,并且将在一段时间以后恢复。
GET, POST 和 HEAD 方法、OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法 六、http 和 https 区别 1、http是超文本传输协议,传输的数据都是未加密的,即明文的,故其存在隐私安全问题 2、连接方式不同:http的连接较简单,无状态;https协议是由 SSL+HTTP 协议构建的可进 行加密传输、身份认证的网络协议,比 http 协议安全 3、https=ssl+http 3.1 https 需要ca申请证书 3.2 ssl协议是用于对http协议传输的数据进行加密,也就是https 4、端口不同,http一般端口为80,https为443 七、HTTP 请求报文与响应报文格式 1、请求报文包含三部分: a、请求行:包含请求方法、URI、HTTP 版本信息 b、请求头部(headers)字段 c、请求内容实体(body) 2、响应报文包含三部分: b、响应头部(headers)字段 八、常见的 POST 提交数据方式 application/x-www-form-urlencoded:最常见的post数据提交方式,form 表单 multipart/form-data:适用表单文件上传 application/json:消息主体为序列化后的 JSON 字符串 text/xml:它是一种使用 HTTP 作为传输协议,XML 作为编码方式的远程调用规范 九、什么是 DNS? 类似于身份证证件号码,证明人的姓名,除了姓名,还可以直接报身份证号 十、无状态的定义 1、无状态协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需 要前面的信息 |
|
网络协议 最新文章 |
使用Easyswoole 搭建简单的Websoket服务 |
常见的数据通信方式有哪些? |
Openssl 1024bit RSA算法---公私钥获取和处 |
HTTPS协议的密钥交换流程 |
《小白WEB安全入门》03. 漏洞篇 |
HttpRunner4.x 安装与使用 |
2021-07-04 |
手写RPC学习笔记 |
K8S高可用版本部署 |
mySQL计算IP地址范围 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 3:32:53- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |