http头authorization值格式错误_Http协议详解(深入理解)

http头authorization值格式错误_Http协议详解(深⼊理解)种⼀棵树最好的时间是⼗年前,其次是现在
The best time to plant a tree was ten years ago,then is here and now
前⾔
实际开发过程中肯定离不开http请求,⾯试的时候也难免会碰到⾯试官让你谈⼀谈http的场景。如果上来就是"三连"起始⾏、header、body,是⼀个应⽤层协议,没到三句话结束了,那可以想象场⾯有多尴尬。本篇⽂章主要以HTTP1.1展开讲解。
了解HTTP协议
HTTP是⼀种超⽂本传输协议,HTTP是缩写,它的全英⽂名是HyperText Transfer Protocol。由请求和响应两部分构成,是⼀个标准的客户端服务器模型。HTTP协议是建⽴在TCP协议之上的,是⼀个⽆状态的协议。
什么是超⽂本?
超⽂本包含有⽂本信息(html、css、javascript)和各种多媒体信息,例如图形、声⾳、图像、视频等。
HTTP应⽤于客户端与服务端之间的通信,client客户端向server服务端发起请求,server服务端响应client客户端的请求,所以说HTTP是基于客户端/服务端的架构模型。
HTTP的⼯作原理
HTTP协议定义Web客户端如何从Web服务器请求Web页⾯,以及服务器如何把Web页⾯传送给客户端。HTTP协议采⽤了请求/响应模型。客户端向服务器发送⼀个请求报⽂,请求报⽂包含请求的⽅法、URL、协议版本、请求头部和请求数据。服务器以⼀个状态⾏作为响应,响应的内容包括协议的版本、成功或者错误代码、服务器信息、响应头部和响应数据。
以下是 HTTP 请求/响应的步骤:
虚拟电子围栏
1. 客户端连接到Web服务器通常我们再浏览器输⼊⼀个⽹址并点击回车后,浏览器也就是我们所说的客户端会跟对应的Web服务器建⽴
⼀个连接。(连接的过程涉及TCP的三次握⼿)
2. 发送HTTP请求客户端向Web服务器发送⼀个⽂本的请求报⽂,⼀个请求报⽂由请求⾏、请求头部、空⾏和请求数据4部分组成。
3. 服务器处理请求并响应HTTP并返回报⽂Web服务器解析请求,定位请求资源。服务器将资源复本写到TCP套接字,由客户端读取。
⼀个响应报⽂由响应⾏、响应头、空⾏和响应数据4部分组成。
4. 断开TCP连接若connection 模式为close,则服务器主动关闭TCP连接,客户端被动关闭连接,释放TCP连接;若connection 模式为
keepalive,则该连接会保持⼀段时间,在该时间内可以继续接收请求(断开连接的过程涉及TCP的四次挥⼿);
5. 客户端浏览器解析HTML内容客户端浏览器⾸先解析状态⾏,查看表明请求是否成功的状态代码。然后解析每⼀个响应头,响应头告
知以下为若⼲字节的HTML⽂档和⽂档的字符集。客户端浏览器读取响应数据HTML,根据HTML的语法对其进⾏格式化,并在浏览器窗⼝中显⽰。
例如:在浏览器地址栏键⼊URL,按下回车之后会经历以下流程:
1. 浏览器向 DNS 服务器请求解析该 URL 中的域名所对应的 IP 地址;
2. 解析出 IP 地址后,根据该 IP 地址和默认端⼝ 80,和服务器建⽴TCP连接;
3. 服务器响应浏览器发来的请求,并把对应的响应数据发送给浏览器;
4. 断开 TCP连接;
5. 浏览器解析响应报⽂的响应体数据并显⽰内容;
HTTP的特点
HTTP都是由客户端发起的,由服务端响应消息的。
HTTP协议是⽆状态的,每个HTTP请求都是独⽴的,任何的两次HTTP请求之间是不存在必然联系的。
⽆连接,限制每次连接只处理⼀个请求,当⼀次请求处理结束后,通信会被断开,下⼀次发起请求⼜是⼀个新的连接,
采⽤这种⽅式可以节省传输所花费的时间。
HTTP 1.0版本的主要缺点:HTTP 1.0规定浏览器与服务器只保持短暂的连接,浏览器的每次请求都需要与服务器建⽴⼀个TCP连接,服务器完成请求处理后⽴即断开TCP连接,服务器不跟踪每个客户也不记录过去的请求。
HTTP 1.1版本同样是⽆状态协议,但它引⼊了cookie机制,更好的实现了请求的状态管理。同时它增加了长连接功能,可以在请求处理结束后继续保持连接。
HTTP的构成
HTTP协议的请求报⽂和响应报⽂都由以下四部分组成
1. 请求⾏
2. 请求头
3. 空⾏
4. 消息主体
挡风抑尘墙
请求报⽂
下⽅是通过抓包⼯具抓取的请求报⽂信息
⽅法
Vital Task OPTIONS 返回服务器针对特定资源所⽀持的HTTP请求⽅法,也可以利⽤向web服务器发送‘*’的请求来测试服务器的功能性
HEAD 向服务器索与GET请求相⼀致的响应,只不过响应体将不会被返回。这⼀⽅法可以再不必传输整个响应内容的情况下,就可以获取包含在响应
⼩消息头中的元信息。
GET 请求指定的页⾯信息,并返回实体主体。
POST 向指定资源提交数据进⾏处理请求(如提交表单或者上传⽂件)。数据被包含在请求体中。POST请求可能会导致新的资源的建⽴和/或已有资源
的修改。
DELETE 请求服务器删除指定的页⾯。
PUT 客户端向服务器传送的数据取代指定的⽂档的内容。
TRACE 回显服务器收到的请求,主要⽤于测试或诊断。
CONNECT HTTP/1.1 协议中预留给能够将连接改为管道⽅式的代理服务器。
PATCH
是对 PUT ⽅法的补充,⽤来对已知资源进⾏局部更新 。请求⾏
眼镜清洗剂请求⾏有请求⽅法、URL字段、HTTP协议版本号三部分组成
请求⽅法共有⼋种:
HEAD、GET、POST (HTTP 1.0)
OPTIONS、PATCH、DELETE、PUT、TRACE、CONNECT (HTTP 1.1新增)
请求报头常见属性(这⾥重点解释常⽤的):水管堵头>安全审计系统
Accept:可接受响应类型(application/json、text/plain等)
Accept-Charest:可接收的字符集(utf-8等)
Accept-Encoding:可接受的相应内容的编码⽅式(gzip、deflate等)
Accept-Language:可接受的响应内容语⾔列表(en-US、zh-CN等)
Authorization:http认证信息(oauth认证)
Cache-Control:缓存机制控制(on-cache、on-store、max-age、public、private)
Connection:客户端优先使⽤的链接类型(keep-alive、upgrade)
User-Agent:浏览器的⾝份标识字符串
Origin:发起⼀个针对跨域资源共享的请求
If-Modified-Since:上⼀次响应的Last-Modified的值回当做If-Modified-Since的值发送给服务器
If-None-Match:上⼀次响应的ETag的值会当做If-None-Match的值发送给服务器
Referer:表⽰跳转到当期那页⾯的之前页⾯
响应报⽂
响应⾏
响应⾏⼀般由协议版本、状态码及其描述组成 ⽐如 HTTP/1.1 200 OK
其中协议版本HTTP/1.1或者HTTP/1.0,200就是它的状态码,OK则为它的描述。
//常见状态码:
100~199:表⽰成功接收请求,要求客户端继续提交下⼀次请求才能完成整个处理过程。
200~299:表⽰成功接收请求并已完成整个处理过程。常⽤200
300~399:为完成请求,客户需进⼀步细化请求。例如:请求的资源已经移动⼀个新地址、常⽤302(意味着你请求我,我让你去别⼈),307和304(我不给你这个资源,⾃⼰拿缓存)
400~499:客户端的请求有错误,常⽤404(意味着你请求的资源在web服务器中没有)403(服务器拒绝访问,权限不够)
500~599:服务器端出现错误,常⽤500
响应头
响应头⽤于描述服务器的基本信息,以及数据的描述,服务器通过这些数据的描述信息,可以通知客户端如何处理等⼀会⼉它回送的数据。以下是常见的响应头信息
应答头
说明Allow 服务器⽀持哪些请求⽅法(如GET、POST等)。
Content-
Encoding ⽂档的编码(Encode)⽅法。只有在解码之后才可以得到Content-Type头指定的内容类型。利⽤gzip压缩⽂档能够显著地减少HTML⽂档
的下载时间。Java的GZIPOutputStream可以很⽅便地进⾏gzip压缩,但只有Unix上的Netscape和Windows上的IE 4、IE 5才⽀持它。因此,Servlet应该通过查看Accept-Encoding头(即Header("Accept-Encoding"))检查浏览器是否⽀持gzip,为⽀持gzip的
浏览器返回经gzip压缩的HTML页⾯,为其他浏览器返回普通页⾯。
Content-Length 表⽰内容长度。只有当浏览器使⽤持久HTTP连接时才需要这个数据。如果你想要利⽤持久连接的优势,可以把输出⽂档写⼊
ByteArrayOutputStream,完成后查看其⼤⼩,然后把该值放⼊Content-Length头,最后通过
byteArrayStream.OutputStream()发送内容。
Content-Type 表⽰后⾯的⽂档属于什么MIME类型。Servlet默认为text/plain,但通常需要显式地指定为text/html。由于经常要设置Content-Type,
阳光天井因此HttpServletResponse提供了⼀个专⽤的⽅法setContentType。
Date 当前的GMT时间。你可以⽤setDateHeader来设置这个头以避免转换时间格式的⿇烦。
Expires 应该在什么时候认为⽂档已经过期,从⽽不再缓存它?
Last-Modified ⽂档的最后改动时间。客户可以通过If-Modified-Since请求头提供⼀个⽇期,该请求将被视为⼀个条件GET,只有改动时间迟于指定时间的⽂档才会返回,否则返回⼀个304(Not Modified)状态。Last-Modified也可⽤setDateHeader⽅法来设置。
Location 表⽰客户应当到哪⾥去提取⽂档。Location通常不是直接设置的,⽽是通过HttpServletResponse的sendRedirect⽅法,该⽅法同时设置状态代码为302。
Refresh 表⽰浏览器应该在多少时间之后刷新⽂档,以秒计。除了刷新当前⽂档之外,你还可以通过setHeader("Refresh", "5;
URL=host/path")让浏览器读取指定的页⾯。注意这种功能通常是通过设置HTML页⾯HEAD区的<META HTTP-
EQUIV="Refresh" CONTENT="5;URL=host/path">实现,这是因为,⾃动刷新或重定向对于那些不能使⽤CGI或Servlet的HTML编写者⼗分重要。但是,对于Servlet来说,直接设置Refresh头更加⽅便。 注意Refresh的意义是"N秒之后刷新本页⾯或访问指定页⾯",⽽不是"每隔N秒刷新本页⾯或访问指定页⾯"。因此,连续刷新要求每次都发送⼀个Refresh头,⽽发送204状态代码则可以阻⽌浏览器继续刷新,不管是使⽤Refresh头还是<META HTTP-EQUIV="Refresh" ...>。 注意Refresh头不属于HTTP 1.1正式规范的⼀部分,⽽是⼀个扩展,但Netscape和IE都⽀持它。
Server服务器名字。Servlet⼀般不设置这个值,⽽是由Web服务器⾃⼰设置。
Set-Cookie 设置和页⾯关联的Cookie。Servlet不应使⽤response.setHeader("Set-Cookie", ...),⽽是应使⽤HttpServletResponse提供的专⽤⽅法addCookie。参见下⽂有关Cookie设置的讨论。
WWW-Authenticate 客户应该在Authorization头中提供什么类型的授权信息?在包含401(Unauthorized)状态⾏的应答中这个头是必需的。例
如,response.setHeader("WWW-Authenticate", "BASIC realm=\"executives\"")。注意Servlet⼀般不进⾏这⽅⾯的处理,⽽是让Web服务器的专门机制来控制受密码保护页⾯的访问(例如.htaccess)。
以上就是对HTTP基础知识的讲解,下期我会针对TCP建⽴、释放连接也就是⾯试官常问的三次握⼿、四次挥⼿展开详细的讲解。我是⼩师兄,我们下期再见。

本文发布于:2024-09-22 01:37:01,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/1/164387.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:请求   服务器   响应   客户端   连接
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议