网络原理——应用层协议HTTP/HTTPS(重点较为突出)

目录

HTTP

HTTP是什么

HTTP(全称为"超文本传输协议")是一种应用非常广泛的 应用层协议

HTTP协议是一问一答的模式

HTTP协议报文格式

可以通过Fiddler工具进行抓包来进行查看,抓包的结果就是一个HTTP报文格式的数据

复制代码
抓包工具:Fiddler相当于是进行的一次代理操作
代理分为:正向代理/反向代理
eg:正向代理:我(客户端)找代理帮忙访问
反向代理:他(服务器)找代理帮忙接客
代理在客户端前面 → 正向代理(代理客户端)
代理在服务器前面 → 反向代理(代理服务器)

HTTP请求------协议格式:

  1. 首行:请求方法 url 版本号
  2. 请求头:(使用键值对的方式进行组织)
  3. 空行:标识请求头的结束
  4. 正文:有的有正文,有的没有正文

HTTP响应------协议格式:

  1. 首行:版本号 状态码 状态描述
  2. 响应头:(使用键值对的方式组织)
  3. 空行:标识响应头结束
  4. 正文:如果正文存在,则会在 Header 当中会有一个 Content-length 标识 正文的长度,如果返回了html页面,页面的内容也会放在正文当中

注意 :为什么HTTP报文当中要存在"空行"?

因为HTTP协议并没有规定报头部分的键值对有多少,空行就相当于是"报头的结束标记",或者是"报头与正文之间的分隔符"

HTTP请求

URL

url:互联网当中每个文件都会有一个唯一的URL

复制代码
url的基本格式:http://user:pass@www.example.ip:80/dir/index.htm?uid=1#ch1
http:// user:pass www.example.ip 80 dir/index.htm uid=1 ch1
协议名 登录信息(现在已经不会写在url当中) 服务器地址 服务器端口号(如果没有写,浏览器会自动添加) 带层次的文件路径(类似于目录) 查询字符串 片段标识符

** 对上述部分信息进行解释 **

服务器地址:此处是一个"域名",域名会通过DNS系统解析成一个具体的IP地址

查询字符串:键值对的形式,完全由程序员自己决定

** 关于URL encode **

像/?:等字符,url已经有其他的理解了,所以这些字符不能随意出现,需要对参数中的字符进行转义(一个中文字符虽没有特殊含义,但还是需要转义,否则就会被浏览器当做url中的特殊符号)

需要进行转码,转化为16进制数据

认识方法

经常使用的:

方法 说明
GET 获取资源
POST 传输实体主体
PUT 传输文件
DELETE 删除文件

说明

  1. GET是最常用的HTTP方法,用户获取服务器上的某个资源

    上面就是一个GET方法
    请求特点

    a. 首行第一部分为GET

    b. URL 的 query string可以为空,也可以不为空

    c. header 部分有若干个键值对结构

    d. body为空(一般没有body数据)

  2. POST方法,多用于提交用户输入的数据给服务器,通过HTML的form标签可以构造POST方法

    请求特点

    a. 首行的第一部分为POST

    b. URL的query一般也为空(也可以不为空)

    c. header部分有若干键值对结构

    d. body 部分一般不为空,body内数据格式是通过header中的 Content-type指定,body长度由header当中Content-Length指定

GET与POST区别

方法 GET POST
语义不同 用于获取数据 用于提交数据
query string 与body body一般为空,通过query string传递 query string一般为空,通过body传递
幂等性 一般是 一般不是
缓存 可以被缓存 不能被缓存

补充说明:幂等性解释:多次获取的结果是一样的

关于安全性:POST与GET相比,POST安全,但是不对的,因为之前会把密码放在url的query string当中

关于传输数据量:有人说传输的GET传输的数据量小,POST传输的数据量大,错误,现在完全取决于浏览器的限制

关于传输数据类型:有人说GET只能传输文本数据,POST可以传输二进制数据,【解释:GET确实url只能放文本,但可以把二进制数据通过转码转成文本的】

  1. 其他方法

DELETE:输出服务器指定资源

PUT与POST相似

认识请求"报头"(header)

header :格式使用"键值对"格式
Host :表示服务器主机的地址与端口 127.0.0.1:8080(比较常用的)
如果采用了代理模式,此处会发生变化
Content-Length :表示body当中数据长度
Content-type :表示请求body的数据格式:常见:form表单格式/json格式
User-Agent:简称UA,互联网早期,用于正确将内容显示到屏幕上

复制代码
eg: mozilla/5.0(Windows NT 10.0; Win64; x64) AppleWebKit/537.36(KHTML, like Gecko)

会有浏览器信息+操作系统信息(但现在用于区分用户设备,根据不同的设备返回不同版本的页面)
Referer:表示这个页面是从哪一个页面跳转过来的

复制代码
eg:从百度当中点击广告,广告就需要给百度交钱(提供展示平台)

Cookie :可能来自服务器(在HTTP响应的header当中通过Set-Cookie返回数据)
往往这个字段被用于"身份标识的功能"

浏览器在展示页面的过程中,虽然可以实现通过js实现一些逻辑,但是是不能访问用户的硬盘资源的,但实际开发过程当中,有的时候是希望可以将某些不会太大变化的数据保存在本地硬盘
Cookie是浏览器允许网页在本地硬盘存储数据的一种机制

认识请求正文

正文的内容格式与 header当中的 Content-Type是密切相关的

  1. form表单
  2. json

HTTP响应

状态码

HTTP已经定义好了一些常见的状态码,常用的状态码如下:

状态码 含义
200 成功 正常返回实体
404 Not Found 没有找到资源
403 Forbidden 访问被拒绝,有的页面需要用户有一定的权限才可以访问
500 Internal Server Error 服务器内部出现错误
504 Gateway Timeout 网关时间过长
302 Move temporarily 临时重定向

响应报头

Content-Type :常见取值text/html:body数据格式是HTML

text/css:body数据格式是CSS

application/javascript:body数据格式是JavaScript

application/json:body数据格式是JSON

响应正文

与Content-Type有着密切关系

以下我举了三个两个例子------都是可以通过抓包工具获取到的


以上就是HTTP的相关部分,都是必须要掌握的部分!

相关推荐
冬夜戏雪34 分钟前
【java学习日记】【2025.12.4】【4/60】
java·开发语言·学习
IT_陈寒36 分钟前
React 18并发渲染实战:这5个性能陷阱让我浪费了整整一周!
前端·人工智能·后端
Slow菜鸟37 分钟前
Java项目基础架构(三)| 日志统一处理
java·开发语言
qq_5895681037 分钟前
Maven学习记录
java·开发语言
大飞哥~BigFei37 分钟前
rabbitmq-spring-boot-start2.0.0重磅重构升级
java·重构·rabbitmq
2501_9419820538 分钟前
高可靠API架构的三大核心支柱
java·大数据·spring
AI 嗯啦38 分钟前
Flask 框架基础介绍
后端·python·flask
努力也学不会java40 分钟前
【docker】Docker Image(镜像)
java·运维·人工智能·机器学习·docker·容器
豐儀麟阁贵42 分钟前
9.2连接字符串
java·开发语言·算法