HTTP属于是应用层最广泛使用的协议之一!
浏览器获取到网页就是基于HTTTP协议
HTTP就是浏览器和服务器之间的桥梁
HTTP(1.1)目前最常见的(课堂使用)
HTTP往往是基于传输层的TCP协议实现的!!
在浏览器中输入网址/URL
sogou.com——》网址/URL
浏览器会根据这个URL,构造出一个HTTP请求,发送给服务器,服务器就会返回一个HTTP响应(包含HTML,JS,CSS,图片……),浏览器把得到的HTML等数据进行显示出来(渲染)
其实http协议的交互详细过程,可以借助第三方工具来看到的:称为“抓包工具”,如:fidder
打开fidder,立即显示出当前电脑上某个程序使用http和服务器交互的过程!
fidder本质上是一个代理程序,使用的时候,有两个注意事项:
- fidder可能和别的代理程序起冲突
使用的时候,要关闭其他的代理程序(包括一些浏览器插件)(所谓的代理是指:找个人给你干活)
代理分为两种:
正向代理:代表客户端的代理
反向代理:代表服务器的代理
- 要想正确的抓包,核对开户HTTPS功能
https是基于http搞出来的进化版协议,当下互联网绝大部分的服务器都是https的!!fidder默认情况下不能抓https的包,需要咱们手动启用一下https,并且按照证书(至于怎么安装证书,请移步它文,在此不做过多的讲述)
了解HTTP关键信息的含义:学习一个协议,就是学习它的报文格式!
GET https://www.sogou.com/ HTTP/1.1
首行:包含三个部分,之间使用空格来区分!
- GET:HTTP的方法(methond)
- https://sogou.com/(URL/网址)URL是唯一资源定位符,标识整个互联网上的唯一的资源的位置(定位符:资源在哪儿??在哪个服务器的哪个目录下的哪个文件??
- HTTP/1.1:版本号
认识URL:
URL 最关键的四个部分
- 域名/IP
- 端口号
- 带层次的路径
- 查询字符串
其实一个URL的几个部分,有些是可以省略的(默认)
- 省略了端口——》浏览器会通过一个默认端口,对于http默认端口是80,对于https默认端口是443
- /也是路径,没省略,只是有点短——》‘/’代表根目录(HTTP服务器的根目录)
一个HTTP服务器提供的资源是很多的,不同的路径,拿到的是不同的资源
https://www.sogou.com/index.html
HTTP协议:应用层协议,用来浏览器和Web服务器之间的交互!
方法 | 说明 |
GET | 获取资源 |
POST | 传输实体主类 |
PUT | 传输文件 |
HEAD | 获得报文首部 |
DELETE | 删除文件 |
OPTIONS | 询问支持的方法 |
TRACE | 追踪路径 |
CONNECT | 要求用隧道协议连接代理 |
LINK | 建立和资源之间的联系 |
UNLNE | 断开连接关系 |
其实在实际开发中,这里的方法,大部分是用不到的,最常见的就两个:GET,POST
天下的HTTP方法是十斗,GET独占八斗,POST占一斗,剩下的方法共分一斗!
GET请求:
- 在浏览器地址栏里直接输入URL
- html里的link , script , img……标签
- 通过js来构造get……
POST请求:
- 最典型的就是登录,登录的时候会涉及到POST
- 上传文件/图片
HTTP请求可以认为是分成四个部分!!
- 首行
- 请求头(header)
- 空行
- 正文(body)
如果是GET请求,没有body
如果是POST请求,一般有body
在抓包的结果中可以看到post的body是程序员自定义的内容!
uid——》唯一身份标识!
可以通过一定的算法,构造出一个长的字符串,每次构造的长字符串都是通用的!
GET和POST之间的区别??(其实没有本质区别,在大部分场景下,彼此之间能相互替代,主要还是使用习惯的差异!)(经典面试题)
- GET也可以给服务器传递一些信息
GET传递的信息一般都是放在query string
POST传递的信息,则是通过body
- 语义上的差别(习惯用法)
GET请求一般是用于从服务器获取数据
POST一般是用于给服务器提交数据
- 幂等:相同的输入,得到的结果也是确定的
GET通常会被设计成幂等的
POST不要求幂等
- 缓存:把请求的结果保存下来了,下次就不必请求了,直接取缓存的结果即可!(前提:幂等!!结果确定且唯一)
GET可以被缓存的
POST则一般不能被缓存
- 网络上的有些说法,有待商讨…………
- GET请求传输的数据存在上限
如:上限的版本:1KB,2KB,1024KB等,实际上rfc标准文档中,对于HTTP GET请求的长度上限明确说明:没有规定!
只不能有些上古时期的浏览器/服务器,实现的时候搞了上限!
- POST比GET更安全
依据就是:如果使用GET请求进行登录,此时用户名,密码可以通过query string来传递,就会出现在地址栏中,很容易被别人看到!
安全:指的是:如果黑客获取到你的数据,你的敏感信息不会泄露,安全核心要素是:加密
认识header(请求报头)——》一堆键值对!
每一行是一个键值对,键和值之间使用的是:(冒号分割),这些键值对都是HTTP事先定义好的,有特定的含义的!!
HOST Host:edu.bitejiuyeke.com
大概描述了服务器所在的地址和端口
HOST这里的地址和端口,用来描述你最终要访问的目标
edu.bitejiuyeke.com这个内容大概率和URL中是一样的,也有一定的情况下是不同的!
Content-length 表示body中的数据长度(字节)
Content-type 表示请求的body中的数据格式
如果是GET请求,则没body,请求中没有这俩字段
如果是POST请求,则有body,请求中必须有这俩字段
User-Agent(简称UA):描述了浏览器和操作系统的版本!
现在User-Agent主要用来区分PC端和移动端
Referer:表示当前页面的“来源”(哪个页面跳转的?)
如果直接通过地址栏输入地址,或者直接点击收藏夹……都没有Referer
Cookie:非常重要的header属性
本质是浏览器给网页提供的本地存储数据的机制
网页,默认是不允许访问你计算机硬盘的(保证安全),cookie相当于浏览器对于访问硬盘做出了明确的限制!cookie就是通过键值对的方式来组织数据的!
注意:cookie中具体存啥内容,也就是程序员自定义的部分!则数据的具体含义,只能开发整个程序员才能知道!
关于cookie的各种疑问??
- Cookie从哪里来??
cookie在的数据来自于服务器,服务器会通过HTTP响应的报头部分(Set—Cookie字段)
服务器来决定浏览器的Cookie要存什么??
- Cookie是在哪里存的??
可以认为是存在与浏览器中,存在于硬盘的!!
Cookie存的时候,是按照浏览器+域名维度来进行分组的,不同浏览器各自存各自的cookie,同一个浏览器的不同域名对应不同的cookie
- Cookie要到哪里去??
回到服务器里
因此Cookie就是浏览器持久化存储数据的一种机制!!
请求正文:body
- spplication/x—www—form—urlencoded
抓取“码云上传头像请求”
- multipart/form—data
抓取山大教务系统的“上传简历功能”
- application/json
抓取“山大教务系统的登录页面”