zoukankan      html  css  js  c++  java
  • Java学习系列——HTTP协议

    HTTP协议第一讲:

    简介:http协议是超文本传输协议的简写,它是TCP/IP协议集中的一个应用层协议,用于定义WEB浏览器和WEB服务器之间交换数据的过程以及数据本身的格式。

    HTTP 1.0会话格式:

    浏览器与WEB服务器的连接过程是短暂的,每次连接处理一个请求和响应,对每一个页面的访问,浏览器与WEB服务器都要建立一次单独的连接。

    浏览器到WEB服务器之间的所有通讯都是完全独立分开的请求和响应对。

    当代理服务器没有web浏览器请求的资源时,代理服务器就去请求WEB服务器,然后将资源缓存在代理服务器中,下一次请求就直接去代理服务器请求

    浏览器访问多图网页的过程:

    浏览器获得网页内容,再根据urlWEB服务器请求加载图片数据。需要多次请求和响应,每一次请求和响应都需要建立连接。

    HTTP1.1HTTP1.0的比较

    HTTP1.1的特点:

    1)在一个tcp连接上可以传送多个http请求和响应

    2)在多次请求和响应过程可以重叠进行。

    3)增加了更多的请求头和响应头。建立主机名来明确表示要访问服务器的那个站点

    HTTP请求信息:

    (1)结构

    一个请求行、若干消息头以及实体内容。

    其中一些消息头和实体内容是可选的,消息头和实体内容之间要用空行隔开。

    HTTP响应消息:

    结构:

    一个状态行、若干消息头以及实体内容。

    其中一些消息头和实体内容是可选的,消息头和实体内容之间要用空行隔开。

    其他细节:

    响应消息的实体内容就是网页文件的内容,也就是在浏览器中使用查看源文件的方式所看见的内容。

    一个使用GET方式的请求消息中不能包含实体内容,只有使用POSTPUTDELETE方式的请求消息中才可以包含实体内容。

    对于HTTP1.1来说,如果HTTP消息中包括实体内容且没有采用chunked传输编码方式,那么消息头部分必须包含内容长度的字段,否则,客户和服务程序就无法知道实体内容何时结束。

    HTTP协议中,还可以使用简单的请求消息和响应消息,它们都没有消息头部分。简单的请求消息只能用于GET方式,且请求行不用指定HTTP版本号。对于简单的请求消息,服务器返回简单的响应消息,简单的响应消息之返回实体内容。

    HTTP消息头:

    使用消息头,可以实现HTTP客户机与服务器之间的条件请求和应答。消息头相当于服务器和浏览器之间的暗号指令。

    每一个消息头包含一个头字段名称,然后依次是冒号、空格、值、回车和换行符,不区分大小写。

    EgAccept-Langage: en-us

    消息头又可以分为通用消息头,请求头,响应头和实体类四种。

    许多请求头字段都允许客户端在值部分指定多个可接受的选项,多个项之间以逗号隔开。

    请求行:

    格式:请求方式  资源路径  HTTP版本号<CRIF>(回车和换行字符)

    举例:GET /TEST.HTML HTTP/1.1

    方式:GET POST HEAD OPTIONS DELETE TRACE PUT

    状态行:

    格式:HTTP版本好  状态码  原因叙述<CRIF>(回车和换行字符)

    举例:HTTP/1.1 200 OK

    HTTP1.1 中至少包含一个host头字段

    使用GETPOST方式传递参数:

    url地址后面可以附加参数,默认为GET方式

    GET方式:

    特点:传送的数据量是有限制的,一般限制在1KB以下

    POST方式:

    响应状态码:

    用于表示服务器对请求的各种不同处理结果和状态,三位的十进制数,响应码可归为5种类别,使用最高位进行分类:

    1100-199

    表示成功接收请求,要求客户端继续提交下一次请求才能完成整个处理过程。

    2200-299

    表示成功接收请求并已完成整个处理过程

    3300-399

    为完成请求,客户需要进一步细化请求,例如请求资源已经移动到一个新地址。

    4400-499

    客户端的请求有错误

    5500-599

    服务器端出现错误

    典型情况:

    200:正常,表示一切正常,返回的是正常的处理结果

    206:客户发送了一个带有range头的get请求,返回部分内容

    302/307:指出被请求的文档已经被临时移动到别处,新的urllocation响应头中给出

    304:表示客户机缓存的是最新的

    401:表示客户机访问的是受口令和密码保护的页面

    404:服务器找不到客户机所请求的资源

    500:服务器端的asp,jsp等程序发生错误。

    第三讲 通用信息头

    通用信息头用于请求消息,也可用于响应消息,包括了一些与被传输的实体内容没有关系的常用信息头字段。

    Cache-control:no-cache(用于请求消息中是要通知代理服务器是否缓存最新,用于响应消息时通知客户机如何缓存当前消息),no-cache告诉客户机和代理服务器不要缓存当前的消息。

    Connection:使用哪种方式,是持久连接还是连接一次就关闭。

    Date:时间  必需

    Pragma:设置值只能为no-cache  不缓存

    Trailer:设置Date字段放在尾部

    Transfer-Encoding:chunked 编码方式 chunked把实体内容分成多个段进行传输

    当服务器填满整个缓存区还没有将要发送的写满时就使用transfer-encoding,如果一段写满了就可以使用Connection-length

    Upgrade:允许服务端转换协议版本

    Via:由代理服务器产生,表示客户机所途经的代理服务器的顺序

    Warning:any text 用于说明其他头字段和状态码不能说明的东西

    请求头:

    用户客户端在请求消息中向服务器传递附加消息,主要包括客户端可以接收的数据类型,压缩方式,语言以及发出请求的超链接所属网页的url地址等消息

    Accept:用于指出客户端能够处理的格式,text/html,image/*

    Accept-Charset:客户端程序能够使用的字符集

    Accept-Encoding:客户机能够进行解码的编码方式,一般指压缩方式。

    Accept-Language:客户机希望服务器返回哪个国家的语言。

    Authorization:WEB服务器如果访问有口令或密码的网页时,客户机要使用这个字段 Basic

    Expect:100-continue 用于指定客户机指令服务器做其他工作

    From:发送email地址

    Host:指定客户端访问的资源所在的主机名和端口号

    If-Match:附带以前缓存的实体标签内容

    If-Modified-Since:指定上次所缓存的网页修改时间

    If-None-Match:If-Match相反

    If-Range:时间值

    If-UnModified-Since

    Max-forwards:途经的代理服务器最大的数量

    Proxy-Authorization:与Authorization相似

    Range:用于指定服务器只需返回网页中的部分内容。Bytes=100-599 bytes=-100 bytes=100-

    Referer:用于指定浏览器单击哪个超链接而来的。

    TE:用于说明其他编码方式

    第四讲:

    实体头:用作实体内容的元信息,描述了实体内容的属性

    Allow:GET/POST

    Content-Encoding:用于指定实体内容压缩编码方式

    Content-Language:语言

    Content-length:表示实体内容的大小

    Content-location:用于指定响应消息中所封装实体内容的实际位置

    Content-MD5:判断内容在传输过程中有没有被修改  数字摘要

    Content-Range:用于指定服务器返回的部分内容的位置

    Content-Type:服务器格式的数据  MIME 指出实体内容的MIME类型  数据格式

    Expires:当前文档什么时候会过期  GMT格式

     扩展头:

     正式规范里没有定义的头字段

    现在流行的浏览器都支持cookie set-cookie refresh content-Disposition

    Refresh头字段:

    用于告诉浏览器过多少秒重新发送请求

    Refresh1 url= 指定时间跳转到url

    Content-Disposition头字段

    不是直接处理请求  而是保存到一个文档中 attachment;filename=aaa.zip  保存在文档  

  • 相关阅读:
    THINKPHP 错误:Undefined class constant 'MYSQL_ATTR_INIT_COMMAND'
    Vs2013 坑爹的Target framework问题
    在使用Vs2013打开Vs2008的解决方案时出现了以下错误:此版本的应用程序不支持其项目类型(.csproj)
    sql server2008R2 无法连接到WMI提供程序。你没有权限或者该服务器无法访问
    SqlDateTime 溢出。必须介于 1/1/1753 12:00:00 AM 和 12/31/9999 11:59:59 PM 之间。
    [UE4]手持多把枪的位置调节
    [UE4]函数分组
    [UE4]射击起点、终点的计算方法
    [UE4]条件融合动画: Blend Posed by int
    [UE4]函数和事件的区别
  • 原文地址:https://www.cnblogs.com/Gabby/p/5373563.html
Copyright © 2011-2022 走看看