网络原理 HTTP与HTTPS协议

博主主页: 码农派大星.

数据结构专栏 :Java数据结构

数据库专栏: MySQL数据库

JavaEE专栏: JavaEE

关注博主带你了解更多计算机网络知识

目录

1.HTTP概念

2.HTTP报文格式

3.HTTP请求

1.首行

1.1URL

[1.2 GET⽅法](#1.2 GET⽅法)

[1.3 POST⽅法](#1.3 POST⽅法)

[1.4 其他⽅法](#1.4 其他⽅法)

2.请求头(header))

[2.1 关于请求报头和响应报头(header)](#2.1 关于请求报头和响应报头(header))

[2.2 User-Agent(简称UA)](#2.2 User-Agent(简称UA))

[2.3 Referer](#2.3 Referer)

[2.4 Cookie](#2.4 Cookie)

3.空行

4.正文

4.HTTP响应

认识"状态码"

1.首行

2.响应头(header)

3.空行

4.正文


1.HTTP概念

HTTP全称为超文本传输协议,是⼀种应⽤⾮常⼴泛的应⽤层协议,不仅仅能传输文本,还能传输图片,传输音频,传输视频,传输其他的各类数据,广泛应用在日常开发的各种场景.

例如:打开浏览器网页;打开手机app;后端程序,都是分布式/微服务体系结构,服务器之间的相互调用,也大概率是HTTP.

目前互联网上见到的HTTP协议,绝大部分都是HTTP/1.1版本(已经很好用了),如果要升级,要考虑成本,收益,设备兼容等情况

并且HTTP协议,是一种典型的"一问一答模型"协议:

客户端->服务器:客户端发一个请求,服务器返回一个响应(一一对应)

2.HTTP报文格式

先解释下抓包:抓包就是通过网卡上的数据,获取到,并且解析显示出来

借助抓包 工具,观察到HTTP请求/响应的详细情况,我们可以通过使用Fiddler来抓包. Fidder官方下载网址:Fiddler Classic | Original Web Capturing Tool for Windows,下载完打开Fiddler:

当我访问我的博客网页,就会出现一些抓包信息: 蓝色数据表示响应为html,Raw表示最原始的数据格式,可以查询HTTP的响应的请求。

3.HTTP请求

HTTP的请求格式是文本格式:

1.首行

1.1URL

俗称的"⽹址"其实就是说的URL:统⼀资源定位符

登录信息几乎见不到了,http端口默认为80 ,键值对之间用&分割,键和值之间用=分割,比如:

https://search.bilibili.com/allvt=88073156&keyword=%E9%BB%91%E6%82%9F%E7%A9%BAmod&search_source=1

**URL主要关心四个部分:IP地址(域名);端口号;**层次的路径;查询字符串(在Spring MVC重点学习).

1.2 GET⽅法

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

GET请求的特点 : ⾸⾏的第⼀部分为GET;URL的query string可以为空,也可以不为空;header部分有若⼲个键值对结构;body部分为空.

1.3 POST⽅法

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

POST请求的特点: ⾸⾏的第⼀部分为POST;URL的query string⼀般为空(也可以不为空);header部分有若⼲个键值对结构;body部分⼀般不为空;body部分⼀般不为空body内的数据格式通过header中的Content-Type 指定.body的⻓度 由header中的Content-Length 指定

经典⾯试题:谈谈GET和POST的区别:

明确结论,这两个方法其实没有本质区别,但在使用习惯上,还是有区别的:

1.语义不同: 方法表示的含义:GET表示从服务器拿数据,POST表示往服务器提交数据

2.传输数据方式不同: GET传递数据,通常通过query string 把自定义数据交给服务器; POST传递数据,通常是通过body把自定义数据交给服务器

3.GET方法对应的请求,通常设计成"幂等"的;POST方法对应请求,对于"幂等性"则无要求

4.GET如果设计成幂等性,此时GET的结果是可以被缓存的;POST不设计成幂等性,POST就不应该被缓存.

错误说法:

1.GET传输数据有上限,POST没有:早期硬件资源有限,限制了URL长度,但是实际上并没有规定。

2.GET请求数据不安全,POST安全:安全是指传输的数据不容易被黑客获取到或者说获取到不容易破解。

3.GET只能传输文本数据:POST可以文本+二进制:完全可以!!

1.4 其他⽅法

PUT与POST相似,只是PUT具有幂等特性,⼀般⽤于更新,PUT是把数据放到body中

DELETE删除服务器指定资源,DELETE是把数据放到query string中

2.请求头(header)

2.1 关于请求报头和响应报头(header)

Host: 表⽰服务器主机的地址和端⼝.

Content-Length: 表⽰body中的数据⻓度.(没有正文则没有这个属性)

Content-Type: 表⽰请求的body中的数据格式. (没有正文则没有这个属性)

Content-Length Content-Type,如果有body但是没有这两个属性,意味着这是非法的请求/错误的请求

2.2 User-Agent(简称UA)

User-Agent 是一个 HTTP 请求头部字段,它允许网络请求标识发起请求的客户端应用程序的信息,包括应用程序的类型、版本以及正在使用的操作系统等

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36

2.3 Referer

Referer是一个 HTTP 请求头部字段,用于指示一个请求是从哪个页面发起的。这个字段通常由浏览器设置,当用户点击链接时,它会告诉服务器请求是从哪个页面(URL)跳转过来的。

HTTP 协议中,Cookie 是服务器发送到用户浏览器并保存在本地的小块数据。它用于存储有关用户会话的信息,以便在用户浏览网站时跨多个页面请求或在后续的会话中识别用户,也就是说Cookie就属于浏览器给网站提供的一种"客户端存储数据"的机制.它是按照域名为为维度分别进行存储.

Cookie也是键值对结构,使用; 来分割键值对,使用= 来分割键和值

为了安全,浏览器禁止网页直接访问你的电脑硬盘,浏览器并没有把路完全堵死,它允许网页通过键值对的方式(Cookie)来存储数据(本质也是储存在硬盘上),具体这样的键值对是如何储存到硬盘上的,浏览器封装好,网页本身无法干预.

首次访问某个网站,可能是不带Cookie的,在响应中就会有Set-Cookie这样的header,把一些键值对写回到浏览器这边,浏览器后续访问这个网站就会带有Cookie

Cookie来源 :当用户访问一个网站时,服务器 可以通过 HTTP 响应中的 Set-Cookie 向用户的浏览器发送一个或多个 Cookie

Cookie去向 :当用户再次访问同一个网站时,浏览器会把之前存储的 Cookie 带上,发送回服务器。

有一个Cookie非常经典的使用场景,使用Cookie保存用户的身份信息 ,浏览器登录页面

3.空行

请求头结束的标记

4.正文

有的http请求有,有的没有

4.HTTP响应

认识"状态码"

1)200 ok: 成功

2)404 NOT FOUND :访问资源没有找到,url可能错了

3)403 Forbidden:请求资源没有权限访问

4)405 Method not Allowed:你的服务器只支持get请求,可是你发了一个post

5)500 Internal Server Error:服务器内部错误

6)302 Move temporarily:临时重定向

