http
协议中,最常用的就是get
和post
方法。
下面这两种方法感兴趣 的同学都可以自己手动打开网页,通过fiddler抓包来查看具体的数据。
GET
方法是最常用 的http方法,经常用于获取某个服务器上的资源。
在浏览器中输入URL(即网址),浏览器就会发送一个GET请求.
能触发GET请求,或者说能触发http请求的方法有很多,上一篇博客中已经介绍了,这里不再赘述。
GET请求的特点:
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请求一般不能被缓存
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保存的数据。但也有以下两个方法,可以实现类似的功能:
1.LocalStorage
HTML5开始引入的一个机制,浏览器支持一种“键对值”方式来进行储存。通过JS提供了一组API,来操作数据。
这里保存的数据就会持久的储存下去。
2.IndexDB
比较新的浏览器才支持的机制,浏览器内部集成了一个“数据库”支持类似SQL的方式来进行操作数据。
Cookie的功能类似去医院看病时的“就诊卡”,有了这个“就诊卡”,去每个科室的时候就不要报出姓名,直接刷卡就可以知道你的具体信息。也类似于一个“通行证”。
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状态码是干啥的?有啥作用?
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
永久重定向
当浏览器收到这种响应后,后续的请求会被自动的改成新的地址。
状态码 | 英文名称 | 中文描述 |
---|---|---|
100 | Continue | 继续。客户端应继续其请求 |
101 | Switching Protocols | 切换协议。服务器根据客户端的请求切换协议。只能切换到更高级的协议,例如,切换到HTTP的新版本协议 |
200 | OK | 请求成功。一般用于GET与POST请求 |
201 | Created | 已创建。成功请求并创建了新的资源 |
202 | Accepted | 已接受。已经接受请求,但未处理完成 |
203 | Non-Authoritative Information | 非授权信息。请求成功。但返回的meta信息不在原始的服务器,而是一个副本 |
204 | No Content | 无内容。服务器成功处理,但未返回内容。在未更新网页的情况下,可确保浏览器继续显示当前文档 |
205 | Reset Content | 重置内容。服务器处理成功,用户终端(例如:浏览器)应重置文档视图。可通过此返回码清除浏览器的表单域 |
206 | Partial Content | 部分内容。服务器成功处理了部分GET请求 |
300 | Multiple Choices | 多种选择。请求的资源可包括多个位置,相应可返回一个资源特征与地址的列表用于用户终端(例如:浏览器)选择 |
301 | Moved Permanently | 永久移动。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替 |
302 | Found | 临时移动。与301类似。但资源只是临时被移动。客户端应继续使用原有URI |
303 | See Other | 查看其它地址。与301类似。使用GET和POST请求查看 |
304 | Not Modified | 未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端通常会缓存访问过的资源,通过提供一个头信息指出客户端希望只返回在指定日期之后修改的资源 |
305 | Use Proxy | 使用代理。所请求的资源必须通过代理访问 |
306 | Unused | 已经被废弃的HTTP状态码 |
307 | Temporary Redirect | 临时重定向。与302类似。使用GET请求重定向 |
400 | Bad Request | 客户端请求的语法错误,服务器无法理解 |
401 | Unauthorized | 请求要求用户的身份认证 |
402 | Payment Required | 保留,将来使用 |
403 | Forbidden | 服务器理解请求客户端的请求,但是拒绝执行此请求 |
404 | Not Found | 服务器无法根据客户端的请求找到资源(网页)。通过此代码,网站设计人员可设置"您所请求的资源无法找到"的个性页面 |
405 | Method Not Allowed | 客户端请求中的方法被禁止 |
406 | Not Acceptable | 服务器无法根据客户端请求的内容特性完成请求 |
407 | Proxy Authentication Required | 请求要求代理的身份认证,与401类似,但请求者应当使用代理进行授权 |
408 | Request Time-out | 服务器等待客户端发送的请求时间过长,超时 |
409 | Conflict | 服务器完成客户端的 PUT 请求时可能返回此代码,服务器处理请求时发生了冲突 |
410 | Gone | 客户端请求的资源已经不存在。410不同于404,如果资源以前有现在被永久删除了可使用410代码,网站设计人员可通过301代码指定资源的新位置 |
411 | Length Required | 服务器无法处理客户端发送的不带Content-Length的请求信息 |
412 | Precondition Failed | 客户端请求信息的先决条件错误 |
413 | Request Entity Too Large | 由于请求的实体过大,服务器无法处理,因此拒绝请求。为防止客户端的连续请求,服务器可能会关闭连接。如果只是服务器暂时无法处理,则会包含一个Retry-After的响应信息 |
414 | Request-URI Too Large | 请求的URI过长(URI通常为网址),服务器无法处理 |
415 | Unsupported Media Type | 服务器无法处理请求附带的媒体格式 |
416 | Requested range not satisfiable | 客户端请求的范围无效 |
417 | Expectation Failed | 服务器无法满足Expect的请求头信息 |
500 | Internal Server Error | 服务器内部错误,无法完成请求 |
501 | Not Implemented | 服务器不支持请求的功能,无法完成请求 |
502 | Bad Gateway | 作为网关或者代理工作的服务器尝试执行请求时,从远程服务器接收到了一个无效的响应 |
503 | Service Unavailable | 由于超载或系统维护,服务器暂时的无法处理客户端的请求。延时的长度可包含在服务器的Retry-After头信息中 |
504 | Gateway Time-out | 充当网关或代理的服务器,未及时从远端服务器获取请求 |
505 | HTTP Version not supported | 服务器不支持请求的HTTP协议的版本,无法完成处理 |