客户端发给服务器的HTTP请求,是在协商,告诉服务器我想要什么,我的喜好,每个客户端的喜好都是不一样的,客户端喜欢的,服务器不一定支持,所以要告诉服务器,我到底喜欢多少的是什么,要全部讲出来,让服务器根据情况,进行响应
状态码(Status Code)
◼ 在RFC 2616 10.Status Code Definitions规范中定义
状态码指示HTTP请求是否已成功完成
◼ 状态码可以分为5类
信息响应:100~199
成功响应:200~299
重定向:300~399
客户端错误:400~499
服务器错误 :500~599
有一些数值是一直没有用上的
常见状态码
每一个状态码都会有一个对应的英文描述
状态码,代表的是你这次请求状态如何
客户端拿到这些码后,就能精准的知道自己哪里错了,我为什么错了,然后根据这些错误信息,调整自己的请求
◼ 100 Continue
请求的初始部分已经被服务器收到,并且没有被服务器拒绝。客户端应该继续发送剩余的请求,如果请求已经完成,就忽略这个响应
允许客户端发送带请求体的请求前,判断服务器是否愿意接收请求(服务器通过请求头判断)
在某些情况下,如果服务器在不看请求体就拒绝请求时,客户端就发送请求体是不恰当的或低效的
这个是比较少见的
◼ 200 OK:请求成功
客户端发送请求过去,服务器返回一个消息,就是一次成功的响应,那怕是登录失败
如果服务器返回的是开发人员设计的状态码400,那就是400,即使它是一次成功的响应
开发人员设不设计,由公司决定
◼ 302 Found:请求的资源被暂时的移动到了由Location头部指定的URL上
由服务器来决定客户端等一下重定向到什么页面
客户端在重新发送一个请求,服务器返回给客户端重定向的界面
前后端分离的话,具体跳转是由前端控制的,这个时候是不用重定向的,前端根据后台返回的数据,自己使用路由进行跳转
如果网站没有进行跳转,可能进行的是单页应用
Ctrl+F5:忽略缓存,强制刷新
◼ 304 Not Modified:说明无需再次传输请求的内容,也就是说可以使用缓存的内容
内容是从缓存里面直接拿的
服务器返回304,客户端缓存却被清了,那就显示不出来页面了,但是跟服务器没有关系,你客户端要清跟我有什么关系,我服务器又没有这么智能
缓存由请求头和响应头里面的多个字段共同决定
◼ 400 Bad Request:由于语法无效,服务器无法理解该请求
除了HTTP格式以外,还有可能是域名访问的参数不符合服务器端的需求
格式是对的,开发还给你400,说明你的访问参数有问题
状态码是由开发给的,它想给什么就给什么,当然合格的开发是不回去随便给的
格式不对,服务器就可以检查到,直接给你一个400,根本就不用经手开发人员
◼ 401 Unauthorized:由于缺乏目标资源要求的身份验证凭证
打开网站,直接弹窗,要我们输账号,现在很少见了,都是在登录页面输账号
◼ 403 Forbidden:服务器端有能力处理该请求,但是拒绝授权访问
◼ 404 Not Found:服务器端无法找到所请求的资源
◼ 405 Method Not Allowed:服务器禁止了使用当前HTTP方法的请求
假设,我们在页面添加购物信息,点击添加发送,却是用get请求,这个时候服务器返回405,因为它只支持POST请求添加数据,因为我们使用的方法不对
添加商品,服务器端要求必须要用POST请求方法,不然我就返回405给你
我有能力处理这个方法,但是我不想给你
◼ 406 Not Acceptable:服务器端无法提供与Accept-Charset以及Accept-Language指定的值相匹配的响应
客户端想要的,我给不了,我无能为力
◼ 408 Request Timeout:服务器想要将没有在使用的连接关闭
一些服务器会在空闲连接上发送此信息,即便是在客户端没有发送任何请求的情况下
服务器想要关闭这个连接
从HTTP/1.1开始可以进行长连接,在建立长连接之后,没有收到客户端发送过来的请求,这个时候服务器就可以发送408
◼ 500 Internal Server Error:所请求的服务器遇到意外的情况并阻止其执行请求
服务器崩了,服务器出问题了
说明后台工程师写代码有问题
服务器返回的错误消息,可以由服务器端的开发人员来控制
服务器返回的状态码仅供参考,一般正常的开发返回的状态码是没有问题的,主要是用来给客户端提供参考,方便大家调代码,协作,不能够去乱搞去瞎写
◼ 501 Not Implemented:请求的方法不被服务器支持,因此无法被处理
服务器必须支持的方法(即不会返回这个状态码的方法)只有 GET 和 HEAD,其它方法可以不支持
◼ 502 Bad Gateway:作为网关或代理角色的服务器,从上游服务器(如tomcat)中接收到的响应是无效的
◼ 503 Service Unavailable:服务器尚未处于可以接受请求的状态
通常造成这种情况的原因是由于服务器停机维护或者已超载
服务器忙不过来了,一旦服务器开机,它是能够处理过来的,它是一台正常的服务器
form提交—常用属性
表单提交:在表单里面填好数据,然后提交到服务器
◼ action:请求的URI
相对路径也可以,遇到/的时候,会自动的把域名给补齐
服务器从html的属性当中取出值
◼ method:请求方法(GET、POST)
对于表单来说,只支持这两种,像其它的比如PUT,根本就不支持
由服务器决定,用这两种中的哪一种
这不是请求体,这是浏览器对URL进行解析,展示出来的
这才是请求体
◼ enctype:POST请求时,请求体的编码方式
只有在POST请求时才有用,因为GET请求没有请求体
控制你的请求体长什么样子
application/x-www-form-urlencoded(默认值)
请求体的编码方式
✓ 用&分隔参数,用=分隔键和值,字符用URL编码方式进行编码
编码的方式过于简单,不适合大的数据传输,比如文件传输,传输的时候只能传输文件名
multipart/form-data
内容类型也跟着变
请求体变成一段一段的
这个是分割线
key和value之间有两个回车换行
✓ 文件上传时必须使用这种编码方式
getParameter只能解析用&隔开的数据
可以通过第三方库,commons-fileupload来解析multipart/form-data编码的请求体
form提交—multipart/form-data
close-delimiter
1*:至少一个
一个参数
delimiter
body-part
必须要严格按照格式来,少一个分号都不行,因为它会切割不准确,到时候肯定解析不出来