Http协议

来源:互联网 发布:大六壬排盘软件手机版 编辑:程序博客网 时间:2024/06/05 19:34

一、简介
     超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。

         超文本传输协议,是一种无状态协议,就是说客户端发送一次请求,服务器端接收请求,经过处理返回给客户端信息,然后客户端和服务器端的链接就断开了,为了维护他们之间的链接,让服务器知道这是前一个用户发送的请求,必须在一个地方保存客户端的信息,有2中解决方案,一是在客户端保存,二是在服务器端保存。
方法如下:
1.在客户端保存:Cookie
2.在服务器端保存:Session(session需要依靠cookie来实现)
3.在用户禁用cookie的限制下,只能使用URL重写的方式在每次请求之后附上一个键值对来保存客户端的信息。
4.隐藏表单。<input type="hidden" name="method" value="login">

HTTP协议的请求消息和响应消息有固定的格式
 
 -------------------------请求头格式------------------------------------------------------------------
  HTTP请求行 
  (请求)头 
  空行 
  可选的消息体 
---------------------------响应头格式------------------------------------------------------------------
  HTTP状态行 
  (应答)头 
  空行 
  可选的消息体

HTTP 超文本传输协议 人类之所发展得如此快,就是因为有自己的语言 
       1、所谓超文本:即纯文本语言,不依赖于任何特定语言,任何语言都可以操作它(如java、c++)
       2、传入:HTTP的应用价值在于传输
       3、HTTP是无状态协议
            基于请求/响应模型
            服务器和客户端的交互仅限于请求/响应过程,结束之后便断开,在下一次请求服务器会认为新的客户端

二、HTTP请求
1.HTTP通信机制是在一次完整的HTTP通信过程中,Web浏览器与Web服务器之间将完成下列7个步骤:
(1)    建立TCP连接
在HTTP 工作开始之前,Web浏览器首先要通过网络与Web服务器建立连接,该连接是通过TCP来完成的,该协议与IP协议共同构建Internet,即著名的 TCP/IP协议族,因此Internet又被称作是TCP/IP网络。HTTP是比TCP更高层次的应用层协议,根据规则,只有低层协议建立之后才能, 才能进行更层协议的连接,因此,首先要建立TCP连接,一般TCP连接的端口号是80


IP(IPV4、IPV6)——网络层协议         TCP——传输层协议        HTTP应用层协议

(2)    Web浏览器向Web服务器发送请求命令
一旦建立了TCP连接,Web浏览器就会向Web服务器发送请求命令
例如:GET/sample/hello.jsp HTTP/1.1
(3)    Web浏览器发送请求头信息
浏览器发送其请求命令之后,还要以头信息的形式向Web服务器发送一些别的信息,之后浏览器发送了一空白行来通知服务器,它已经结束了该头信息的发送。
(4)    Web服务器应答
客户机向服务器发出请求后,服务器会客户机回送应答,
HTTP/1.1 200 OK
应答的第一部分是协议的版本号和应答状态码
(5)    Web服务器发送应答头信息
正如客户端会随同请求发送关于自身的信息一样,服务器也会随同应答向用户发送关于它自己的数据及被请求的文档。
(6)    Web服务器向浏览器发送数据
Web服务器向浏览器发送头信息后,它会发送一个空白行来表示头信息的发送到此为结束,接着,它就以Content-Type应答头信息所描述的格式发送用户所请求的实际数据
(7)    Web服务器关闭TCP连接
一般情况下,一旦Web服务器向浏览器发送了请求数据,它就要关闭TCP连接,然后如果浏览器或者服务器在其头信息加入了这行代码
Connection:keep-alive
TCP连接在发送后将仍然保持打开状态,于是,浏览器可以继续通过相同的连接发送请求。保持连接节省了为每个请求建立新连接所需的时间,还节约了网络带宽。

2.HTTP协议的请求请求行,请求头,请求体(post)
(1)请求行:请求方法,请求路径,请求协议

请求方法:HTTP规范定义了8种可能的请求方法:
GET                检索URI中标识资源的一个简单请求

HEAD            与GET方法相同,服务器只返回状态行和头标,并不返回请求文档

POST              服务器接受被写入客户端输出流中的数据的请求

PUT                服务器保存请求数据作为指定URI新内容的请求

