首页 > Web开发 > 详细

http协议总结

时间:2019-03-09 21:04:32      阅读:199      评论:0      收藏:0      [点我收藏+]

原文:https://www.cnblogs.com/lzq198754/p/5780310.html

 

一、http协议的作用:http协议是一个属于应用层的面向对象的协议,主要用来完成客户端与服务器端的会话和传输。

二、http协议的特点:

       1、支持客户/服务器模式。

  2、简单快速。客户向服务器请求服务时,只需传送请求方法和路径,且HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。

  3、灵活:可以传输任意类型的数据对象。

  4、无连接:每次客户端与服务器连接只处理一个请求,完成后立即断开连接。

  5、无状态:对事务处理没有记忆能力。

三、URL:http://host[":"port][abs_path]

  http表示通过http协议定位网络资源;host合法的Internet 主机域名或IP地址;[":"port]指定端口号,缺省则为80端口;[abs_path]指定请求资源的URI(统一资源标识符)。

  eg:1、输入:www.guet.edu.cn,浏览器自动转换成:http://www.guet.edu.cn/

    2、http:192.168.0.116:8080/index.jsp

四、请求与相应

  http协议是基于请求与相应模式的,其由三部分组成:开始行、消息报头、消息正文。

  1、请求。对于请求来说,其格式就是:请求行、请求报头、请求正文。

    请求行格式:Method(请求方法) Request-URI(统一资源标识符) HTTP-Version(协议版本) CRLF(换行和回车 表示结尾)

    请求方法:GET(获取)、POST(发送)、HEAD(获取报头)、PUT(存储)、DELETE(删除)、TARCE(回送)、CONNECT(保留)、OPTIONS(查询)

    请求举例:GET /form.html HTTP/1.1 (CRLF)

  2、响应。格式:状态行、响应报头、响应正文

    状态行格式:HTTP-Version(HTTP协议版本) Status-Code(状态代码) Reason-Phrase(状态代码的文本描述) CRLF(换行和回车 表示结尾)

    状态代码类别:    

    1xx:指示信息--表示请求已接收,继续处理

    2xx:成功--表示请求已被成功接收、理解、接受

    3xx:重定向--要完成请求必须进行更进一步的操作

    4xx:客户端错误--请求有语法错误或请求无法实现

    5xx:服务器端错误--服务器未能实现合法的请求

    常见状态代码:

    200 OK  400 Bad Request  401 Unauthorized  403 Forbidden  404 Not Found

    500 Internal Server Error    503 Server Unavailable

五、消息报头

  1、消息报头的分类:普通报头、请求包头、响应包头、实体包头

  2、报头的格式:名字+“:”+空格+值  名字与大小写无关

  3、普通报头部分可以用于所有的请求和响应消息,并不用于被传输的实体,只用于传输的消息?

    普通报头:Cache-Control、Date、Connection   

    Cache-Control   用于指定缓存指令,缓存指令是单向的(响应中出现的缓存指令在请求中未必会出  现),且是独立的(一个消息的缓存指令不会影响另一个消息处理的缓存机制),HTTP1.0使用的类似的报头域为Pragma。

    请求时的缓存指令包括:no-cache(用于指示请求或响应消息不能缓存)、no-store、max-age、max-stale、min-fresh、only-if-cached;

    响应时的缓存指令包括:public、private、no-cache、no-store、no-transform、must-revalidate、proxy-revalidate、max-age、s-maxage.

    eg:为了指示IE浏览器(客户端)不要缓存页面,服务器端的JSP程序可以编写如下:

    response.setHeader("Pragma","no-cache");

    这句代码将在发送的响应消息中设置普通报头域:Cache-Control:no-cache

    Date普通报头域表示消息产生的日期和时间

    Connection普通报头域允许发送指定连接的选项。例如指定连接是连续,或者指定“close”选项,通知服务器,在响应完成后,关闭连接。

  4、请求报头:允许客户端向服务器端传递请求的附加信息以及客户端自身的信息。

    Accept、Accept-Charset、Accept-Encoding、Accept-Language、Authorization、Host、User-Agent

    

Accept

Accept请求报头域用于指定客户端接受哪些类型的信息。eg:Accept:image/gif,表明客户端希望接受GIF图象格式的资源;Accept:text/html,表明客户端希望接受html文本。

Accept-Charset

Accept-Charset请求报头域用于指定客户端接受的字符集。eg:Accept-Charset:iso-8859-1,gb2312.如果在请求消息中没有设置这个域,缺省是任何字符集都可以接受。

Accept-Encoding

Accept-Encoding请求报头域类似于Accept,但是它是用于指定可接受的内容编码。eg:Accept-Encoding:gzip.deflate.如果请求消息中没有设置这个域服务器假定客户端对各种内容编码都可以接受。

Accept-Language

Accept-Language请求报头域类似于Accept,但是它是用于指定一种自然语言。eg:Accept-Language:zh-cn.如果请求消息中没有设置这个报头域,服务器假定客户端对各种语言都可以接受。

Authorization

Authorization请求报头域主要用于证明客户端有权查看某个资源。当浏览器访问一个页面时,如果收到服务器的响应代码为401(未授权),可以发送一个包含Authorization请求报头域的请求,要求服务器对其进行验证。

Host(发送请求时,该报头域是必需的)

Host请求报头域主要用于指定被请求资源的Internet主机和端口号,它通常从HTTP URL中提取出来的,eg:

我们在浏览器中输入:http://www.guet.edu.cn/index.html

浏览器发送的请求消息中,就会包含Host请求报头域,如下:

Host:www.guet.edu.cn

此处使用缺省端口号80,若指定了端口号,则变成:Host:www.guet.edu.cn:指定端口号

User-Agent

我们上网登陆论坛的时候,往往会看到一些欢迎信息,其中列出了你的操作系统的名称和版本,你所使用的浏览器的名称和版本,这往往让很多人感到很神奇,实际上,服务器应用程序就是从User-Agent这个请求报头域中获取到这些信息。User-Agent请求报头域允许客户端将它的操作系统、浏览器和其它属性告诉服务器。不过,这个报头域不是必需的,如果我们自己编写一个浏览器,不使用User-Agent请求报头域,那么服务器端就无法得知我们的信息了。

  5、响应报头:允许服务器传递不能放在状态行中的附加响应信息,以及关于服务器的信息和对Request-URI所标识的资源进行下一步访问的信息。

Location

Location响应报头域用于重定向接受者到一个新的位置。Location响应报头域常用在更换域名的时候。

Server

Server响应报头域包含了服务器用来处理请求的软件信息。与User-Agent请求报头域是相对应的。下面是

Server响应报头域的一个例子:

Server:Apache-Coyote/1.1

WWW-Authenticate

WWW-Authenticate响应报头域必须被包含在401(未授权的)响应消息中,客户端收到401响应消息时候,并发送Authorization报头域请求服务器对其进行验证时,服务端响应报头就包含该报头域。

eg:WWW-Authenticate:Basic realm="Basic Auth Test!"  //可以看出服务器对请求资源采用的是基本验证机制。

   6、实体报头:请求和响应消息都可以传送一个实体。一个实体由实体报头域和实体正文组成,但并不是说实体报头域和实体正文要在一起发送,可以只发送实体报头域。实体报头定义了关于实体正文(eg:有无实体正文)和请求所标识的资源的元信息。

Content-Encoding

Content-Encoding实体报头域被用作媒体类型的修饰符,它的值指示了已经被应用到实体正文的附加内容的编码,因而要获得Content-Type报头域中所引用的媒体类型,必须采用相应的解码机制。Content-Encoding这样用于记录文档的压缩方法,eg:Content-Encoding:gzip

Content-Language

Content-Language实体报头域描述了资源所用的自然语言。没有设置该域则认为实体内容将提供给所有的语言阅读

者。eg:Content-Language:da

Content-Length

Content-Length实体报头域用于指明实体正文的长度,以字节方式存储的十进制数字来表示。

Content-Type

Content-Type实体报头域用语指明发送给接收者的实体正文的媒体类型。eg:

Content-Type:text/html;charset=ISO-8859-1

Content-Type:text/html;charset=GB2312

Last-Modified

Last-Modified实体报头域用于指示资源的最后修改日期和时间。

Expires

Expires实体报头域给出响应过期的日期和时间。为了让代理服务器或浏览器在一段时间以后更新缓存中(再次访问曾访问过的页面时,直接从缓存中加载,缩短响应时间和降低服务器负载)的页面,我们可以使用Expires实体报头域指定页面过期的时间。eg:Expires:Thu,15 Sep 2006 16:23:12 GMT

HTTP1.1的客户端和缓存必须将其他非法的日期格式(包括0)看作已经过期。eg:为了让浏览器不要缓存页面,我们也可以利用Expires实体报头域,设置为0,jsp中程序如下:response.setDateHeader("Expires","0");

http协议总结

原文:https://www.cnblogs.com/zym12138/p/10502935.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!