当前位置: 首页 > web >正文

【计算机网络】HTTP 协议

HTTP是什么?

HTTP 全称是“超文本传输协议”,是互联网上应用最广泛的应用层协议,用于客户端和服务器之间的通信。

HTTP 的实现在 HTTP 3.0之前都是基于传输层的 TCP 实现的, HTTP 3.0 改为了基于 UDP 实现,但是现在市面上只要使用的是 HTTP 1.1 、HTTP 2.0。

HTTP 的体现在生活中随处可见,比如使用浏览器访问网站时,就是使用的 HTTP 来传输数据的,在早期,包括了登录网站的用户名、密码等都是经过 HTTP 明文传输,这样也就意味着会造成用户信息泄露,这就涉及了网络安全问题,这个话题以后再说。

HTTP 工作流程

 HTTP 协议是一个经典的“一问一答” 的模型,就是我们通过浏览器向服务器发送一个 HTTP请求,然后被访问的服务器有一个相应。

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 是依赖 TCP 协议,而 TCP 是面向字节流的,没有空行就会出现粘包问题。

URL

URL 就是我们口中说的 “网址” ,每一个 URL 都对应这唯一的资源。

  • 协议名:常见的有 HTTP 、HTTPS ;
  • 登录信息:目前已经淘汰了,没有网站会用这种方式进行认证了,因为非常不安全。
  • 服务器地址:这里的会通过 DNS 服务器 对域名和 IP 地址进行匹配,我们只用记住便于记忆的域名,有时一个 IP 会对应着多个域名。
  • 查询字符串:也就是 “query string” 

url encode

像/?:等这样的字符,已经被url当做特殊意义理解了.因此这些字符不能随意出现. ⽐如,某个参数中需要带有这些特殊字符,就必须先对特殊字符进⾏转义.

转义的规则如下:将需要转码的字符转为16进制,然后从右到左,取4位(不⾜4位直接处理),每2位做 ⼀位,前⾯加上%,编码成%XY格式

例如:在百度上搜 “C++”,如图所示 “+” 被转译成了 “%2B”

HTTP 请求

“方法”(method)

1、GET 方法

GET 是最常⽤的 HTTP ⽅法.常⽤于获取服务器上的某个资源.在浏览器中直接输⼊  URL,此时浏览器就会发送出⼀个 GET 请求.

特点:

2、POST 方法

POST⽅法也是⼀种常⻅的⽅法.多⽤于提交⽤⼾输⼊的数据给服务器(例如登陆⻚⾯).

通过HTML中的form标签可以构造POST请求,或者使⽤JavaScript的ajax也可以构造POST请求.

特点:

报头参数

1、Host

表示服务器主机的地址和端口

2、Conten-Length

表示body 中的数据长度

3、Conten-Type

表示请求的body 中的数据类型

4、User-Agent

表示浏览器/操作系统的属性

5、Referer

表示这个页面是从哪个页面跳转过来的

6、Cookie

当我们打开一个网站时,如果这个网站我们曾经登录过,那么当我们再次打开网站时,发现就不需要再次登录了,而是直接进入了首页。例如bilibili,csdn等网站。这是怎么做到的呢?其实就是游览器保存了我们的cookie,里面记录了一些信息,当然,这些cookie是服务器创建后返回给游览器的。游览器只进行了保存。

http://www.xdnf.cn/news/5554.html

相关文章:

  • 【星海随笔】信息安全法律法规概述
  • 大数据模型的构建与优化
  • LeetCode 941. 有效的山脉数组 java题解
  • Yocto 项目中的 glibc 编译失败全解析:原因、原理与修复策略
  • 接口继承与扩展的使用技巧
  • 685SJBH计量管理系统
  • Problem D: 异常2
  • MyBatis源码解读2(2.1、核心对象)
  • 【RP2350】香瓜树莓派RP2350之按键
  • B站取关脚本
  • robomaster机甲大师--电调电机
  • C++入门篇——类和对象(下)
  • C/C++表驱动法
  • Kubernetes生产实战(二十):容器大镜像拉取优化指南
  • 8.二叉树减枝
  • 双流 JOIN 与维表 JOIN 的区别
  • 多线程与信号
  • 软件设计师-错题笔记-软件工程基础知识
  • 总结C/C++中程序内存区域划分
  • 判断公网IP办法
  • Java SolonMCP 实现 MCP 实践全解析:SSE 与 STDIO 通信模式详解
  • Kubernetes排错(十三):Pod间偶发超时问题排查
  • 期刊 | 《电讯技术》
  • [SAP] SAP ERP用户参数设置
  • Funplus 服务端开发实习 面经
  • 分享一些资料供大家学习
  • PCB 设计 | 1A / 10A / 100A
  • 41、IIS 应⽤程序池集成模式和经典模式的区别?
  • 点和体素哪个好
  • 损失函数的选择和技术分析:深度学习模型训练的指南