| |
|
开发:
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基础 |
#什么是HTTPHTTP (全称为 "超文本传输协议") 是一种应用非常广泛的 应用层协议,HTTP 往往是基于传输层的 TCP 协议实现的. (HTTP1.0, HTTP1.1, HTTP2.0 均为TCP, HTTP3 基于 UDP 实现) 目前我们主要使用的还是 HTTP1.1 和 HTTP2.0 . 其实HTTP协议在我们日常使用网络中是不可或缺的存在,当我们平时打开一个网站, 就是通过 HTTP 协议来传输数据的。当我们在百度的浏览器中输入一个网址(URL)时,浏览器作为客户端就会向百度的服务器发送一个HTTP请求而百度的服务器就会返回一个HTTP响应。这个响应被浏览器解析后就会变成我们所看到的网页,这个过程中浏览器可能会给服务器发 送多个 HTTP 请求, 服务器会对应返回多个响应, 这些响应里就包含了页面 HTML, CSS, JavaScript, 图片, 字体等信息)。 如上图中我们可以在打开百度的主页后按F12进入开发者模式后选择Network就可以看到当前所发送的HTTP请求 ? ?#HTTP的报文格式HTTP 是一个文本格式的协议. 可以通过开发者工具或者 Fiddler 抓包, 分析 HTTP 请求/响应的 细节。 在这里我们通过使用Fiddler这个软件来实现抓包分析,以下是下载地址 1.抓包工具的使用当我们打开Fiddler后,就可以看到当前我们所发生的HTTP请求 如果我们想分析其中某个请求,直接双击即可 ? ?之后选择Raw选项我们就可以看到HTTP协议请求与响应的报文格式。 2.抓包工具的原理Fiddler 相当于一个 "代理". 浏览器访问 baidu.com 时, 就会把 HTTP 请求先发给 Fiddler, Fiddler 再把请求转发给百度的服务器. 当百度服务器返回数据时, Fiddler 拿到返回数据, 再把数据交给浏览器. 因此 Fiddler 对于浏览器和百度服务器之间交互的数据细节, 都是非常清楚的。 ? ?3.HTTP协议格式分析HTTP请求? 首行: [方法] + [url] + [版本] Header: 请求的属性, 冒号分割的键值对;每组属性之间使用\n分隔;遇到空行表示Header部分结束 Body: 空行后面的内容都是Body. Body允许为空字符串. 如果Body存在, 则在Header中会有 一个Content-Length属性来标识Body的长度? HTTP响应 ?首行: [版本号] + [状态码] + [状态码解释] Header: 请求的属性, 冒号分割的键值对;每组属性之间使用\n分隔;遇到空行表示Header部分结束 Body: 空行后面的内容都是Body. Body允许为空字符串. 如果Body存在, 则在Header中会有 一个Content-Length属性来标识Body的长度; 如果服务器返回了一个html页面, 那么html页 面内容就是在body中. ?我们在上图中可以看到HTTP的报文格式中存在空行,那么为什么我们要莫名其妙的为其加入一个空行呢?
?#HTTP请求1.认识URL平时我们俗称的 "网址" 其实就是说的 URL (Uniform Resource Locator 统一资源定位符). 互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它. URL 的详细规则由 因特网标准RFC1738 进行了约定。 协议方案名. 常见的有 http 和 https, 也有其他的类型. (例如访问 mysql 时用的 jdbc:mysql ) 登陆信息. 现在的网站进行身份认证一般不再通过 URL 进行了. 一般都会省略。 ?服务器地址. 此处是一个 "域名", 域名会通过 DNS 系统解析成一个具体的 IP 地址 端口号:? 当端口号是可以被省略的,当被省略时 浏览器会根据协议类型自动决定使用 哪个端口. 例如 http 协议默认使用 80 端口, https 协议默认使用 443 端口. 带层次的文件路径:相当于html中的dom树,用于定位我们需要用的资源 查询字符串(query string). 本质是一个键值对结构. 键值对之间使 用 & 分隔. 键和值之间使用 = 分隔 片段标识:主要用于页面的跳转 当然,我们在日常中见到的网址也许并没有那么齐全的配置,因为其中有一些东西是可以被省略的
2.认识HTTP的请求行“方法”在HTTP协议中虽然存在许多的方法,但是我们日常中最常见的就只有GET与POST方法,所以在?这里我们就只介绍GET与POST #GETGET 是最常用的 HTTP 方法. 常用于获取服务器上的某个资源 GET 请求的特点
#POSTPOST 方法也是一种常见的方法. 多用于提交用户输入的数据给服务器(例如登陆页面) POST 请求的特点
#GET与POST的区别
?补充说明:
3.HTTP的报头?header 的整体的格式是 "键值对" 结构. 每个键值对占一行. 键和值之间使用分号分割。同样的在这里我们也只介绍一些常用的报头 1.HOST用于表示服务器主机的地址和端口号 2.Content-Length表示 body 中的数据长度. 3.Content-Type?表示请求的 body 中的数据格式. 4.User-Agent (简称 UA)表示浏览器/操作系统的属性 5.Referer表示这个页面是从哪个页面跳转过来的. 常用于一些广告的计费,比如我们在百度的页面点击了广告,那么运营商就会知道这条请求是从百度来的就为后续的广告计费提供了依据。 6.Cookie由于HTTP是一种无状态协议也就是说它不对之前发生过的请求和响应的状态进行管理,也就是说无法依据之前的状态处理本次请求,相当于每次请求都要重新来过。这样做当然又一些好处,因为不必要保存之前的状态所以可以节省一些CPU资源和内存空间,但不可避免的也会让运行的速度变慢。于是便引入了Cookie,我们通过在报文中写入Cookie信息来控制客户端的状态。 ? 这样我们只需要通过检查报文中的Cookie就能实现快速的响应,可以理解为缓存。 #HTTP的响应信号认识 "状态码" (status code)状态码表示访问一个页面的结果. (是访问成功, 还是失败, 还是其他的一些情况... 1.200 OK表示访问成功 ?大多数情况下我们都是能访问成功。 2.404 Not Found表示没有找到资源,我们在中浏览器输入一个 URL, 目的就是为了访问对方服务器上的一个资源. 如果这个 URL 标识的资源不存 在, 那么就会出现 404 3.403 Forbidden表示服务器中存在该资源但是我们没有权限访问 4.405 Method Not Allowed前面我们已经学习了 HTTP 中所支持的方法, 有 GET, POST, PUT, DELETE 等. 但是对方的服务器不一定都支持所有的方法(或者不允许用户使用一些其他的方法). 5.500 Internal Server Error服务器出现内部错误. 一般是服务器的代码执行过程中遇到了一些特殊情况(服务器异常崩溃)会产生这个 状态码. 咱们平时常用的网站很少会出现 500。 6.504 Gateway Timeout当服务器负载比较大的时候, 服务器处理单条请求的时候消耗的时间就会很长, 就可能会导致出现超时的 情况. 7.302 Move temporarily临时重定向,常在登陆页面中经常会见到 302. 用于实现登陆成功后自动跳转到主页. 响应报文的 header 部分会包含一个 Location 字段, 表示要跳转到哪个页面. ? ?我们可以在gitee的登陆成功后通过Fiddler抓包看到此状态码 8.301 Moved Permanently永久重定向. 当浏览器收到这种响应时, 后续的请求都会被自动改成新的地址. 301 也是通过 Location 字段来表示要重定向到的新地址. 状态码总结? |
|
网络协议 最新文章 |
使用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/25 21:27:22- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |