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

【计算机网络】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是服务器创建后返回给游览器的。游览器只进行了保存。

相关文章:

  • okhttp3.Interceptor简介-笔记
  • Babel进阶:如何自定义插件?
  • 配置Hadoop集群-免密登录
  • VM中 ubuntu 网卡不显示
  • 大核极坐标码
  • 滑动窗口/单调队列
  • 告别数据僵尸!Redis实现自动清理过期键值对
  • Linux环境基础开发工具的使用(yum、vim、gcc、g++、gdb、make/Makefile)
  • Git 用法总结
  • [Git]ssh模式每次提交都要输入密码
  • 【AutoGen革命】多智能体协作系统的架构设计与工程实践
  • Java后端文件类型检测(防伪造)
  • C++.Windows图形
  • DVWA靶场保姆级通关教程--07SQL注入下
  • Open CASCADE学习|由大量Edge构建闭合Wire:有序与无序处理的完整解析
  • Java SE所需工具与常见类型和运算符介绍
  • SWMM在城市排水防涝规划中的实战应用:模型校准、情景模拟与工程决策
  • TCPIP详解 卷1协议 七 防火墙和网络地址转换
  • vue3+three 搭建平面上滚动旋转的几何体
  • 第一章 应急响应-webshell查杀
  • 明查|印度空军“又有一架战机被巴基斯坦击落,飞行员被俘”?
  • 这一次,又被南昌“秀”到了
  • 【社论】人工智能将为教育带来什么
  • 山东枣庄同一站点两名饿了么骑手先后猝死,当地热线:职能部门正调查
  • 商务部新闻发言人就中美日内瓦经贸会谈联合声明发表谈话
  • 他站在当代思想的地平线上,眺望浪漫主义的余晖