目录
HTTP的简介:
1.http协议是超文本传输协议的缩写,用于从维网服务器传输超文本到本地浏览器的阐述协议
http是基于tcp/IP通信协议来传递数据,url是由http://起始与默认使用端口80(8080)
2.https协议是超文本传输安全协议的缩写,通过计算机网络进行安全通信的传输协议
HTTPS是经由HTTP进行通信但利用ssl或tls进行加密数据包,目的是为了提供对哦网站服务器的身份认证,保护资料的隐私和安全性。url是由https://起始和默认的端口443.
HTTP工作原理:
http协议作于从客户端到服务端的架构上
浏览器作为http的客户端通过url向http的服务端(即web服务器)发送请求
web服务器接收请求后向客户端发送响应信息
常见的web服务器有:Apache服务器,lls服务器等
HTTP的三点特性:
1,无连接:每次完成响应后客户端和服务端断开连接,每次只处理一个请求
2,媒体独立:只需要客户端和服务端即可完成对任意种类数据的处理(指定使用适合的MIME-type内容类型)
3,无状态:对处理过得的数据没有记忆,处理后续信息需要前面的信息时需要重新输入
https的作用:
在不安全的网络上创建一个安全通道,并可在使用适当加密包和证书可被认证时,对窃听和中间人攻击提供合理的保护和防护
HTTP的消息结构:
基于客户端/服务端(c/s)的架构模型,创建可靠链接来交互信息是一个无状态的亲求协议
1.客户端发送请求:
包括以下格式:
请求行,请求头部,空行,请求数据
(请求行)请求方法+空格+url+空格+协议版本+回车符+换行符
(请求头部)
头部字段名+:+值+回车符+换行符
...
头部字段名+:+值+回车符+换行符
(请求数据)
回车符+换行符
2.服务器响应信息
分为四部分:状态行,消息报头,空行,响应正文
HTTP的8种请求类型
1.GET:向特定的资源发出请求( 请求指定的页面信息,返回实体主体)
2.POST:向指定的资源提交数据进行处理请求(提交表单或者上传文件)数据被包含在请求体中POST请求可能会导致新资源的创立和已有资源的修改
3.PUT:向指定资源上传其最新内容(对原文档内容进行取代)
4.DELETE:请求服务器删除Request-URL所标识的资源(删除指定页面)
5.HEAD:向服务器索要和get请求一致的的呼应,但响应体不被返回,便于在不必传输整个响应的的情况下获取包含在响应消息头中的消息(类似get请求不会获取内容但会获得报头)
6.TRACE: 回显服务器收到的请求,用于诊断和测试
7.OPTIONS:返回服务器针对特定资源所支持的HTTP请求方法(允许客户端查询服务器的性能)
8.CONNECT:HTTP/1.1协议中预留给能够将连接方式改为管道方式的代理服务器
HTTP请求方法:
HTTP1.0:定义了三种请求方法:GET,POST,HEAD
HTTP1.1: 新增了六种请求方法OPTIONS,PUT,PATCH,DELETE,TRACE,CONNECT
HTTP响应头信息:
Allow:服务器支持哪些请求方法如GET,POST
Content-Encoding: 文档的编码方法,但通常只有在解码后才能得到Content- Type头指定的内容
Content-Length:表示内容长度,当浏览器需要长久使用http连接时才需要这个数据(需要将输出文档写入 ByteArrayOutputStream完成后查看其大小,然后将值放入Content-Length头,最后通过byteArrayStream.writeTo(response.getOutputStream()发送内容。)
Content-type:表示后面的文档属于什么MIME类型。Servle默认为text./plain,但通常需要显式地指定为text/html类型。由于经常要设置Content-Type,因此HttpServletResponse提供了一个专用的方法setContentType。
Date:当前的GMT时间,你可以用setDateHeader来设置这个头以避免转换时间格式的麻烦
Expires:应该在什么时候认为文档已经过期,从而不再缓存它
Last-Modified:文档最后的改动时间,客户可通过if-Modified-Since请求头提供一个日期,将该请求视为一个get条件,改动时间迟于该时间则返回文档否则返回304
Location:表示客户应当到哪里去提取文档
Refresh:表示浏览器应当在多少时间后刷新文档,以秒计
Set-Cookie:设置和页面关联的Cookie
WWW.Authenticate:客户端应在Authorization中提供什么类型的授权信息,在包含401状态行的应答中这个头是必须的
Servlet一般不进行这方面的处理
HTTP状态码:
200-请求成功
301-资源(网页)等被永久转移到其他url
404-请求的资源(网页等)不存在
500-内部服务器错误
状态码的分类:
1**:信息,服务器收到请求需要请求者继续执行操作
2**:请求成功,并被响应
3**:重定向,需要进一步的操作以完成请求
4**:客户端错误(请求包含语法错误或无法完成请求)
5**:服务器错误(处理请求的过程中出现错误)
HTTP状态码列表:
1.信息响应
这个临时响应表明,迄今为止的所有内容都是可行的,客户端应该继续请求,如果已经完成,则忽略它。
该代码是响应客户端的 Upgrade (en-US) 请求头发送的,指明服务器即将切换的协议。
102 Processing (en-US) (WebDAV)
此代码表示服务器已收到并正在处理该请求,但当前没有响应可用。
此状态代码主要用于与 Link 链接头一起使用,以允许用户代理在服务器准备响应阶段时开始预加载 preloading 资源。
2.成功响应
请求成功。成功的含义取决于 HTTP 方法:
GET
: 资源已被提取并在消息正文中传输。HEAD
: 实体标头位于消息正文中。PUT
orPOST
: 描述动作结果的资源在消息体中传输。TRACE
: 消息正文包含服务器收到的请求消息。
该请求已成功,并因此创建了一个新的资源。这通常是在 POST 请求,或是某些 PUT 请求之后返回的响应。
请求已经接收到,但还未响应,没有结果。意味着不会有一个异步的响应去表明当前请求的结果,预期另外的进程和服务去处理请求,或者批处理。
203 Non-Authoritative Information
服务器已成功处理了请求,但返回的实体头部元信息不是在原始服务器上有效的确定集合,而是来自本地或者第三方的拷贝。当前的信息可能是原始版本的子集或者超集。例如,包含资源的元数据可能导致原始服务器知道元信息的超集。使用此状态码不是必须的,而且只有在响应不使用此状态码便会返回200 OK
的情况下才是合适的。
对于该请求没有的内容可发送,但头部字段可能有用。用户代理可能会用此时请求头部信息来更新原来资源的头部缓存字段。
告诉用户代理重置发送此请求的文档。
当从客户端发送Range范围标头以只请求资源的一部分时,将使用此响应代码。
207 Multi-Status (en-US) (WebDAV)
对于多个状态代码都可能合适的情况,传输有关多个资源的信息。
208 Already Reported (en-US) (WebDAV)
在 DAV 里面使用 <dav:propstat>
响应元素以避免重复枚举多个绑定的内部成员到同一个集合。
226 IM Used (en-US) (HTTP Delta encoding)
服务器已经完成了对资源的GET
请求,并且响应是对当前实例应用的一个或多个实例操作结果的表示。
3.重定向消息
请求拥有多个可能的响应。用户代理或者用户应当从中选择一个。(没有标准化的方法来选择其中一个响应,但是建议使用指向可能性的 HTML 链接,以便用户可以选择。)
请求资源的 URL 已永久更改。在响应中给出了新的 URL。
此响应代码表示所请求资源的 URI 已 暂时 更改。未来可能会对 URI 进行进一步的改变。因此,客户机应该在将来的请求中使用这个相同的 URI。
服务器发送此响应,以指示客户端通过一个 GET 请求在另一个 URI 中获取所请求的资源。
这是用于缓存的目的。它告诉客户端响应还没有被修改,因此客户端可以继续使用相同的缓存版本的响应。
305 Use Proxy
已弃用
在 HTTP 规范中定义,以指示请求的响应必须被代理访问。由于对代理的带内配置的安全考虑,它已被弃用。
306 unused
此响应代码不再使用;它只是保留。它曾在 HTTP/1.1 规范的早期版本中使用过。
服务器发送此响应,以指示客户端使用在前一个请求中使用的相同方法在另一个 URI 上获取所请求的资源。这与 302 Found
HTTP 响应代码具有相同的语义,但用户代理 不能 更改所使用的 HTTP 方法:如果在第一个请求中使用了 POST
,则在第二个请求中必须使用 POST
这意味着资源现在永久位于由Location:
HTTP Response 标头指定的另一个 URI。这与 301 Moved Permanently
HTTP 响应代码具有相同的语义,但用户代理不能更改所使用的 HTTP 方法:如果在第一个请求中使用 POST
,则必须在第二个请求中使用 POST
。
4.客户端错误响应
由于被认为是客户端错误(例如,错误的请求语法、无效的请求消息帧或欺骗性的请求路由),服务器无法或不会处理请求。
虽然 HTTP 标准指定了"unauthorized",但从语义上来说,这个响应意味着"unauthenticated"。也就是说,客户端必须对自身进行身份验证才能获得请求的响应。
此响应代码保留供将来使用。创建此代码的最初目的是将其用于数字支付系统,但是此状态代码很少使用,并且不存在标准约定。
客户端没有访问内容的权限;也就是说,它是未经授权的,因此服务器拒绝提供请求的资源。与 401 Unauthorized
不同,服务器知道客户端的身份。
服务器找不到请求的资源。在浏览器中,这意味着无法识别 URL。在 API 中,这也可能意味着端点有效,但资源本身不存在。服务器也可以发送此响应,而不是 403 Forbidden
,以向未经授权的客户端隐藏资源的存在。这个响应代码可能是最广为人知的,因为它经常出现在网络上。
服务器知道请求方法,但目标资源不支持该方法。例如,API 可能不允许调用DELETE
来删除资源。
当 web 服务器在执行服务端驱动型内容协商机制后,没有发现任何符合用户代理给定标准的内容时,就会发送此响应。
407 Proxy Authentication Required
类似于 401 Unauthorized
但是认证需要由代理完成。
此响应由一些服务器在空闲连接上发送,即使客户端之前没有任何请求。这意味着服务器想关闭这个未使用的连接。由于一些浏览器,如 Chrome、Firefox 27+ 或 IE9,使用 HTTP 预连接机制来加速冲浪,所以这种响应被使用得更多。还要注意的是,有些服务器只是关闭了连接而没有发送此消息。
当请求与服务器的当前状态冲突时,将发送此响应。
当请求的内容已从服务器中永久删除且没有转发地址时,将发送此响应。客户端需要删除缓存和指向资源的链接。HTTP 规范打算将此状态代码用于“有限时间的促销服务”。API 不应被迫指出已使用此状态代码删除的资源。
服务端拒绝该请求因为 Content-Length
头部字段未定义但是服务端需要它。
客户端在其头文件中指出了服务器不满足的先决条件。
请求实体大于服务器定义的限制。服务器可能会关闭连接,或在标头字段后返回重试 Retry-After
。
客户端请求的 URI 比服务器愿意接收的长度长。
服务器不支持请求数据的媒体格式,因此服务器拒绝请求。
无法满足请求中 Range
标头字段指定的范围。该范围可能超出了目标 URI 数据的大小。
此响应代码表示服务器无法满足 Expect
请求标头字段所指示的期望。
服务端拒绝用茶壶煮咖啡。笑话,典故来源茶壶冲泡咖啡
421 Misdirected Request (en-US)
请求被定向到无法生成响应的服务器。这可以由未配置为针对请求 URI 中包含的方案和权限组合生成响应的服务器发送。
422 Unprocessable Entity (WebDAV)
请求格式正确,但由于语义错误而无法遵循。
正在访问的资源已锁定。
424 Failed Dependency (en-US) (WebDAV)
由于前一个请求失败,请求失败。
425 Too Early 实验性
表示服务器不愿意冒险处理可能被重播的请求。
服务器拒绝使用当前协议执行请求,但在客户端升级到其他协议后可能愿意这样做。 服务端发送带有Upgrade (en-US) 字段的 426 响应 来表明它所需的协议(们)。
源服务器要求请求是有条件的。此响应旨在防止'丢失更新'问题,即当第三方修改服务器上的状态时,客户端 GET
获取资源的状态,对其进行修改并将其 PUT
放回服务器,从而导致冲突。
用户在给定的时间内发送了太多请求("限制请求速率")
431 Request Header Fields Too Large
服务器不愿意处理请求,因为其头字段太大。在减小请求头字段的大小后,可以重新提交请求。
451 Unavailable For Legal Reasons
用户代理请求了无法合法提供的资源,例如政府审查的网页。
5.服务端错误响应
服务器遇到了不知道如何处理的情况。
服务器不支持请求方法,因此无法处理。服务器需要支持的唯二方法(因此不能返回此代码)是 GET
and HEAD
.
此错误响应表明服务器作为网关需要得到一个处理这个请求的响应,但是得到一个错误的响应。
服务器没有准备好处理请求。常见原因是服务器因维护或重载而停机。请注意,与此响应一起,应发送解释问题的用户友好页面。这个响应应该用于临时条件和如果可能的话,HTTP 标头 Retry-After
字段应该包含恢复服务之前的估计时间。网站管理员还必须注意与此响应一起发送的与缓存相关的标头,因为这些临时条件响应通常不应被缓存。
当服务器充当网关且无法及时获得响应时,会给出此错误响应。
505 HTTP Version Not Supported
服务器不支持请求中使用的 HTTP 版本。
服务器存在内部配置错误:所选的变体资源被配置为参与透明内容协商本身,因此不是协商过程中的适当终点。
507 Insufficient Storage (WebDAV)
无法在资源上执行该方法,因为服务器无法存储成功完成请求所需的表示。
服务器在处理请求时检测到无限循环。
服务器需要对请求进行进一步扩展才能完成请求。
511 Network Authentication Required
指示客户端需要进行身份验证才能获得网络访问权限。
HTTP content-type
一般指网页中存在的Content-Type,用于定义网络文件的类型和网页的编码,决定浏览器将以什么形式,什么编码读取这个文件,所以经常看到一些PHP网页点击的结果是下载一个文件或者图片。
Content-Typoe 标头告诉客户端实际返回的内容的内容类型
语法格式:
Content-Type:text/html;charset=utf-8
常见的媒体格式类型如下:
text/html:HTML格式
text/plain:纯文本格式
text/xml:XML格式
image/gif:gif图片格式
image/jpeg:jpg图片格式
image/png:png图片格式
以application开头的媒体格式类型:
applicqation/xhtml+xml:XHTML格式、
application/xml: XML数据格式
application/atom+xml :Atom XML聚合格式
application/json: JSON数据格式
application/pdf:pdf格式
application/msword : Word文档格式
application/octet-stream : 二进制流数据(如常见的文件下载)、
application/x-www-form-urlencoded : <form encType=””>中默认的encType,form表单数据被编码为key/value格式发送到服务器(表单默认的提交数据的格式)、
MIME类型:
MIME是描述信息内容类型的标准用来表示文档,文件或字节流的性质和格式
MIME信息能包含文本,图像,音频,视频以及其他应用程序专用的数据
浏览器通常使用MIME类型来确定如何处理URL,在web服务器中添加正确的MIME类型十分重要配置不正确可能导致网站无法正常工作。而且下载的文件也可能被错误处理
语法:
通用结构:
type/subtype——由类型和子类型两个字符产组成以/分隔,不允许有空格type表示可以被分多个子类的独立类别,subtype表示可以被细分的每个类型。
对大小写不敏感,常使用小写
两种主要的 MIME 类型:
text/plain 表示文本文件的默认值
application/octet-stream表示所有其他情况的默认值
常见的 MIME 类型:
超文本标记语言文本 .html、.html:text/html
普通文本 .txt: text/plain
RTF 文本 .rtf: application/rtf
GIF 图形 .gif: image/gif
JPEG 图形 .jpeg、.jpg: image/jpeg
au 声音文件 .au: audio/basic
MIDI 音乐文件 mid、.midi: audio/midi、audio/x-midi
RealAudio 音乐文件 .ra、.ram: audio/x-pn-realaudio
MPEG 文件 .mpg、.mpeg: video/mpeg
AVI 文件 .avi: video/x-msvideo
GZIP 文件 .gz: application/x-gzip
TAR 文件 .tar: application/x-tar
认识HTTP2:
超文本传输协议第2版,是HTTP的升级基于SPDY协议,提高web性能,减少延迟,增加安全性,使web应用更加快速可靠高效
HTTP/2 使用二进制格式来传输数据,而不是像 HTTP/1.1 一样使用文本格式。这提高了效率并降低了数据传输的延迟。
HTTP/2 使用头部压缩来减少传输数据的大小。这有助于减少网络带宽的使用量,并提高页面加载速度。
HTTP/2 允许服务器在不被请求的情况下主动向客户端发送数据。这有助于减少请求延迟,并提高页面加载速度。