1.首行

2.响应头(header)

3.空行

请求头结束的标记。

4.正文

正文内容比较长,可能是多种格式,HTML,CSS,JS,JSON,图片,字体,视频等。

相关推荐
zhangjin122226 分钟前
kettle从入门到精通 第八十六课 ETL之kettle kettle调用https接口忽略SSL校验
https·ssl·etl·kettle调用https接口·kettle忽略ssl
SUGERBOOM37 分钟前
【网络安全】网络基础第一阶段——第二节:网络协议基础---- 路由和ARP协议
网络·网络协议
~yY…s<#>1 小时前
【计算机网络】传输层协议TCP
linux·开发语言·网络·c++·网络协议·tcp/ip·计算机网络
Smartdaili China2 小时前
使用 Puppeteer-Cluster 和代理进行高效网络抓取: 完全指南
大数据·开发语言·网络·爬虫·php·puppeteer·代理服务器
无极9212 小时前
访问控制类型及部分具体介绍
运维·服务器·网络·安全·网络安全·模型·访问控制
Kusunoki_D3 小时前
传输层 IV(TCP协议——流量控制、拥塞控制)【★★★★】
网络·网络协议·tcp/ip·计算机网络
chusheng18403 小时前
Python 中的 Socket 编程入门
开发语言·网络·python
ZHOUPUYU3 小时前
最新Kali Linux超详细安装教程(附镜像包)
linux·运维·服务器·开发语言·网络
知本知至3 小时前
基于open-gpu-kernel-modules的p2p vram映射bar1提高通信效率
网络·网络协议·p2p