不管你是Java、PHP开发人员,还是运维人员,只要是从事互联网行业的,在面试的时候都可能会被问到HTTP协议相关知识.经过多日的努力,为大家总结了HTTP协议的经典面试题。由于涉及的内容比较复杂,不方便记忆,建议保存起来,时不时看一下,或者面试前突然复习一下。什么是HTTP消息?HTTP消息是客户端和服务器之间通过HTTP协议传输的数据块。HTTP消息的三个部分是什么?一条HTTP消息由三部分组成:起始行、标题和正文。起始行是消息的描述。header包含消息的一些属性,body包含消息数据(可选,不是必需的)。HTTP数据包有哪两种类型?HTTP消息可以分为:请求消息(requestmessage)和响应消息(responsemessage)。当客户端向服务器发送请求时,发送请求消息;当服务器向客户端返回数据时,它返回一个响应消息。比如获取一个文本需要的请求报文和响应报文:HTTP常见的请求方式有哪些?方法描述是否包含bodyGET从服务器获取指定信息否POST向服务器发送待处理的数据HEAD从服务器获取指定信息的头部否PUT向服务器发送数据并替换指定数据服务器OPTIONS查询对请求URL指定资源的支持否DELETE从服务器删除指定数据否TRACE沿目标资源路径进行消息环回测试否HTTP状态码是什么?定义了全局范围,范围分类为100~199100~101信息提示200~299100~206成功300~399300~305重定向400~499400~415客户端错误500~599500~505服务器错误常见的HTTP状态有哪些代码?StatusCodeReasonPhraseMeaning100Continue表示已经收到请求的初始部分,请求客户端继续。101SwitchingProtocols表示服务器正在根据客户端的规范将协议切换到Update头中列出的协议。200OK请求没问题,正文包含请求的数据。201Created用于服务器端创建数据请求(如PUT),Location头给出了创建数据的URL。202Accepted请求已被接受,但服务器尚未对其执行任何操作。203Non-AuthoritativeInformation数据已正常返回,但部分响应消息头可能不正确。204NoContent响应消息包含起始行和标题,但没有正文部分。客户端应继续显示原始数据。205ResetContent仍然没有正文,但客户端应该清除它显示的数据。206PartialContent成功执行了部分或一系列请求。300MultipleChoices客户端请求一个实际指向多个资源的URL,服务器可以在Location标头中包含首选URL。301MovedPermanently请求的URL已被移除,响应消息中的Location头包含当前资源的URL。302Found与301类似,但新的URL应该被认为是临时的,以后的请求仍然应该指向旧的URL。303SeeOther与301类似,但主要目的是让POST请求的响应能够将客户端定向到某个资源。304NotModified当客户端已经缓存了文档并发送条件请求时,服务器通知客户端原来缓存的数据可以继续使用。305UseProxy用于表示访问必须通过代理进行,代理的位置在Location头中给出。306-Notused307TemporaryRedirect与301类似,但是客户端应该使用Location头中给出的URL进行临时请求,以后的请求应该还是旧的URL。400BadRequest客户端发送了服务器无法理解的错误请求。401Unauthorizedrequest需要客户端的身份认证402PaymentRequiredtobereservedforfutureuse403Forbidden服务器理解客户端的请求,但是拒绝执行这个请求。404NotFound服务器找不到客户端请求的URL。405MethodNotAllowed服务器不支持客户端请求的方法。406NotAcceptable服务器无法按照客户端请求的类型完成请求。407ProxyAuthenticationRequired类似于401,但针对需要对资源进行身份验证的代理服务器。408RequestTimeout服务器等待客户端发送的请求时间过长。服务器可以响应此状态代码并关闭连接。409Conflict客户端的请求可能会导致一些资源冲突,服务器可以发送这个状态码。410Gone类似于404,但是服务器曾经拥有资源。411LengthRequired当服务器要求客户端的请求消息包含Content-Length头时使用该状态码。412PreconditionFailed当客户端发起条件请求,其中一个条件失败时使用该状态码。413RequestEntityTooLarge当客户端发送的主体大于服务器可以或期望处理的大小时,使用此状态代码。414RequestURITooLarge当客户端发送的请求URI比服务器可以或期望处理的长时,使用此状态代码。415UnsupportedMediaType服务器无法理解或支持客户端发送的内容类型。使用此状态代码。416RequestedRangeNotSatisfiable客户端请求的指定资源范围无效或不满意。417ExpectationFailed服务器无法满足客户端的Expect标头。500InternalServerError服务器发生内部错误,无法完成请求。501NotImplemented服务器不支持客户端的请求,无法完成请求。502BadGateway作为网关或代理的服务器收到来自远程服务器的无效请求。503ServiceUnavailable表示服务器现在不能为请求提供服务,但以后可以。资源何时可用可以包含在服务器的Retry-After标头中。504GatewayTimeout和408类似,但是作为网关或者代理的服务器没有及时得到远程服务器的请求。505HTTPVersionNotSupported服务器不支持请求的HTTP协议版本,无法完成处理。HTTP常见的头部信息有哪些?请求消息的头部信息Header含义示例Accept指定客户端可以接收的内容类型。Accept:text/html,application/xhtml+xmlAccept-Charset客户端可以接受的字符编码集。Accept-Charset:GBKAccept-Encoding客户端可以支持服务端返回的内容压缩编码类型。Accept-Encoding:gzip,deflateAccept-LanguageAccept-Language:zh-CN,zhAuthorizationAuthorizationcertificateauthorizedbyHTTPAuthorization:Basicb25lbW9yZSUzQSV1NEUwNyV1NzMyQiV1NUI2NiV1NzkzRQ==Cache-Control指定请求和响应后跟的缓存机制Cache-Control:no-cacheConnection指示是否需要持久连接。Connection:keep-aliveCookie发送HTTP请求时,会将请求域名下存储的所有cookie值一起发送给服务器。Cookie:onemore=万茂学院;Content-Length请求内容长度Content-Length:1024Content-Type请求实体对应的MIME信息Content-Type:application/x-www-form-urlencodedDate请求发送日期和时间Date:Mon,16Mar202011:11:11GMTExpectExpect请求的具体服务器行为:100-continueHost指定请求服务器的域名和端口号Host:onemore.studyIf-Match只有请求内容与实体匹配才会获取到dataIf-Match:"306073f04224cbd114f14693c272f6a0"If-Modified-Since如果请求的部分在指定时间后被修改,则请求成功。If-Modified-Since:Mon,16Mar202011:11:11GMTIf-None-Match仅在请求内容与实体不匹配时获取数据。If-None-Match:"306073f04224cbd114f14693c272f6a0"If-Range允许有条件地请求一定范围的数据。If-Range:"306073f04224cbd114f14693c272f6a0"If-Unmodified-Since只有在指定时间后没有被修改,请求才成功。If-Unmodified-Since:Mon,16Mar202011:11:11GMTMax-Forwards请求被转发到其他代理或网关的最大次数。Max-Forwards:10Pragma用于包含实现特定的指令Pragma:no-cacheProxy-Authorization连接到代理的授权证书Proxy-Authorization:Basicb25lbW9yZSUzQSV1NEUwNyV1NzMyQiV1NUI2NiV1NzkzRQ==Range只请求部分数据,指定范围Range:bytes=512-1024Referer资源的上一个URLReferer:http://onemore.studyTE客户端愿意接受的传输编码TE:trailers,deflate;q=0.5User-Agent包含请求客户端信息User-Agent:Mozilla/5.0(WindowsNT6.2;Win64;x64;rv:65.0)响应消息的头信息Header含义示例Age估计从原始服务器到代理缓存的时间(以秒为单位,非负数)Age:12Allow一个有效的请求行为resourceAllow:GET,POSTCache-Control告诉所有的缓存机制是否可以缓存,是哪种类型。Cache-Control:no-cacheContent-Encoding服务器支持的返回内容压缩编码类型。Content-Encoding:gzipContent-Language响应体的语言Content-Language:zh-CN,zhContent-Length响应体的长度Content-Length:1024Content-Location请求资源的实际位置Content-Location:/index.doContent-MD5返回资源的MD5校验值Content-MD5:306073f04224cbd114f14693c272f6a0Content-Range是该部分在整个返回资源中的字节位置Content-Range:bytes512-1024Content-Type返回资源的对象类型Content-Type:文本/html;charset=GBKDate发送原始服务器消息的时间Date:Mon,16Mar202011:11:11GMTETag请求变量实体标签的当前值ETag:"306073f04224cbd114f14693c272f6a0"Expires响应过期的日期和时间Expires:Mon,16Mar202011:11:11GMTLast-Modified请求资源的最后修改时间Last-Modified:Mon,16Mar202011:11:11GMTLocation通知客户端资源的实际URLLocation:http://onemore.studyPragma包含特定于实现的指令Pragma:no-cacheProxy-Authenticate表示认证方案和可以应用于代理URL的参数Proxy-Authenticate:BasicRetry-After如果实体暂时不可用,通知客户端指定时间后重试Retry-After:60Server服务器软件名称Server:Microsoft-IIS/8.5Set-CookiesetHttpCookieSet-Cookie:onemore=万猫学社;Transfer-Encoding文件传输编码Transfer-Encoding:chunkedVary告诉下游代理是使用缓存的响应还是来自原始服务器的请求Vary:*Via通知代理客户端响应的位置Viasentin:HTTP/1.1GWAWWW-Authenticate表示客户端请求实体应该使用的授权方案WWW-Authenticate:Basic
