方法 | 说明及支持的版本 |
---|---|
GET | 获取资源(1.0、1.1) |
POST | 传输实体主体 (1.0、1.1) |
PUT | 传输文件(1.0、1.1) |
HEAD | 获得报文首部 (1.0、1.1) |
DELETE | 删除文件(1.0、1.1) |
OPTIONS | 询问支持的方法(1.1) |
TRACE | 追踪路径(1.1) |
CONNECT | 要求用隧道协议连接代理 (1.1) |
LINK | 建立资源之间的联系(1.0) |
UNLINE | 断开连接关系 (1.0) |
请求方法:表示具体是以什么方式来操作资源:获取资源、保存资源、修改资源、删除资源,语义上,操作资源的类型
这里只是规范上的约定,具体服务端代码中要不要这样实现,由程序员自己决定
GET是最常用的HTTP方法,常用于获取服务器上的某个资源(不一定遵守)
在浏览器中直接输入URL,此时浏览器就会发送出一个GET请求,另外,HTML中的link,img,script等标签,也会触发GET请求
后面还会学习使用JavaScript中的ajax也能构造GET请求
打开Fiddler,访问搜狗主页,观察抓包结果:
GET请求的特点:
POST方法也是一种常见的方法,多用于提交用户输入的数据给服务端(例如登陆页面)
通过HTML中的form标签可以构造POST请求,或者使用JavaScript的ajax也可以构造POST请求
使用Fiddler观察POST方法
例如gitee的登陆页面
POST请求的特点
谈谈GET和POST的区别
补充
这些方法的HTTP请求可以使用ajax来构造(也可以通过一些第三方工具)
作用:标识http数据包的属性
header的整体的格式也是“键值对”结构
每个键值对占一行,键和值之间使用冒号分割
常用的键:
multipart/form-data: 简称form-data格式,一般用于请求,不用于响应
简单认识:可以发送多个信息(字段),其中每个字段可以是简单的数据类型(数值型,字符串,boolean等),也可以是复杂的数据类型(如图片、视频等等)
也就是说,form-data可以上传任意多的数据,可以是多个文件
application/x-www-form-urlencoded: 表单格式
多个信息(字段):每个字段 键=值,多个字段之间&间隔,和queryString格式一样,这里的字段值,只能是简单的数据类型
image/jpeg: 指定一个具体的文件类型
用于客户端发送请求,就只能上传一个文件;用于服务端返回响应,也只能返回一个图片
application/json:json格式: 请求和响应都常用
如何保存:由服务端响应的http数据包中,设置Set-Cookie头(一个或多个)
Cookie是和网站关联,不同的网站有不同的Cookie(保存的信息如账号等不同网站保存为本地不同的Cookie)
如何使用:浏览器在每次请求时,自动携带在请求Cookie头中
保存的数据,是什么格式
多组键值对(键=值,多个键值对之间分号间隔)
Session:
一种服务端保存数据的技术: 由于HTTP协议是一种无状态(一次请求一次响应,服务端是无法感知之前登录的用户,服务端没有保存用户状态)的协议,在服务端使用一个Map
Cookie和Session:
Cookie:客户端的技术,指客户端保存在本地的Cookie信息
Session:服务端的技术,指服务端保存的会话信息(一次会话,指用户登录后,没有退出前)
这里拿办理会员卡业务来说明(黑色字为实际事务,红色为对应的客户端与服务端的操作)
补充:
由三位数字构成,标识服务器对客户端这次请求的处理结果
HTTP响应报文,都是服务端返回的(程序可以设置内容)
状态码也可以由程序来设置
这是一个最常见的状态码,表示服务端对当次请求处理成功(约定的规范)
如果程序有bug,如出现异常,应该返回其他状态码(标识处理失败的500状态码),但返回了200,就需要程序员去检查后端代码逻辑
标识请求的url路径,没有对应的资源
表示之前已经访问过的资源,本次请求时没有被修改过
客户端就可以直接从缓存中获取
如果需要抓包看到有真实的响应内容,可以ctrl+f5强制刷新
表示访问被拒绝,有的页面通常需要用户具有一定的权限才能访问(登录后才能访问),如果用户没有登陆直接访问,就容易见到403
方法不支持
服务端提供的某个url资源的服务,其方法,可以是一个或多个(假设是GET、POST)
如果客户端请求的时候,请求方法不在服务提供的方法范围内(假设是PUT),就返回405.
如果出现405状态码,要检查到底是前端请求方法不对(如上边的例子,前端请求方法改为GET或POST),也要检查是否是后端提供的方法不对(如上边的例子,后端提供的服务方法,也要提供PUT方法)
前后端要约定使用同样的方法
服务器出现内部错误,一般是服务器的代码执行过程中遇到了一些特殊情况(服务器异常崩溃)会产生这个状态码,咱们平时常用的网站很少会出现500(但是偶尔也能看到)
如果出现500状态码,一定要检查后端的控制台异常堆栈信息,然后定位后端代码的问题
请求在服务端处理超时
服务端有返回响应的时间限制(这里也可以在服务端设置),发现处理时间超过这个时间(如请求很多(并发高),程序处理不过来;还可能是程序效率低),就返回504
服务端如果不设置时间限制,服务端就一直运行
客户端请求是有时间限制的(可以在js代码中设置),如果服务端没有在时间限制内返回,就报错(也可以执行js代码定义的方法)
临时重定向
理解“重定向”
就相当于手机号码中的“呼叫转移”功能
比如我原本的手机号123-1234-1234,后来换了一个新号码123-4567-1234,那么不需要让我的朋友知道新号码
只需要我去办理一个呼叫转移业务,其他人拨打123-1234-1234,就会自动转移到123-4567-1234
永久重定向
临时和永久的区别,只是服务端某个资源是临时改变,之后要改回来,还是永久改变了。
在前后端两端网络编程时:
A(url 1)->B 抓取请求
B->A(url 1) 抓取响应
通过抓包来查看http数据包中的内容,来定位问题
一个网页中,可能发起多个http请求
还会有多个页面的跳转