DELETE          服务器删除URI中命名的资源的请求

OPTIONS       关于服务器支持的请求方法信息的请求

TRACE            Web服务器反馈Http请求和其头标的请求

CONNECT      已文档化但当前未实现的一个方法,预留做隧道处理


最常用的也就是get和post方法,get方法的请求方式比较简单,所有请求的参数都显示追加在请求的url后面,而且请求长度有限制(因为IE浏览器对地址栏的限制2048个字符,http没有限制),post方式的请求参数都追加在请求体当中,消息长度没有限制而且以隐式的方式进行发送,安全性相对较高。

请求路径:相对或者绝对路径

请求协议:目前常用的支持HTTP/1.0和HTTP/1.1方式

(2)请求头

请求头都是以key:value形式进行保存的,里面记录了客户端的一些基本信息,常用的请求头如下所示
 
Accept:浏览器可接受的MIME类型。

Accept-Charset:浏览器可接受的字符集。

Accept-Encoding:浏览器能够进行解码的数据编码方式,比如gzip。Servlet能够向支持gzip的浏览器返回经gzip编码的HTML页面。许多情形下这可以减少5到10倍的下载时间。

Accept-Language:浏览器所希望的语言种类,当服务器能够提供一种以上的语言版本时要用到。

Authorization:授权信息,通常出现在对服务器发送的WWW-Authenticate头的应答中。

Connection:表示是否需要持久连接。如果Servlet看到这里的值为“Keep-Alive”,

            或者看到请求使用的是HTTP 1.1(HTTP 1.1默认进行持久连接),它就可以利用持久连接的优点,

            当页面包含多个元素时(例如Applet,图片),显著地减少下载所需要的时间。要实现这一点,

            Servlet需要在应答中发送一个Content-Length头,最简单的实现方法是:先把内容写入

            ByteArrayOutputStream,然后在正式写出内容之前计算它的大小。

Content-Length:表示请求消息正文的长度。

Cookie:这是最重要的请求头信息之一。

From:请求发送者的email地址,由一些特殊的Web客户程序使用,浏览器不会用到它。

Host:初始URL中的主机和端口。

Referer:包含一个URL,用户从该URL代表的页面出发访问当前请求的页面。

User-Agent:浏览器类型,如果Servlet返回的内容与浏览器类型有关则该值非常有用。



三、HTTP响应:状态行、响应头、消息体


1、状态行:HTTP版本、服务器状态、描述信息

HTTP状态码:
    100 继续
    101 分组交换协
    200 OK
    201 被创建
    202 被采纳
    203 非授权信息
    204 无内容
    205 重置内容
    206 部分内容
    300 多选项
    301 永久地传送
    302 找到
    303 参见其他
    304 未改动
    305 使用代理
    307 暂时重定向
    400 错误请求
    401 未授权
    402 要求付费
    403 禁止
    404 未找到
    405 不允许的方法
    406 不被采纳
    407 要求代理授权
    408 请求超时
    409 冲突
    410 过期的
    411 要求的长度
    412 前提不成立
    413 请求实例太大
    414 请求URI太大
    415 不支持的媒体类型
    416 无法满足的请求范围
    417 失败的预期
    500 内部服务器错误
    501 未被使用
    502 网关错误
    503 不可用的服务
    504 网关超时
    505 HTTP版本未被支持

响应状态信息:参照状态码

2、响应头:

Content-Encoding 文档的编码(Encode)方法。只有在解码之后才可以得到Content-Type头指定的内容类型。利用gzip压缩文档能够显著地减少HTML文档 的下载时间。Java的GZIPOutputStream可以很方便地进行gzip压缩,但只有Unix上的Netscape和Windows上的IE 4、IE 5才支持它。因此,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提供了一个专用的方法setContentTyep。

Date 当前的GMT时间。

Last-Modified 文档的最后改动时间。

Location 表示客户应当到哪里去提取文档。Location通常不是直接设置的,而是通过HttpServletResponse的sendRedirect方法,该方法同时设置状态代码为302。

Refresh 表示浏览器应该在多少时间之后刷新文档,以秒计。

Server 服务器名字。Servlet一般不设置这个值,而是由Web服务器自己设置。

Set-Cookie 设置和页面关联的Cookie。

3、响应体:

网页的正文内容

0 0
原创粉丝点击