HTTP协议,Http常⽤状态码
HTTP协议-Request
HTTP报⽂是⾯向⽂本的,报⽂中的每⼀个字段都是⼀些ASCII码串,各个字段的长度是不确定的。HTTP有两类报⽂:请求报⽂和响应报⽂。
1.1HTTP请求报⽂
-⼀个HTTP请求报⽂由请求⾏(requestline)、请求头部(header)、空⾏和请求数据4个部分组成
<request-line>
<headers>
<blankline>
[<request-body>
1.1.2求情头-RequestHeader
-第⼀⾏:三个字段,中间⽤空格隔开请求⽅法URLHTTP版本如:GET/TP/1.1。常⽤的请求⽅法:HTTP协议的请求⽅法有GET、POST、HEAD、PUT、
DELETE、OPTIONS、TRACE、CONNECT。
1.1.3GET⽅法
GET⽅法要求服务器将URL定位的资源放在响应报⽂的数据部分,回送给客户端。意思是:GET⽅法会把请求数据附在URL后⾯⼀并提交到后台URL与请求数据之间⽤?问
号分割,(?)之后表⽰URL结束,请求数据开始,多个请求数据之间使⽤&and符号连接
如下图:我省略了关键信息的请求头
GET/s?wd=博客园%20c_G-17&rsv_spt=1&...省略部分请求数据...HTTP/1.1
Host:
Connection:keep-alive
Cache-Control:max-age=0
Upgrade-Incure-Requests:1
Ur-Agent:Mozilla/5.0(WindowsNT6.3;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/55.0.2883.75Safari/537.36
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Referer:/
Accept-Encoding:gzip,deflate,sdch,br
Accept-Language:zh-CN,zh;q=0.8
Cookie:xxxxx;
BDUSS=xxxx
可以看到,GET⽅式的请求⼀般不包含”请求内容”部分,请求数据以地址的形式表现在请求⾏。
地址中”?”之后的部分就是通过GET发送的请求数据,我们可以在地址栏中清楚的看到,各个数据之间⽤”&”符号隔开。显然,这种⽅式不适合传送私密数据。另外,由于不同的
浏览器对地址的字符限制也有所不同,⼀般最多只能识别1024个字符,所以如果需要传送⼤量数据的时候,也不适合使⽤GET⽅式。
1.1.4POST⽅法
POST⽅法将请求参数封装在HTTP请求数据中,以名称/值的形式出现,可以传输⼤量数据,这样POST⽅式对传送的数据⼤⼩没有限制,⽽且也不会显⽰在URL中
以登录百度为例:发送POST请求->数据不会跟在URL后⾯,⽽是在Body请求内容⾥
下⾯为请求:请求内容Form表单中有很多内容,太长了,我就省略了,留下了部分关键的
请求内容与请求头之间⽤空⾏隔开如下
POST/v2/api/?loginHTTP/1.1
Host:
Connection:keep-alive
Content-Length:1415
Cache-Control:max-age=0
Origin:
Upgrade-Incure-Requests:1
Ur-Agent:Mozilla/5.0(WindowsNT6.3;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/55.0.2883.75Safari/537.36
Content-Type:application/x-www-form-urlencoded
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Referer:/
Accept-Encoding:gzip,deflate,br
Accept-Language:zh-CN,zh;q=0.8
Cookie:xxxx
staticpage=/&chart=UTF-8&token=省略&tpl=省略&apiver=省略&tt=省略&isPhone=fal&detect=1&gid=不给看&logintype=dialogLogin&logLoginType=pc_loginDialog&urname=这⼉是我的⽤户名&password=这
可以看到,POST⽅式请求⾏中不包含数据字符串,这些数据保存在”请求内容”部分,各数据之间也是使⽤”&”符号隔开。POST⽅式⼤多⽤于页⾯的表单中。因为POST也能完成
GET的功能,因此多数⼈在设计表单的时候⼀律都使⽤POST⽅式,其实这是⼀个误区。GET⽅式也有⾃⼰的特点和优势,我们应该根据不同的情况来选择是使⽤GET还是使⽤
POST。
1.2POST中内容解释
-以下为POST中的内容解释:从上⽽下顺序排列2.请求头3.空⾏4.请求数据
1.2.1HEAD
HEAD就像GET,只不过服务端接受到HEAD请求后只返回响应头,⽽不会发送响应内容。当我们只需要查看某个页⾯的状态的时候,使⽤HEAD是⾮常⾼效的,因为在传输的
过程中省去了页⾯内容。
1.2.2请求头
-请求头部由关键字/值对组成,每⾏⼀对,关键字和值⽤英⽂冒号“:”分隔。请求头部通知服务器有关于客户端请求的信息,典型的请求头有:
-Agent:产⽣请求的浏览器类型。
:客户端可识别的内容类型列表。
:请求的主机名,允许多个域名同处⼀个IP地址,即虚拟主机。
1.2.3空⾏
最后⼀个请求头之后是⼀个空⾏,发送回车符和换⾏符,通知服务器以下不再有请求头。
1.2.4请求数据
请求数据不在GET⽅法中使⽤,⽽是在POST⽅法中使⽤。POST⽅法适⽤于需要客户填写表单的场合。与请求数据相关的最常使⽤的请求头是Content-Type和Content-
Length。
1.3HTTP请求报⽂
HTTP响应也由三个部分组成,分别是:状态⾏、消息报头、响应正⽂。
如下所⽰,HTTP响应的格式与请求的格式⼗分类似:
<status-line>
<headers>
<blankline>
[<respon-body>]
列如:刚才登录百度给我返回的HTTP报⽂如下
HTTP/1.1200OK
Access-Control-Expo-Headers:Trace-ID
Cache-Control:public
Connection:keep-alive
Content-Encoding:gzip
Content-Type:text/html
Date:Mon,08Oct201810:41:47GMT
Expires:0
Last-Modified:Mon,08Oct201810:41:4610OctGMT
P3p:省略
Pragma:public
Server:Apache
Strict-Transport-Security:max-age=31536000
Trace-Id:C6633601
Tracecode:省略
Tracecode:省略
Vary:Accept-Encoding
Transfer-Encoding:chunked
1.4HTTP请求GET和POST的区别
提交,请求的数据会附在URL之后(就是把数据放置在HTTP协议头<request-line>中),以?分割URL和传输数据,多个参数⽤&连接;例如:?
name=hyddd&password=idontknow&verify=%E4%BD%A0%E5%A5%BD。如果数据是英⽂字母/数字,原样发送,如果是空格,转换为+,如果是中⽂/其他字符,则直接
把字符串⽤BASE64加密,得出如:%E4%BD%A0%E5%A5%BD,其中%XX中的XX为该符号以16进制表⽰的ASCII。
POST提交:把提交的数据放置在是HTTP包的包体<request-body>中。上⾯我登录百度的事例,请求体就是实际的传输部分数据(嫌烦我省略了部分,还剩部分)
因此,GET提交的数据会在地址栏中显⽰出来,⽽POST提交,地址栏不会改变
2.传输数据的⼤⼩:
⾸先声明,HTTP协议没有对传输的数据⼤⼩进⾏限制,HTTP协议规范也没有对URL长度进⾏限制。⽽在实际开发中存在的限制主要有:
GET:特定浏览器和服务器对URL长度有限制,例如IE对URL长度的限制是2083字节(2K+35)。对于其他浏览器,如Netscape、FireFox等,理论上没有长度限制,其限制取
决于操作系统的⽀持。
因此对于GET提交时,传输数据就会受到URL长度的限制。
POST:由于不是通过URL传值,理论上数据不受限。但实际各个WEB服务器会规定对post提交数据⼤⼩进⾏限制,Apache、IIS6都有各⾃的配置。
3.安全性:
POST的安全性要⽐GET的安全性⾼。注意:这⾥所说的安全性和上⾯GET提到的“安全”不是同个概念。上⾯“安全”的含义仅仅是不作数据修改,⽽这⾥安全的含义是真正
的Security的含义,⽐如:通过GET提交数据,⽤户名和密码将明⽂出现在URL上,因为(1)登录页⾯有可能被浏览器缓存,(2)其他⼈查看浏览器的历史纪录,那么别⼈就
可以拿到你的账号和密码了,
HTTP常⽤状态码
楼主参考的Djangorestful规范
1.1xx:系列表⽰请求已接收,继续处理
100
2.2xx:成功--表⽰请求已被成功接收、理解、接受
200ok表⽰请求成功返回⽹页
201CREATED-[POST/PUT/PATCH]:⽤户新建或修改数据成功。
202Accepted-[*]:表⽰⼀个请求已经进⼊后台排队(异步任务)
204NOCONTENT-[DELETE]:⽤户删除数据成功
3.3xx:表⽰重定向,要完成请求必须进⾏更进⼀步的操作
301永久跳转
302临时跳转,请求的⽹页已临时跳转到新位置。
4.4xx:客户端错误--请求有语法错误或请求⽆法实现
400INVALIDREQUEST-[POST/PUT/PATCH]:⽤户发出的请求有错误,服务器没有进⾏新建或修改数据的操作,该操作是幂等的
401BadRequest表⽰⽤户没有权限(令牌、⽤户名、密码错误)。这个状态代码必须和WWW-Authenticate报头域⼀起使⽤。配合⾝份验证
403Forbiddent表⽰⽤户得到授权(与401错误相对),但是访问是被禁⽌的,服务器收到请求但是拒绝提供服务
404NotFound
406NotAcceptable-[GET]:⽤户请求的格式不可得(⽐如⽤户请求JSON格式,但是只有XML格式)。
410Gone-[GET]:⽤户请求的资源被永久删除,且不会再得到的。
422Unprocesableentity-[POST/PUT/PATCH]当创建⼀个对象时,发⽣⼀个验证错误。
5.5xx:服务器端错误--服务器未能实现合法的请求
500-InternalServerError(内部服务器错误)
502-BadGateway(坏的⽹关),⼀般是⽹关服务器请求后端服务时,后端服务没有按照http协议正确返回结果。
503-ServiceUnavailable(服务当前不可⽤),可能因为超载或停机维护。
504-GatewayTimeout(⽹关超时),⼀般是⽹关服务器请求后端服务时,后端服务没有在特定的时间内完成服务。
本文发布于:2022-11-27 14:03:15,感谢您对本站的认可!
本文链接:http://www.wtabcd.cn/fanwen/fan/90/31424.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |