目录搜索
GuidesAccess control CORSAuthenticationBrowser detection using the user agentCachingCaching FAQCompressionConditional requestsConnection management in HTTP 1.xContent negotiationContent negotiation: List of default Accept valuesCookiesCSPMessagesOverviewProtocol upgrade mechanismProxy servers and tunnelingProxy servers and tunneling: Proxy Auto-Configuration (PAC) filePublic Key PinningRange requestsRedirectionsResources and specificationsResources and URIsResponse codesServer-Side Access ControlSessionGuides: BasicsBasics of HTTPChoosing between www and non-www URLsData URIsEvolution of HTTPIdentifying resources on the WebMIME TypesMIME types: Complete list of MIME typesCSPContent-Security-PolicyContent-Security-Policy-Report-OnlyCSP: base-uriCSP: block-all-mixed-contentCSP: child-srcCSP: connect-srcCSP: default-srcCSP: font-srcCSP: form-actionCSP: frame-ancestorsCSP: frame-srcCSP: img-srcCSP: manifest-srcCSP: media-srcCSP: object-srcCSP: plugin-typesCSP: referrerCSP: report-uriCSP: require-sri-forCSP: sandboxCSP: script-srcCSP: style-srcCSP: upgrade-insecure-requestsCSP: worker-srcHeadersAcceptAccept-CharsetAccept-EncodingAccept-LanguageAccept-RangesAccess-Control-Allow-CredentialsAccess-Control-Allow-HeadersAccess-Control-Allow-MethodsAccess-Control-Allow-OriginAccess-Control-Expose-HeadersAccess-Control-Max-AgeAccess-Control-Request-HeadersAccess-Control-Request-MethodAgeAllowAuthorizationCache-ControlConnectionContent-DispositionContent-EncodingContent-LanguageContent-LengthContent-LocationContent-RangeContent-TypeCookieCookie2DateDNTETagExpectExpiresForwardedFromHeadersHostIf-MatchIf-Modified-SinceIf-None-MatchIf-RangeIf-Unmodified-SinceKeep-AliveLarge-AllocationLast-ModifiedLocationOriginPragmaProxy-AuthenticateProxy-AuthorizationPublic-Key-PinsPublic-Key-Pins-Report-OnlyRangeRefererReferrer-PolicyRetry-AfterServerSet-CookieSet-Cookie2SourceMapStrict-Transport-SecurityTETkTrailerTransfer-EncodingUpgrade-Insecure-RequestsUser-AgentUser-Agent: FirefoxVaryViaWarningWWW-AuthenticateX-Content-Type-OptionsX-DNS-Prefetch-ControlX-Forwarded-ForX-Forwarded-HostX-Forwarded-ProtoX-Frame-OptionsX-XSS-ProtectionMethodsCONNECTDELETEGETHEADMethodsOPTIONSPATCHPOSTPUTStatus100 Continue101 Switching Protocols200 OK201 Created202 Accepted203 Non-Authoritative Information204 No Content205 Reset Content206 Partial Content300 Multiple Choices301 Moved Permanently302 Found303 See Other304 Not Modified307 Temporary Redirect308 Permanent Redirect400 Bad Request401 Unauthorized403 Forbidden404 Not Found405 Method Not Allowed406 Not Acceptable407 Proxy Authentication Required408 Request Timeout409 Conflict410 Gone411 Length Required412 Precondition Failed413 Payload Too Large414 URI Too Long415 Unsupported Media Type416 Range Not Satisfiable417 Expectation Failed426 Upgrade Required428 Precondition Required429 Too Many Requests431 Request Header Fields Too Large451 Unavailable For Legal Reasons500 Internal Server Error501 Not Implemented502 Bad Gateway503 Service Unavailable504 Gateway Timeout505 HTTP Version Not Supported511 Network Authentication RequiredStatus
文字

HTTP范围请求允许将HTTP消息的一部分从服务器发送到客户端。例如,部分请求可用于大型媒体或下载具有暂停和恢复功能的文件。

检查服务器是否支持部分请求

