HTTP协议
概述
在网络上的不同计算机之间必须使用相同的网络协议才能进行通信,HTTP(超文本传输协议)协议就是用于规范客户端浏览器和服务器以什么样的格式进行通信数据交互的,是属于应用层的面向对象的协议,适用于分布式超媒体信息系统。
HTTP协议由请求和响应构成,是一个标准的客户端服务器模型,也是一个无状态的协议。
主要特点:
- 支持客户/服务器模式
- 简单快速灵活:客户向服务器请求服务时,只需要传送请求方法和路径。请求方法常有get、post。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。HTTP允许传输任意类型的数据对象,正在传输的类型由Content—Type加以标记。
- 无连接:限制每次连接只处理一个请求,服务器处理完客户请求并且收到客户应答,即断开连接。可节省传输时间。
- 无状态:指协议对于事务处理没有记忆能力,意味着入伙后续处理需要前面的信息,则它必须重传,可能导致每次传送的数据量增大。
请求响应流程
浏览器向服务器发送 URL 地址,一个 URL 由几个不同的部分组成,每个部分都会为Web服务器如何处理来自客户端的 HTTP 请求提供一块基本的信息。
一个 URL (统一资源定位器)基本的结构:
http://www.njupt.edu.cn:80/默认首页
http:代表服务方式或协议,常见的如pop3、FTP等;
//:后面的通常是主机地址和端口号的组合,主机地址可以是域名,如“www.nujpt.edu.cn”,也可以直接是主机的 IP 地址,端口号没有指定,则默认是80;
/:后面的字符串表示资源的具体地址,在实际开发中常常加密,或者不显示。
- 注意:如果 URL 中使用的是域名,而客户端向服务器端通信必须获取服务端的 IP 地址,这时在客户端与服务器之间就需要一个代理服务器DNS(域名服务器),进行域名和与之相应的 IP 地址转换。
在Web开发中请求操作通常叫做request,相应操作通常叫做response。
客户端和服务器在发送请求和做出响应时都是从Socket对象中获取对方的 IP 地址和端口号,Socket中的信息以报文形式进行发送。
HTTP协议中的信息格式以报文(有一定格式的字符串,这里的格式需要遵循HTTP协议规范)的形式呈现。
HTTP请求报文和响应报文
HTTP协议相关技术补充
高层协议:文件传输协议FTP、电子邮件传输协议SMTP、域名系统服务DNS、网络新闻传输协议NNTP
中介:代理(Proxy)、网关(Gateway)、通道(Tunnel)
- 代理:一个中间程序,可以充当服务器,也可以充当客户机,为其他客户机建立请求。一个代理根据 URI 的绝对格式来接受请求,重写部分或全部信息,通过 URI 的标识把已格式化的请求发送到服务器。
- 网关:一个作为其他服务器中间媒介的服务器。
- 通道:作为两个连接中继的中介程序,一旦激活便被认为不属于HTTP通信。当被中继的连接两端关闭时,通道便消失。
HttpServletResponse和HttpServletRequest
这两个是Java专门处理Http请求的类,HttpServletResponse代表对象服务器的响应,HttpServletRequest代表客户端的请求。
-
Response常见应用:
- 实现请求重定向:一个Web资源收到客户端请求后,通知客户端去访问另一个Web资源
- 实现方式:response.sendRedirect()
-
Request常见方法:
-
获取客户端信息:
方法名 | 作用 |
---|
getRequestURL | 返回请求的完整URL | getRequestURI | 返回请求的资源名部分 | getQueryString | 返回请求的参数部分 | getPathInfo | 返回URL中的额外路径信息(位于Servlet路径之后和查询参数之前的内容,以/开头) | getRemoteAddr | 返回客户机使用的IP | getRemoteHost | 返回客户机使用的主机名 | getRemotePort | 返回客户机使用的网络端口号 | getLocalAddr | 返回web服务器的IP | getLocalName | 返回web服务器的主机名 |
-
获取客户端请求参数(客户端提交的数据)
方法名 | 作用 |
---|
getParameter(String name) | 获取前端表单单个元素name对应的value值 | getParameterValues(String name) | 获取前端表单多个标签同名name对应的所有value值 | getParameterNames(String name) | 获取前端表单所有标签元素name的对应的所有value值 | getParameterMap | 返回Map型的值 |
请求转发和重定向
-
请求转发:服务器将未处理完的请求直接交给后端另一块模块处理,整个请求被处理完之后才返回结果给客户端。 使用:request.getRequestDispatcher().forward(); -
重定向:服务器告诉客户端(给了客户端一个session id)再去请求另一个页面/资源。 使用:response.sendRedirect()
仅供参考,如有错误,感谢指正!
|