《HTTP教程一》HTTP简介

xiaoxiao2021-03-01  21

1.1 HTTP简介 HTTP协议,Hyper Text Transfer Protocol(超文本传输协议),是用于从万维网(WWW:World Wide Web)服务器传输超文本到本地浏览器的传送协议。HTTP基于TCP/IP通信协议来传递数据(HTML文件、图片文件、查询结果等)。 1.2 HTTP工作原理 HTTP协议工作于客户端-服务端架构上。浏览器(HTTP客户端)通过URL向HTTP服务端(WEB服务器)发送所有请求。 Web服务器有:Apache服务器、IIS服务器(Internet Information Services)等。Web服务器接收到请求后,向客户端发送响应信息。 HTTP默认端口号80,也可以改为8080或者其他。 HTTP三点注意事项: 1、HTTP连接:默认使用持续连接,所有请求和响应用相同TCP连接。可以限制每次连接只处理一个请求,服务器处理完请求并收到客户的应答后,即断开连接,节省传输时间。 2、HTTP媒体独立:任何类型的客户端和服务器知道如何处理的数据内容,都可以通过HTTP发送。客户端和服务器指定使用适合的MIME-type内容类型。 3、HTTP无状态:HTTP协议是无状态协议,服务器对于事务处理没有记忆能力,如果后续处理需要前面的信息,必须重传。 1.3 HTTP消息结构 HTTP使用统一资源标识符(Uniform Resource Identifiers, URI)来传输数据和建立连接。 1.3.1 客户端请求消息 客户端发送给服务器的请求消息包括:请求行(request line)、请求头部(header)、空行和请求数据四个部分。下图是请求报文的一般格式。

使用GET方法时请求数据为空,使用POST方法才使用请求数据。 例如: GET /somedir/page.html HTTP/1.1 Host:www.someschool.edu Connection:close User-agent:Mozilla/5.0 Accept-language:fr 1.3.2 服务器响应消息 HTTP响应包括:状态行、消息报头、空行和响应正文四个部分。

例如: HTTP/1.1 200 OK Connection:close Date:Tue, 09 Aug 2011 15:44:04 GMT Server:Apache/2.2.3 (Centos) Last-Modified: Tue, 09 Aug 2011 15:11:04 GMT Content-Length:6821 Content-Type:text/html (data data data data data)

