应用层协议--HTTP

目录

一.HTTP是什么?

二.HTTP的请求和响应

a.请求:

b.响应:

三.URL

四.Header

1.Host

[2. Content-Length](#2. Content-Length)

[3. Content-Type](#3. Content-Type)

[a. 请求](#a. 请求)

[b. 响应](#b. 响应)

[4. Referer](#4. Referer)

[5. User-Agent](#5. User-Agent)

[6. Cookie](#6. Cookie)


一.HTTP是什么?

HTTP是一种应用层协议,其中应用层协议还有很多比如HTML,URL等

应用场景:

1.网页和后台服务器之间的交互

2.app和后台服务器之间的交互

二.HTTP的请求和响应

a.请求:

1)首行(HTTP请求的第一行,有三个部分信息,三个部分使用空格进行分割)

第一个部分信息:GET ,是HTTP 请求的"方法"

第二个部分信息:URL 唯一资源定位符,描述了一个资源在网络上的位置

第三个部分信息:版本号

2)请求头(header)

是一个键值对结构的数据,每个键值对都独占一行,键和值之间通过 :空格来区分

这里的键值对都属于标准规定的

3)空行

请求头结束的标记

4)正文( body)

正文有的有,有的没

b.响应:

1)首行(包含了版本号,状态码,状态码描述)

2)响应头(header)

也是键值对结构,每个键值对独占一行,键和值之间通过:空格来区分

此处的键值对也是有标准规定的

3)空行

响应头结束的标记

4)正文(body)

响应的正文比较多

三.URL

我们来看一下HTTP 请求首行中的URL 是这么个事

URL是统一资源定位符,描述了某个资源在网络上所属的位置

比如我在大学买凉皮

http://锦绣餐厅:8080/凉皮/火鸡面凉皮?凉面=多放&辣椒少放

服务器地址 端口 带层次的文件路径 查询字符串(query string)

query string 中的键值对都是程序猿自定义的

四.Header

我们知道Header中都是一些键值对的结构,这里介绍最重要的一些键值对。

1.Host

这个就是服务器的域名 , 就比如 www.baidu.com

2. Content-Length

这个是 body 中数据的长度

这里有个比较重要的知识点:前面涉及到的TCP 粘包问题

HTTP 在传输层 就是 基于 TCP的

如果使用同一个TCP进行连接,传输多个HTTP数据包,此时多个HTTP数据包就会在TCP的接收缓冲区中挤在一起

那么接收方进行解析的时候,该怎么样清楚 HTTP 数据包的界限?

对于GET 这种通常没有 body 的请求,直接可以使用 空行(分隔符)

对于 POST 这种有 body 的请求,就需要结合 空行和 Content-Length

3. Content-Type

body中数据 的格式是非常多的

这里分别来看 请求 和 响应 都有哪些格式

a. 请求

  1. json

  2. from 表单的格式

  3. from - data 的格式

b. 响应

  1. html

  2. css

  3. js

  4. json

  5. 图片

4. Referer

Referer描述了当前页面是从那个页面跳转过来的

通常用于广告网页计费,在广告界面,可以进行抓包,看到这个广告网页时从什么网站跳转过来的

5. User-Agent

UA 主要是用来区分 PC 端 还是移动端

在很久之前,网页很简单就是仅支持文字,浏览器的功能也很简单

后来,网页的内容开始丰富了,随之浏览器的功能也开始逐渐升级

这个升级的过程是很快的,新的浏览器诞生之后,并不是立即就占领市场,而是在相当一部分时间里,新浏览器和旧浏览器并存的。

网站的开发者就需要考虑到,我写的网页是否要兼容旧版浏览器呢?

那么就可以用 UA 来获取浏览器版本 , 来看看是否兼容

Cookie可以认为是浏览器 本地存储数据的一种方式

这些数据放到本地文件中更为合适

但是考虑到安全性,是进制网页直接访问电脑的文件系统的

网页代码中也就无法生成一个硬盘的文件来存储数据了。

为了保证安全性,又能进行存储数据,于是就引入了Cookie

也是按照硬盘文件的方式进行保存的,但是浏览器把操作文件进行了封装,网页只能往Cookie 中 存储键值对

相关推荐
不会C语言的男孩33 分钟前
TCP通信可视化工具,含下载地址
服务器·网络·安全
五五六六052444 分钟前
2026盘古石杯初赛
网络
玖玥拾1 小时前
C# 语言进阶(十三)网络 DLL 库分层设计
服务器·开发语言·网络·网络协议·c#
大师兄66681 小时前
HarmonyOS7 HTTP 网络请求封装:统一拦截器实战
网络·网络协议·http·arkui·harmonyos7·实战讲解
hbugs0012 小时前
BPF 表达式检查器:一款免费开源的 Wireshark 捕获过滤器语法检查与可视化构建工具
网络·测试工具·开源·eve-ng·bpf
韩曙亮2 小时前
【Flutter】iOS 网络权限设置 ② ( 配置 iOS 平台可使用 HTTP 访问 | ATS 网络安全强制规范 )
网络·flutter·http·ios·https·网络权限·ats
tiantianuser2 小时前
NVME-oF IP 设计1 :为什么要设计它?
网络·网络协议·rdma·roce v2·nvme of
笨鸟先飞的橘猫2 小时前
skynet——网络模块学习
网络·学习·skynet
kyle~2 小时前
Linux---Snap(隔离式Linux 软件分发范式)
linux·运维·网络
有毒的教程3 小时前
生产环境Socket编程落地实战指南(TCP/UDP工程化方案)
网络协议·tcp/ip·udp