zoukankan      html  css  js  c++  java
  • http请求头

    http://jingyan.baidu.com/article/375c8e19770f0e25f2a22900.html

     http://www.cnblogs.com/yin-jingyu/archive/2011/08/01/2123548.html

    HTTP(HyperText Transfer Protocol)是一套计算机通过网络进行通信的规则。计算机专家设计出HTTP,使HTTP客户(如Web浏览器)能够从HTTP服务器(Web服务器)请求信息和服务,HTTP目前协议的版本是1.1.HTTP是一种无状态的协议,无状态是指Web浏览器和Web服务器之间不需要建立持久的连接,这意味着当一个客户端向服务器端发出请求,然后Web服务器返回响应(response),连接就被关闭了,在服务器端不保留连接的有关信息.HTTP遵循请求(Request)/应答(Response)模型。Web浏览器向Web服务器发送请求,Web服务器处理请求并返回适当的应答。所有HTTP连接都被构造成一套请求和应答。
    HTTP使用内容类型,是指Web服务器向Web浏览器返回的文件都有与之相关的类型。所有这些类型在MIME Internet邮件协议上模型化,即Web服务器告诉Web浏览器该文件所具有的种类,是HTML文档、GIF格式图像、声音文件还是独立的应用程序。大多数Web浏览器都拥有一系列的可配置的辅助应用程序,它们告诉浏览器应该如何处理Web服务器发送过来的各种内容类型。
    HTTP通信机制是在一次完整的HTTP通信过程中,Web浏览器与Web服务器之间将完成下列7个步骤:
    (1)    建立TCP连接
    HTTP工作开始之前,Web浏览器首先要通过网络与Web服务器建立连接,该连接是通过TCP来完成的,该协议与IP协议共同构建Internet,即著名的TCP/IP协议族,因此Internet又被称作是TCP/IP网络。HTTP是比TCP更高层次的应用层协议,根据规则,只有低层协议建立之后才能,才能进行更层协议的连接,因此,首先要建立TCP连接,一般TCP连接的端口号是80
    (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连接在发送后将仍然保持打开状态,于是,浏览器可以继续通过相同的连接发送请求。保持连接节省了为每个请求建立新连接所需的时间,还节约了网络带宽。
        
    HTTP请求格式
    当浏览器向Web服务器发出请求时,它向服务器传递了一个数据块,也就是请求信息,HTTP请求信息由3部分组成:
    l   请求方法URI协议/版本
    l   请求头(Request Header)
    l   请求正文
    下面是一个HTTP请求的例子:
    GET/sample.jspHTTP/1.1
    Accept:image/gif.image/jpeg,*/*
    Accept-Language:zh-cn
    Connection:Keep-Alive
    Host:localhost
    User-Agent:Mozila/4.0(compatible;MSIE5.01;Window NT5.0)
    Accept-Encoding:gzip,deflate
     
    username=jinqiao&password=1234
     
    (1)       请求方法URI协议/版本
    请求的第一行是“方法URL议/版本”:GET/sample.jsp HTTP/1.1
    以上代码中“GET”代表请求方法,“/sample.jsp”表示URI,“HTTP/1.1代表协议和协议的版本。
    根据HTTP标准,HTTP请求可以使用多种请求方法。例如:HTTP1.1支持7种请求方法:GET、POST、HEAD、OPTIONS、PUT、DELETE和TARCE。在Internet应用中,最常用的方法是GET和POST。
    URL完整地指定了要访问的网络资源,通常只要给出相对于服务器的根目录的相对目录即可,因此总是以“/”开头,最后,协议版本声明了通信过程中使用HTTP的版本。
    uri url 区别:

    这两天在写代码的时候,由于涉及到资源的位置,因此,需要在Java Bean中定义一些字段,用来表示资源的位置,比如:imgUrl,logoUri等等。但是,每次定义的时候,心里都很纠结,是该用imgUrl还是imgUri呢?

    同样的,另外一个问题:String HttpServletRequest.getRequestURI();和StringBuffer HttpServletRequest.getRequestURL();返回的内容有何不同?为什么会如此?

    带着这些问题到网上去搜了下,没发现让自己看了明白的解释,于是,想到了Java类库里有两个对应的类java.net.URI和java.net.URL,终于,在这两个类里的javadoc里找到了答案。

    URIs, URLs, and URNs

    首先,URI,是uniform resource identifier,统一资源标识符,用来唯一的标识一个资源。而URL是uniform resource locator,统一资源定位器,它是一种具体的URI,即URL可以用来标识一个资源,而且还指明了如何locate这个资源。而URN,uniform resource name,统一资源命名,是通过名字来标识资源,比如mailto:java-net@java.sun.com。也就是说,URI是以一种抽象的,高层次概念定义统一资源标识,而URL和URN则是具体的资源标识的方式。URL和URN都是一种URI。

    在Java的URI中,一个URI实例可以代表绝对的,也可以是相对的,只要它符合URI的语法规则。而URL类则不仅符合语义,还包含了定位该资源的信息,因此它不能是相对的,schema必须被指定。

    ok,现在回答文章开头提出的问题,到底是imgUrl好呢,还是imgUri好?显然,如果说imgUri是肯定没问题的,因为即使它实际上是url,那它也是uri的一种。那么用imgUrl有没有问题呢?此时则要看它的可能取值,如果是绝对路径,能够定位的,那么用imgUrl是没问题的,而如果是相对路径,那还是不要用ImgUrl的好。总之,用imgUri是肯定没问题的,而用imgUrl则要视实际情况而定。

     
    2) 请求头(Request Header)
    请求头包含许多有关的客户端环境和请求正文的有用信息。例如,请求头可以声明浏览器所用的语言,请求正文的长度等。
    Accept:image/gif.image/jpeg.*/*
    Accept-Language:zh-cn
    Connection:Keep-Alive
    Host:localhost
    User-Agent:Mozila/4.0(compatible:MSIE5.01:Windows NT5.0)
    Accept-Encoding:gzip,deflate.
    3) 请求正文
    请求头和请求正文之间是一个空行,这个行非常重要,它表示请求头已经结束,接下来的是请求正文。请求正文中可以包含客户提交的查询字符串信息:
    username=jinqiao&password=1234
    在以上的例子的HTTP请求中,请求的正文只有一行内容。当然,在实际应用中,HTTP请求正文可以包含更多的内容。
    HTTP请求方法我这里只讨论GET方法与POST方法
    l         GET方法
    GET方法是默认的HTTP请求方法,我们日常用GET方法来提交表单数据,然而用GET方法提交的表单数据只经过了简单的编码,同时它将作为URL的一部分向Web服务器发送,因此,如果使用GET方法来提交表单数据就存在着安全隐患上。例如
    从上面的URL请求中,很容易就可以辩认出表单提交的内容。(?之后的内容)另外由于GET方法提交的数据是作为URL请求的一部分所以提交的数据量不能太大
    l         POST方法
    POST方法是GET方法的一个替代方法,它主要是向Web服务器提交表单数据,尤其是大批量的数据。POST方法克服了GET方法的一些缺点。通过POST方法提交表单数据时,数据不是作为URL请求的一部分而是作为标准数据传送给Web服务器,这就克服了GET方法中的信息无法保密和数据量太小的缺点。因此,出于安全的考虑以及对用户隐私的尊重,通常表单提交时采用POST方法
      从编程的角度来讲,如果用户通过GET方法提交数据,则数据存放在QUERY_STRING环境变量中,而POST方法提交的数据则可以从标准输入流中获取。
    HTTP应答HTTP请求相似,HTTP响应也由3个部分构成,分别是:
    l 协议状态版本代码描述
    l 响应头(Response Header)
    l 响应正文
    下面是一个HTTP响应的例子:
    HTTP/1.1 200 OK
    Server:Apache Tomcat/5.0.12
    Date:Mon,6Oct2003 13:23:42 GMT
    Content-Length:112
     
    <html>
    <head>
    <title>HTTP响应示例<title>
    </head>
    <body>
    Hello HTTP!
    </body>
    </html>
    协议状态代码描述HTTP响应的第一行类似于HTTP请求的第一行,它表示通信所用的协议是HTTP1.1服务器已经成功的处理了客户端发出的请求(200表示成功):
    HTTP/1.1 200 OK
    响应头(Response Header)响应头也和请求头一样包含许多有用的信息,例如服务器类型、日期时间、内容类型和长度等:
       Server:Apache Tomcat/5.0.12
    Date:Mon,6Oct2003 13:13:33 GMT
    Content-Type:text/html
    Last-Moified:Mon,6 Oct 2003 13:23:42 GMT
    Content-Length:112
     响应正文响应正文就是服务器返回的HTML页面:
      <html>
    <head>
    <title>HTTP响应示例<title>
    </head>
    <body>
    Hello HTTP!
    </body>
    </html>
    响应头和正文之间也必须用空行分隔。  
    l        HTTP应答码
       HTTP应答码也称为状态码,它反映了Web服务器处理HTTP请求状态。HTTP应答码由3位数字构成,其中首位数字定义了应答码的类型:
       1XX-信息类(Information),表示收到Web浏览器请求,正在进一步的处理中
       2XX-成功类(Successful),表示用户请求被正确接收,理解和处理例如:200 OK
          3XX-重定向类(Redirection),表示请求没有成功,客户必须采取进一步的动作。
          4XX-客户端错误(Client Error),表示客户端提交的请求有错误 例如:404 NOT
                                        Found,意味着请求中所引用的文档不存在。
          5XX-服务器错误(Server Error)表示服务器不能完成对请求的处理:如 500
          对于我们Web开发人员来说掌握HTTP应答码有助于提高Web应用程序调试的效率和准确性。
     
    安全连接
    Web应用最常见的用途之一是电子商务,可以利用Web服务器端程序使人们能够网络购物,需要指出一点是,缺省情况下,通过Internet发送信息是不安全的,如果某人碰巧截获了你发给朋友的一则消息,他就能打开它,假想在里面有你的信用卡号码,这会有多么糟糕,幸运的是,很多Web服务器以及Web浏览器都有创立安全连接的能力,这样它们就可以安全的通信了。
    通过Internet提供安全连接最常见的标准是安全套接层(Secure Sockets layer,SSl)协议。SSL协议是一个应用层协议(和HTTP一样),用于安全方式在Web上交换数据,SSL使用公开密钥编码系统。从本质讲,这意味着业务中每一方都拥有一个公开的和一个私有的密钥。当一方使用另一方公开密钥进行编码时,只有拥有匹配密钥的人才能对其解码。简单来讲,公开密钥编码提供了一种用于在两方之间交换数据的安全方法,SSL连接建立之后,客户和服务器都交换公开密钥,并在进行业务联系之前进行验证,一旦双方的密钥都通过验证,就可以安全地交换数据。
    • GET
      通过请求URI得到资源
    • POST,
      用于添加新的内容
    • PUT
      用于修改某个内容
    • DELETE,
      删除某个内容
    • CONNECT,
      用于代理进行传输,如使用SSL
    • OPTIONS
      询问可以执行哪些方法
    • PATCH,
      部分文档更改
    • PROPFIND, (wedav)
      查看属性
    • PROPPATCH, (wedav)
      设置属性
    • MKCOL, (wedav)
      创建集合(文件夹)
    • COPY, (wedav)
      拷贝
    • MOVE, (wedav)
      移动
    • LOCK, (wedav)
      加锁
    • UNLOCK (wedav)
      解锁
    • TRACE
      用于远程诊断服务器
    • HEAD
      类似于GET, 但是不返回body信息,用于检查对象是否存在,以及得到对象的元数据
    apache2中,可使用Limit,LimitExcept进行访问控制的方法包括:GETPOSTPUTDELETECONNECT,OPTIONSPATCHPROPFINDPROPPATCHMKCOLCOPYMOVELOCK, 和 UNLOCK.
    其中, HEAD GET POST OPTIONS PROPFIND是和读取相关的方法,MKCOL PUT DELETE LOCK UNLOCK COPY MOVE PROPPATCH是和修改相关的方法

      Accept-Language: zh-cn,zh;q=0.5

      意思:浏览器支持的语言分别是中文和简体中文,优先支持简体中文。

      详解:

      Accept-Language表示浏览器所支持的语言类型;

      zh-cn表示简体中文;zh 表示中文;

      q是权重系数,范围 0 =< q <= 1,q 值越大,请求越倾向于获得其“;”之前的类型表示的内容,若没有指定 q 值,则默认为1,若被赋值为0,则用于提醒服务器哪些是浏览器不接受的内容类型。

    •   Accept-Charset: GB2312,utf-8;q=0.7,*;q=0.7

        意思:浏览器支持的字符编码分别是 GB2312、utf-8 和任意字符,优先顺序是 GB2312、utf-8、*。

        详解:

        Accept-Charset告诉 Web 服务器,浏览器可以接受哪些字符编码;

        GB2312是中国国家标准简体中文字符集,全称《信息交换用汉字编码字符集·基本集》,又称GB0,由中国国家标准总局发布,1981年5月1日实施。GB2312 编码通行于中国大陆;新加坡等地也采用此编码。

        utf-8是 Unicode 的一种变长字符编码又称万国码,由 Ken Thompson 于1992年创建,现在已经标准化为 RFC 3629。

        *表示任意字符编码,虽然 q 都是等于 0.7,但明确指定的 GB2312,utf-8 比 * 具有更高的优先级。

    •   Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

        意思:浏览器支持的 MIME 类型分别是 text/html、application/xhtml+xml、application/xml 和 */*,优先顺序是它们从左到右的排列顺序。

        详解:

        Accept表示浏览器支持的 MIME 类型;

        MIME的英文全称是 Multipurpose Internet Mail Extensions(多功能 Internet 邮件扩充服务),它是一种多用途网际邮件扩充协议,在1992年最早应用于电子邮件系统,但后来也应用到浏览器。

        text/html,application/xhtml+xml,application/xml 都是 MIME 类型,也可以称为媒体类型和内容类型,斜杠前面的是 type(类型),斜杠后面的是 subtype(子类型);type 指定大的范围,subtype 是 type 中范围更明确的类型,即大类中的小类。

        Text:用于标准化地表示的文本信息,文本消息可以是多种字符集和或者多种格式的;

        text/html表示 html 文档;

        Application:用于传输应用程序数据或者二进制数据;

        application/xhtml+xml表示 xhtml 文档;

        application/xml表示 xml 文档。

    •   Accept-Encoding: gzip, deflate

        意思:浏览器支持的压缩编码是 gzip 和 deflate。

        详解:

        Accept-Encoding表示浏览器有能力解码的编码类型;

        gzip是 GNU zip 的缩写,它是一个 GNU 自由软件的文件压缩程序,也经常用来表示 gzip 这种文件格式。

        deflate是同时使用了 LZ77 算法与哈夫曼编码(Huffman Coding)的一个无损数据压缩算法。

    •   User-Agent: Mozilla/5.0 (compatible;域名)

        意思:使用的用户代理是 Mozilla/5.0 (compatible; 域名)。

        详解:

        User-Agent用户代理),简称 UA,它是一个特殊字符串头,使得服务器能够识别客户端使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等。

        Mozilla/5.0:Mozilla 是浏览器名,版本是 5.0;

        compatible(兼容的)表示平台是兼容模式;

    •   Host: 域名

        Host表示请求的服务器网址;

    •  

        Connection: Keep-Alive

        Connection表示客户端与服务连接类型;

        Keep-Alive表示持久连接;

    http://hi.baidu.com/whmtorrent/item/f0469009f52130e5f55ba6d6

    User-agent 类型汇总

    在开发SEO(搜索引擎优化)工具中,需要开发浏览器功能,需要对user-Agent进行了解,特别是做SEO人员更需要了解不同浏览器代理类型。详细如下:

    一、IE 浏览器
    而IE各个版本典型的userAgent如下:
    Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0) 
    Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2)
    Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
    Mozilla/4.0 (compatible; MSIE 5.0; Windows NT)

    IE8的User-Agents:详细说明如下:

    IE8 on Windows Vista (兼容浏览)

    Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Trident/4.0)

    IE8 on Windows Vista
    Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0)

    IE8 on Windows 7
    Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0)

    64-bit IE on 64-bit Windows 7:
    Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Win64; x64; Trident/4.0)

    32-bit IE on 64-bit Windows 7:
    Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0)
    其中,版本号是MSIE之后的数字。

    二、Firefox 浏览器
    Firefox几个版本的userAgent大致如下:
    Mozilla/5.0 (Windows; U; Windows NT 5.2) Gecko/2008070208 Firefox/3.0.1
    Mozilla/5.0 (Windows; U; Windows NT 5.1) Gecko/20070309 Firefox/2.0.0.3
    Mozilla/5.0 (Windows; U; Windows NT 5.1) Gecko/20070803 Firefox/1.5.0.12
    其中,版本号是Firefox之后的数字。

    FireFox修改User-agent
    方法1: 在地址栏输入“about:config”,按下回车进入设置菜单。
    找到“general.useragent.override”,如果没有这一项,则点右键“新建”->“字符串”,输入这个字符串。
    将其值设为自己想要的UserAgent。
    方法2:安装插件:User Agent Switcher
    三、Opera 浏览器
    Opera典型的userAgent如下:
    Opera/9.27 (Windows NT 5.2; U; zh-cn)
    Opera/8.0 (Macintosh; PPC Mac OS X; U; en)
    Mozilla/5.0 (Macintosh; PPC Mac OS X; U; en) Opera 8.0
    其中,版本号是靠近Opera的数字。

    Opera修改User-agent
    方法1:
    1.工具栏“Tools”->“Preferences”->“Content”->“Advenced”,点击“Manage Site Preferences”按钮。
    2.点击“Add”按钮,在弹出的窗口中“Site”填入“*”,“Network”选项卡中选择浏览器ID。各选项如下:
    0 Default
    1 Opera
    2 Mozilla, Opera detectable
    3 Internet Explorer, Opera detectable
    4 Mozilla, Opera hidden
    5 Internet Explorer, Opera hidden
    方法2:
    1.在地址栏输入“opera:config”,回车打开。
    2.找到“User Agent”点开,里面的“Spoof UserAgent ID”设置想要的值,范围1-5,具体对应的ID同上。

    四、Safari 浏览器
    Safari典型的userAgent如下:
    Mozilla/5.0 (Windows; U; Windows NT 5.2) AppleWebKit/525.13 (KHTML, like Gecko) Version/3.1 Safari/525.13
    Mozilla/5.0 (iPhone; U; CPU like Mac OS X) AppleWebKit/420.1 (KHTML, like Gecko) Version/3.0 Mobile/4A93 Safari/419.3
    其版本号是Version之后的数字。
    Safari修改User-agent
    1.菜单栏“Edit”->“Preferences”->“Advanced”,勾选“Show Develop menu in menu bar”。

    五、 Chrome 浏览器
    Chrome的userAgent是:
    Mozilla/5.0 (Windows; U; Windows NT 5.2) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.2.149.27 Safari/525.13
    其中,版本号在Chrome之后的数字。
    Chrome修改User-agent
    方法一:启动时加上参数:–user-agent=”你自己的UserAgent”
    方法二:修改chrome.dll。把里面疑似UserAgent的字符串改为自己的。

    六、Navigator 浏览器
    目前,Navigator的userAgent是:
    Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.12) Gecko/20080219 Firefox/2.0.0.12 Navigator/9.0.0.6
    其中,版本号在Navigator之后的数字。
    七、Maxthon(遨游)修改User-agent
    工具栏“工具”->“遨游设置中心”->“高级选项”,勾选“自定义 UserAgent 字符串”,下面写上自己的UserAgent记可。保存设置后重启Maxthon生效。

    Comments are closed.

  • 相关阅读:
    POJ 1330 Nearest Common Ancestors(LCA Tarjan算法)
    LCA 最近公共祖先 (模板)
    线段树,最大值查询位置
    带权并查集
    转负二进制
    UVA 11437 Triangle Fun
    UVA 11488 Hyper Prefix Sets (字典树)
    UVALive 3295 Counting Triangles
    POJ 2752 Seek the Name, Seek the Fame (KMP)
    UVA 11584 Partitioning by Palindromes (字符串区间dp)
  • 原文地址:https://www.cnblogs.com/dayInAndOut/p/3755206.html
Copyright © 2011-2022 走看看