1.4 HTTP请求方法 根据HTTP标准,HTTP1.1的请求方法有: 1、GET:请求指定的页面信息,并返回实体主体。 2、HEAD:类似于get请求,但是返回的响应中没有具体的内容,用于获取报头。 3、POST:向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新资源的建立或已有资源的修改。 4、PUT:从客户端向服务器传送的数据取代指定的文档的内容。 5、DELETE:请求服务器删除指定的页面。 6、CONNECT:HTTP1.1协议中预留给能够将连接改为管道方式的代理服务器。 7、OPTIONS:允许客户端查看服务器的性能。 8、TRACE:回显服务器收到的请求,主要用于测试或诊断。 1.5 HTTP响应头信息 1、Allow:服务器支持的请求方法(如GET、POST等)。 2、Content-Encoding:文档的编码方法。解码之后才可以得到Content-Type头指定的内容类型。利用gzip压缩文档能够显著地减少HTML文档的下载时间,Servlet可以查看Accept-Encoding头(即request.getHeader(“Accept-Encoding”))检查浏览器是否支持gzip。 3、Content-Length:表示内容长度。只有当浏览器使用持久HTTP连接时才需要这个数据。可以把输出文档写入 ByteArrayOutputStream,查看其大小,然后把该值放入Content-Length头,最后通过byteArrayStream.writeTo(response.getOutputStream()发送内容。 4、Content-Type:表示后面的文档属于什么MIME类型。Servlet默认为text/plain,但通常需要指定为text/html。HttpServletResponse提供了一个专用设置方法setContentType。 5、Date:当前的GMT时间。可以用setDateHeader来设置这个头。 6、Expires:在什么时候认为文档已经过期,从而不再缓存。 7、Last-Modified:文档的最后改动时间。客户可以通过If-Modified-Since请求头提供一个日期,该请求将被视为一个条件GET,只有改动时间迟于指定时间的文档才会返回,否则返回一个304(Not Modified)状态。可用setDateHeader方法来设置。 8、Location:表示客户应当到哪里去提取文档。Location通常不直接设置,而是通过HttpServletResponse的sendRedirect方法,该方法同时设置状态代码为302。 9、Refresh:表示浏览器应该在多少时间之后刷新文档,单位是秒。可以用setHeader(“Refresh”, “5; URL=http://host/path“)读取指定的页面。 这种功能通常是通过设置HTML页面HEAD区的<META HTTP-EQUIV=”Refresh” CONTENT=”5;URL=http://host/path“>实现。连续刷新要求每次都发送Refresh头,发送204状态代码可以阻止继续刷新。注意Refresh头不属于HTTP 1.1正式规范的一部分,而是一个扩展,但Netscape和IE都支持。 10、Server:服务器名字。Servlet一般不设置这个值,而是由Web服务器自己设置。 11、Set-Cookie:设置和页面关联的Cookie。 12、WWW-Authenticate:客户应该在Authorization头中提供什么类型的授权信息?在包含401(Unauthorized)状态行的应答中这个头是必需的。 1.6 HTTP状态码 浏览器接受并显示网页前,服务器会返回一个包含HTTP状态码的信息头。 1、1**:信息,服务器收到请求,需要请求者继续执行操作 100:Continue继续。客户端应继续其请求 101:Switching Protocols切换协议。服务器根据客户端的请求切换协议。只能切换到更高级的协议。 2、2**:成功,操作被成功接收并处理 200:OK请求成功。一般用于GET与POST请求 201:Created 已创建。成功请求并创建了新的资源 202:Accepted已接受。已经接受请求,但未处理完成 203:Non-Authoritative Information非授权信息。请求成功。但返回的meta信息不在原始的服务器,而是一个副本 204:No Content无内容。服务器成功处理,但未返回内容。在未更新网页的情况下,可确保浏览器继续显示当前文档 205:Reset Content重置内容。服务器处理成功,用户终端(例如:浏览器)应重置文档视图。可通过此返回码清除浏览器的表单域 206:Partial Content部分内容。服务器成功处理了部分GET请求 3、3**:重定向,需要进一步的操作以完成请求 300:Multiple Choices多种选择。请求的资源可包括多个位置,相应可返回一个资源特征与地址的列表用于用户终端(例如:浏览器)选择 301:Moved Permanently永久移动。请求的资源已被永久的移动到新URI,返回信息会包括新URI,浏览器会自动定向到新URI。今后都使用新URI代替 302:Found临时移动。与301类似。但资源是临时被移动。客户端继续使用原URI 303:See Other查看其它地址。与301类似。使用GET和POST请求查看 304:Not Modified未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端可以直接访问缓存的资源 305:Use Proxy使用代理。所请求的资源必须通过代理访问 306:Unused已被废弃的HTTP状态码 307:Temporary Redirect临时重定向。与302类似。使用GET请求重定向 4、4**:客户端错误,请求包含语法错误或无法完成请求 400:Bad Request客户端请求的语法错误,服务器无法理解 401:Unauthorized请求要求用户的身份认证 402:Payment Required保留将来使用 403:Forbidden服务器理解请求客户端的请求,但是拒绝执行 404:Not Found服务器无法根据客户端请求找到资源(网页)。可以个性化定制 405:Method Not Allowed客户端请求中的方法被禁止 406:Not Acceptable服务器无法根据客户端请求的内容特性完成请求 407:Proxy Authentication Required请求要求代理的身份认证,与401类似,但请求者应当使用代理进行授权 408:Request Time-out服务器等待客户端发送的请求时间超时 409:Conflict 服务器完成客户端的PUT请求可能返回此代码,服务器处理请求时发生了冲突 410:Gone客户端请求的资源已经不存在。不同于404,410资源是被永久删除了。可通过301指定资源的新位置 411:Length Required服务器无法处理客户端发送的不带Content-Length的请求 412:Precondition Failed客户端请求信息的先决条件错误 413:Request Entity Too Large请求实体过大,服务器拒绝请求。防止客户端的连续请求。如果只是服务器暂时无法处理,则会包含一个Retry-After的响应信息 414:Request-URI Too Large请求的URI过长,服务器无法处理 415:Unsupported Media Type服务器无法处理请求附带的媒体格式 416:Requested range not satisfiable客户端请求的范围无效 417:Expectation Failed服务器无法满足Expect的请求头信息 5、5**:服务器错误,服务器在处理请求的过程中发生了错误 500:Internal Server Error服务器内部错误,无法完成请求 501:Not Implemented服务器不支持请求的功能,无法完成请求 502:Bad Gateway充当网关或代理的服务器,从远端服务器接收到一个无效请求 503:Service Unavailable由于超载或系统维护,服务器暂时的无法处理客户端的请求。延时的长度可包含在服务器的Retry-After头信息中 504:Gateway Time-out充当网关或代理的服务器,未及时从远端服务器获取请求 505:HTTP Version not supported服务器不支持请求的HTTP协议的版本 1.7 HTTP content-type Content-Type内容类型,定义网络文件的类型和网页的编码,决定浏览器将以什么形式、什么编码读取文件 例如:.json application/json

转载请注明原文地址: https://www.6miu.com/read-4092784.html

最新回复(0)