首页 > 编程知识 正文

http请求报文包含哪些内容,http的两种报文分别是

时间:2023-05-06 07:18:45 阅读:136675 作者:2206

文章目录HTTP消息结构1 .请求消息1.1请求行1.2请求头1.3请求数据2.1响应行2.1响应头2.3响应数据 HTTP消息结构1 .请求消息 HTTP请求消息主要由3部分构成,请求行、请求报头、请求数据 如下图所示,其中空间是作为分割前后的部分的标记 1.1请求行请求行包括请求方法、URL和协议版本 示例:获取空格/xxxxx

/login.html空格HTTP/1.1

请求方法: HTTP中使用的请求方法,如常见的GET/POST

常见的请求方法如下。

GET )从服务器获取文档头(仅从服务器获取文档的第一个POST ),将需要处理的数据发送到服务器,常用于发送表单。 PUT :将请求的主体部分保存在服务器中,从服务器向客户发送文档的TRACE :跟踪可能通过代理服务器发送到服务器的消息的OPTIONS :确定可以在服务器上执行的方法的DELETE :从服务器中删除文档的HTTP

HTTP1.0只能为每个连接发送一个请求和响应,并且请求将被关闭。 HTTP1.0中没有主机字段。 HTTP1.1可以在同一连接上发送多个请求和响应,并且需要Host字段才能将多个请求重叠并同时执行HTTP1.1。 1.2请求报头HTTP客户端程序(例如浏览器)在向服务器发送请求时必须指定请求类型) (一般为GET或POST )。 如果需要,客户端程序还可以发送其他请求标头。 大多数请求标头不是必需的,但Content-Length除外。 开机自检请求需要内容长度。

请求标头常规字段:

Cookie :客户端可以使用此标头将数据带到服务器。 这是最重要的请求头信息之一。 用户代理:用户代理标头字段的内容包含发出请求的用户信息。 浏览器类型。 如果从servlet返回的内容与浏览器类型相关,则此选项非常有用。 Accept :浏览器可接受的MIME类型。 Accept-Charset :浏览器接受的字符集。 接受编码:一种可由浏览器解码的数据编码方法,如gzip。 servlet可以将gzip编码的HTML页面返回给启用了gzip的浏览器。 在大多数情况下,下载时间可以缩短5~10倍。 Accept-Language :浏览器所需的语言类型。 当服务器可以提供多种语言版本时使用。 授权:许可证信息通常显示在对服务器发送的WWW-Authenticate标头的响应中。 Content-Length :指示请求消息主体的长度。 Host :客户端使用此标头告诉服务器要访问的主机名。 Host标头域必须指定请求资源的internet主机和端口号,并且必须表示请求url的原始服务器或网关的位置。 HTTP/1.1请求必须包括主机头域。 否则,系统将以400状态代码返回。 If-Modified-Since :客户端使用此标头通知服务器资源的缓存时间。 仅在指定时间后更改请求的内容时返回,否则返回304“Not Modified”响应。 Referer :客户端使用此标头告诉服务器它访问了服务器的资源(防盗链)。 包含用于用户访问当前请求的页面的URL。 pragma :如果指定" no-cache ",则即使是代理服务器且页面的本地副本已经存在,服务器也必须返回更新的文档。 来自:请求发件人的电子邮件地址。 由某些特殊的Web客户端程序使用,而不是由浏览器使用。 Connection :处理这次请求后,是切断连接还是继续保持连接? 如果servlet看到此处的值为" Keep- Alive ",或者看到请求使用的是http1.1,则可以利用持续连接的优点,如果页面包含多个元素(如applet、图像等),则下载要实现这一点,servlet必须向响应发送Content-Length标头。 最简单的实现方法是将内容写入ByteArrayOutputStream,然后在正式导出内容之前计算其大小。 Range:Range头域可以请求实体的一个或多个子范围。 1.3如果请求数据方法字段是GET,则此项为空且没有数据

如果方法字段为POST,则此处通常放置的是要提交的数据

例如,如果用POST方法发送用户字段数据为“admin”、password字段为123456的表格,则此处的请求数据为user=adminpassword=123456,直接连接每个字段

2 .类似于响应消息,HTTP响应消息也包括响应行、响应头和响应体3部分

2.1响应行一般由协议版本、状态代码和描述组成,例如HTTP/1.1 200 OK

这里,协议版本HTTP/1.1或http/1.1,200是其状态代码,OK是其说明。

一般的状态代码如下。

状态代码由3位数字组成,第1位数字表示应答的类型。 常用的状态代码分为以下五个类别。

1xx :表示服务器已接收

客户端请求,客户端可继续发送请求;2xx:表示服务器已成功接收到请求并进行处理;3xx:表示服务器要求客户端重定向;4xx:表示客户端的请求有非法内容;5xx:表示服务器未能正常处理客户端的请求而出现意外错误,服务器差错;

● 状态码描述文本有如下取值:

200 OK:表示客户端请求成功;400 Bad Request:表示客户端请求有语法错误,不能被服务器所理解;401 Unauthonzed:表示请求未经授权,该状态代码必须与 WWW-Authenticate 报头域一起使用;403 Forbidden:表示服务器收到请求,但是拒绝提供服务,通常会在响应正文中给出不提供服务的原因;404 Not Found:请求的资源不存在,例如,输入了错误的URL;500 Internal Server Error:表示服务器发生不可预期的错误,导致无法完成客户端的请求;503 Service Unavailable:表示服务器当前不能够处理客户端的请求,在一段时间之后,服务器可能会恢复正常; 2.1 响应头

响应头用于描述服务器的基本信息,以及数据的描述,服务器通过这些数据的描述信息,可以通知客户端如何处理等一会儿它回送的数据。

设置HTTP响应头往往和状态码结合起来。例如,有好几个表示“文档位置已经改变”的状态代码都伴随着一个Location头,而401(Unauthorized)状态代码则必须伴随一个WWW-Authenticate头。然而,即使在没有设置特殊含义的状态代码时,指定应答头也是很有用的。应答头可以用来完成:设置Cookie,指定修改日期,指示浏览器按照指定的间隔刷新页面,声明文档的长度以便利用持久HTTP连接,……等等许多其他任务。

常见的响应头字段含义:

Allow:服务器支持哪些请求方法(如GET、POST等)。Content-Encoding:文档的编码(Encode)方法。只有在解码之后才可以得到Content-Type头指定的内容类型。利用gzip压缩文档能够显著地减少HTML文档的下载时间。Java的GZIPOutputStream可以很方便地进行gzip压缩,但只有Unix上的Netscape和Windows上的IE4、IE5才支持它。因此,Servlet应该通过查看Accept-Encoding头(即request.getHeader(“Accept- Encoding”))检查浏览器是否支持gzip,为支持gzip的浏览器返回经gzip压缩的HTML页面,为其他浏览器返回普通页面。Content-Length:表示内容长度。只有当浏览器使用持久HTTP连接时才需要这个数据。如果你想要利用持久连接的优势,可以把输出文档写入 ByteArrayOutputStram,完成后查看其大小,然后把该值放入Content-Length头,最后通过byteArrayStream.writeTo(response.getOutputStream()发送内容。Content- Type:表示后面的文档属于什么MIME类型。Servlet默认为text/plain,但通常需要显式地指定为text/html。由于经常要设置 Content-Type,因此HttpServletResponse提供了一个专用的方法setContentType。Date:当前的GMT时间,例如,Date:Mon,31Dec200104:25:57GMT。Date描述的时间表示世界标准时,换算成本地时间,需要知道用户所在的时区。你可以用setDateHeader来设置这个头以避免转换时间格式的麻烦。Expires:告诉浏览器把回送的资源缓存多长时间,-1或0则是不缓存。Last-Modified:文档的最后改动时间。客户可以通过If-Modified-Since请求头提供一个日期,该请求将被视为一个条件GET,只有改动时间迟于指定时间的文档才会返回,否则返回一个304(Not Modified)状态。Last-Modified也可用setDateHeader方法来设置。Location:这个头配合302状态码使用,用于重定向接收者到一个新URI地址。表示客户应当到哪里去提取文档。Location通常不是直接设置的,而是通过HttpServletResponse的sendRedirect方法,该方法同时设置状态代码为302。Refresh:告诉浏览器隔多久刷新一次,以秒计。Server:服务器通过这个头告诉浏览器服务器的类型。Server响应头包含处理请求的原始服务器的软件信息。此域能包含多个产品标识和注释,产品标识一般按照重要性排序。Servlet一般不设置这个值,而是由Web服务器自己设置。Set-Cookie:设置和页面关联的Cookie。Servlet不应使用response.setHeader(“Set-Cookie”, …),而是应使用HttpServletResponse提供的专用方法addCookie。Transfer-Encoding:告诉浏览器数据的传送格式。WWW-Authenticate:客户应该在Authorization头中提供什么类型的授权信息?在包含401(Unauthorized)状态行的应答中这个头是必需的。例如,response.setHeader(“WWW-Authenticate”, “BASIC realm=”executives”“)。注意Servlet一般不进行这方面的处理,而是让Web服务器的专门机制来控制受密码保护页面的访问。

注:设置应答头最常用的方法是HttpServletResponse的setHeader,该方法有两个参数,分别表示应答头的名字和值。和设置状态代码相似,设置应答头应该在发送任何文档内容之前进行。

setDateHeader方法和setIntHeadr方法专门用来设置包含日期和整数值的应答头,前者避免了把Java时间转换为GMT时间字符串的麻烦,后者则避免了把整数转换为字符串的麻烦。

HttpServletResponse还提供了许多设置

setContentType:设置Content-Type头。大多数Servlet都要用到这个方法setContentLength:设置Content-Length头。对于支持持久HTTP连接的浏览器来说,这个函数是很有用的。addCookie:设置一个Cookie(Servlet API中没有setCookie方法,因为应答往往包含多个Set-Cookie头)。 2.3 响应数据

响应体就是响应的消息体,如果是纯数据就是返回纯数据,如果请求的是HTML页面,那么返回的就是HTML代码,如果是JS就是JS代码,如此之类。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。