博主主页: 码农派大星.
数据结构专栏:Java数据结构
数据库专栏:MySQL数据库
JavaEE专栏:JavaEE
关注博主带你了解更多计算机网络知识
目录
1.HTTP概念
2.HTTP报文格式
3.HTTP请求
1.首行
1.1URL
1.2 GET⽅法
1.3 POST⽅法
1.4 其他⽅法
2.请求头(header)
2.1 关于请求报头和响应报头(header)
2.2 User-Agent(简称UA)
2.3 Referer
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)跳转过来的。
2.4 Cookie
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,图片,字体,视频等。