如果Accept-Ranges存在于HTTP响应中(并且其值不是“ none”),则服务器支持范围请求。例如,您可以通过发出一个HEAD请求和cURL 来检查。

curl -I http://i.imgur.com/z4d4kWk.jpg

HTTP/1.1 200 OK...Accept-Ranges: bytes
Content-Length: 146515

在此响应中,Accept-Ranges: bytes指示字节可用作单位来定义范围。这里Content-Length头部也很有用,因为它表示要检索的图像的完整大小。

如果网站忽略Accept-Ranges头部,他们可能不支持部分请求。有些网站还明确发送“ none”作为价值,表示不支持。在某些应用程序中,下载管理器在这种情况下禁用它们的暂停按钮。

curl -I https://www.youtube.com/watch?v=EwTZ2xpQwpA

HTTP/1.1 200 OK...Accept-Ranges: none

从服务器请求特定范围

如果服务器支持范围请求,则可以使用Range标题发出此类请求。它表示服务器应该返回的文档的部分。

单个零件范围

我们可以从资源请求一个范围。再次,我们可以使用cURL来测试请求。“ -H”选项将向请求附加一个标题行,在这种情况下,该Range标题是请求前1024个字节的标题。

curl http://i.imgur.com/z4d4kWk.jpg -i -H "Range: bytes=0-1023"

发出的请求如下所示:

GET /z4d4kWk.jpg HTTP/1.1Host: i.imgur.com
Range: bytes=0-1023

服务器响应206 Partial Content状态:

HTTP/1.1 206 Partial Content
Content-Range: bytes 0-1023/146515Content-Length: 1024...(binary content)

Content-Length报头现在指示所请求的范围的大小(而不是图像的全尺寸)。的Content-Range响应报头指示,其中在全资源此部分消息所属。

多部分范围

Range头还允许您在多文档中同时获得多个范围。范围用逗号分隔。

curl http://www.example.com -i -H "Range: bytes=0-50, 100-150"

服务器响应206 Partial Content状态和Content-Type: multipart/byteranges; boundary=3d6b6a416f9b5标题,指示多部分字节范围如下。每部分包含其自己的Content-TypeContent-Range领域以及所需的边界参数指定用于每个本体部分分开的边界字符串。

HTTP/1.1 206 Partial Content
Content-Type: multipart/byteranges; boundary=3d6b6a416f9b5
Content-Length: 282--3d6b6a416f9b5
Content-Type: text/html
Content-Range: bytes 0-50/1270<!doctype html><html><head>    <title>Example Do--3d6b6a416f9b5
Content-Type: text/html
Content-Range: bytes 100-150/1270eta http-equiv="Content-type" content="text/html; c--3d6b6a416f9b5--

有条件的范围请求

当恢复请求资源的更多部分时,您需要确保自从收到最后一个片段以来,存储的资源未被修改。

If-RangeHTTP请求报头使得范围请求的条件:如果条件被满足,该范围的请求将被发出,并且服务器发送回一个206 Partial Content与适当的身体的答案。如果条件未满足,则会返回具有200 OK状态的完整资源。这个头文件可以与Last-Modified验证器一起使用,也可以与一个ETag,但不与两者一起使用。

If-Range: Wed, 21 Oct 2015 07:28:00 GMT

部分请求响应

在处理范围请求时,有三种相关的状态:

  • 如果成功请求范围,206 Partial Content状态将从服务器返回。

  • 如果范围请求超出范围(范围值与资源的范围重叠),则服务器以416 Requested Range Not Satisfiable状态进行响应。

  • 如果不支持范围请求,则200 OK状态将从服务器发回。

比较分块 Transfer-Encoding

Transfer-Encoding报头允许分块编码,其有用的,当大量数据被发送到客户端和响应是未知的,直到请求已被完全处理的总大小。服务器立即向客户端发送数据,而不会缓冲响应或确定确切的长度,从而延长了延迟时间。范围请求和分块是兼容的,可以使用或不使用对方。

上一篇:下一篇: