JavaWeb~http请求常见方法/报头header字段Host、User-Agent、Cookie、Referer、Content-type/Http响应解析及状态码

http请求方法

http协议中,最常用的就是getpost方法。
下面这两种方法感兴趣 的同学都可以自己手动打开网页,通过fiddler抓包来查看具体的数据。

GET请求

GET方法是最常用 的http方法,经常用于获取某个服务器上的资源。
在浏览器中输入URL(即网址),浏览器就会发送一个GET请求.
能触发GET请求,或者说能触发http请求的方法有很多,上一篇博客中已经介绍了,这里不再赘述。

GET请求的特点

  • 首行的第一部分为GET
  • URL中的查询字符串可以为空,也可不为空
  • header部分有若干个键值对结构
  • body部分为空

POST请求

POST请求也是一种常见的方法,一般用于将用户的数据提交给服务器的时候。
最常见的情况就是登录。
post请求的特点:
1.首行的第一部分为POST
2.URL 的querystring 一般为空,但是,也完全可以加上querystring
3.header`部分有若干个键值对~
4.body部分一般不为空,但是,如果,body为空,也完全可以。

POST请求中body正文部分,也支持很多的格式。
这个格式的类型,由请求头中的Content-Type字段表示.
body的长度,由请求头中的Content-Length字段来表示。(该长度以字节为单位。)

结合上面的讨论
HTTP 协议中的各种方法之间(尤其是GET和POST之间)没有本质区别!!
细节上有一些小区别:
1.数据位置:GET请求把自定义数据存放到query string(查询字符串中),POST把自定义数据放到body中。
2.语义区别:GET一般用于”获取数据“,POST一般用于提交数据。
3.幂等性:GET请求一般会设计成”幂等“的,POST请求一般不要求设计成”幂等“

幂等:某个请求,执行一次和执行多次,效果相同。
4.可缓存:GET请求一般会被缓存,POST请求一般不能被缓存

其他请求方法

  • PUT方法:和POST方法类似,具有幂等性,一般用于更新数据。
  • DELETE方法:可以删除服务器指定的资源
  • OPTIONS:返回服务器所支持的请求格式
  • HEAD:类似于GET方法,只不过响应正文不返回,只返回响应头。
  • TRACE: 回显服务器端收到的 请求,测试时会用到该方法。
  • CONNECT:预留。了解即可,使用不多。

认识请求报头(header)

header 的整体的格式是”键值对“结构~
每个键值对占一行,键和值之间使用分号分割。

注意:报头的种类有很多,这里只介绍一些比较典型的。

HOST
Host:v.bitedu.vip

描述了主机的地址/端口号~
地址可以是域名,也可以是IP

Content-Length:

表示body正文中的数据长度,以字节为单位。
Content-Type:
表示body中的数据格式的类型。

User-Agent(UA)
描述了浏览器/操作系统的属性和一些版本信息~

如下:

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

不同的浏览器版本支持的数据显示格式不一样,早期的一些浏览器只能显示文本样式,随着互联网的发展,后来的浏览器才渐渐能显示图片,音频,视频等样式。

Referer:
表示当前这个页面是从哪里来的(从哪个页面跳转过来的)

搜索引擎中的广告依靠这个referer值来统计流量。

Cookie
这个是http请求报头中最难理解的一个字段~

Cookie的值是一个字符串(程序员自己定义的字符串),Cookie相当于浏览器这边进行本地存储的一种机制。
Cookie储存空间有限(取决于浏览器具体的实现,一般都不是很大),因此Cookie只能保存一些简单的信息。最典型的就是用户的身份信息
Cookie的作用就像是“身份标识”。一般用于网页登录中,当我们输入用户信息,浏览器会发送请求,这时网页可能会自动写入Cookie,或者当服务器返回响应结果时,在响应头header中通过Set-Cookie字段写入。

在这里插入图片描述

如何查看网页Cookie

随便打开一个网页,点击协议名前的小锁符号,在网页权限先有正在使用的Cookie,点击即可查看
在这里插入图片描述
在这里插入图片描述

实现登录功能的其他方法

网站的登录功能依赖于Cookie,但也不是完全依赖于Cookie。
Cookie主要可以保存一些信息在本地,下次登录访问时直接使用Cookie保存的数据。但也有以下两个方法,可以实现类似的功能:
1.LocalStorage
HTML5开始引入的一个机制,浏览器支持一种“键对值”方式来进行储存。通过JS提供了一组API,来操作数据。
这里保存的数据就会持久的储存下去。
2.IndexDB
比较新的浏览器才支持的机制,浏览器内部集成了一个“数据库”支持类似SQL的方式来进行操作数据。
在这里插入图片描述

Cookie的功能类似去医院看病时的“就诊卡”,有了这个“就诊卡”,去每个科室的时候就不要报出姓名,直接刷卡就可以知道你的具体信息。也类似于一个“通行证”。

认识请求正文(body)

body中可以存放任何格式的数据,但有几种格式是比较常见的。
在请求头header中,有Content-type字段,该字段后面的值就表示body正文中的数据格式。
常见的数据格式有以下几种:
1.application/x-www-form-urlencoded:
当Content-type的值是上面的类型的时候,
此时的body是非常类似查询字符串的键值对结构。

当我们在网页上上传一个头像时,body的正文中,就会出现图片数据。但图片本身是一个二进制数据,而http协议是文本协议,不能直接传输二进制数据。此时正文中看到的图片数据,是针对图片内容,进行了Base64编码~(Base64算法,就是把二进制数据转换成文本数据的一种编码方式)
2.multipart/form-data
主要用来上传文件~
3.application/json
json是一种非常常用的数据组织的格式,类似于JS中组织对象的格式

HTTP响应

认识状态码(status code)

HTTP状态码是干啥的?有啥作用?
HTTP状态码负责表示客户端HTTP请求的返回结果,标记服务器的处理是否正常,通知是否出现错误等。其实可以顾名思义,就是表示当客户端发送请求后,服务器的状态。

从服务器返回请求的结果

在这里插入图片描述

状态码的类别

在这里插入图片描述

具体解析

一些常见的状态码如下:

200 ok
表示访问成功
404 Not Found
没有找到资源
403Forbidden
访问被拒绝
405 Method Not Allowed
服务器方法不支持
500 Internal Server Error
服务器出现内部错误
504 Gateway Timeout
请求超时。(当服务器负载比较大的时候,服务器处理单挑请求的消耗时间就会增长)
302 Move temporarily
临时重定向。

类似于手机的“呼叫转移”功能。

301 Moved Permanently
永久重定向

当浏览器收到这种响应后,后续的请求会被自动的改成新的地址。

状态码表

状态码英文名称中文描述
100Continue继续。客户端应继续其请求
101Switching Protocols切换协议。服务器根据客户端的请求切换协议。只能切换到更高级的协议,例如,切换到HTTP的新版本协议
200OK请求成功。一般用于GET与POST请求
201Created已创建。成功请求并创建了新的资源
202Accepted已接受。已经接受请求,但未处理完成
203Non-Authoritative Information非授权信息。请求成功。但返回的meta信息不在原始的服务器,而是一个副本
204No Content无内容。服务器成功处理,但未返回内容。在未更新网页的情况下,可确保浏览器继续显示当前文档
205Reset Content重置内容。服务器处理成功,用户终端(例如:浏览器)应重置文档视图。可通过此返回码清除浏览器的表单域
206Partial Content部分内容。服务器成功处理了部分GET请求
300Multiple Choices多种选择。请求的资源可包括多个位置,相应可返回一个资源特征与地址的列表用于用户终端(例如:浏览器)选择
301Moved Permanently永久移动。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替
302Found临时移动。与301类似。但资源只是临时被移动。客户端应继续使用原有URI
303See Other查看其它地址。与301类似。使用GET和POST请求查看
304Not Modified未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端通常会缓存访问过的资源,通过提供一个头信息指出客户端希望只返回在指定日期之后修改的资源
305Use Proxy使用代理。所请求的资源必须通过代理访问
306Unused已经被废弃的HTTP状态码
307Temporary Redirect临时重定向。与302类似。使用GET请求重定向
400Bad Request客户端请求的语法错误,服务器无法理解
401Unauthorized请求要求用户的身份认证
402Payment Required保留,将来使用
403Forbidden服务器理解请求客户端的请求,但是拒绝执行此请求
404Not Found服务器无法根据客户端的请求找到资源(网页)。通过此代码,网站设计人员可设置"您所请求的资源无法找到"的个性页面
405Method Not Allowed客户端请求中的方法被禁止
406Not Acceptable服务器无法根据客户端请求的内容特性完成请求
407Proxy Authentication Required请求要求代理的身份认证,与401类似,但请求者应当使用代理进行授权
408Request Time-out服务器等待客户端发送的请求时间过长,超时
409Conflict服务器完成客户端的 PUT 请求时可能返回此代码,服务器处理请求时发生了冲突
410Gone客户端请求的资源已经不存在。410不同于404,如果资源以前有现在被永久删除了可使用410代码,网站设计人员可通过301代码指定资源的新位置
411Length Required服务器无法处理客户端发送的不带Content-Length的请求信息
412Precondition Failed客户端请求信息的先决条件错误
413Request Entity Too Large由于请求的实体过大,服务器无法处理,因此拒绝请求。为防止客户端的连续请求,服务器可能会关闭连接。如果只是服务器暂时无法处理,则会包含一个Retry-After的响应信息
414Request-URI Too Large请求的URI过长(URI通常为网址),服务器无法处理
415Unsupported Media Type服务器无法处理请求附带的媒体格式
416Requested range not satisfiable客户端请求的范围无效
417Expectation Failed服务器无法满足Expect的请求头信息
500Internal Server Error服务器内部错误,无法完成请求
501Not Implemented服务器不支持请求的功能,无法完成请求
502Bad Gateway作为网关或者代理工作的服务器尝试执行请求时,从远程服务器接收到了一个无效的响应
503Service Unavailable由于超载或系统维护,服务器暂时的无法处理客户端的请求。延时的长度可包含在服务器的Retry-After头信息中
504Gateway Time-out充当网关或代理的服务器,未及时从远端服务器获取请求
505HTTP Version not supported服务器不支持请求的HTTP协议的版本,无法完成处理
  • 15
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值