zoukankan      html  css  js  c++  java
  • Http协议对格式、请求头、方法

    #########

    #概览

    #########  

    超文本传输协议(Http: Hyper Text Transfer Protocol) :用于发送WWW方式的数据。采用TCP/IP协议,是一个无状态协议。采用了请求/响应模型。

      

    #########

    #Http请求 Request

    #########  

      HTTp请求包括:

      1) 请求方法、URI(uniform Resource identity 统一资源标识符question/23133/、 URL:统一资源定位符号www.baidu.com/question/23133/)协议版本 

      2) 请求头

      3) (空行

      4) 请求数据

    Get请求例子,使用Charles抓取的request:
    
    GET /562f25980001b1b106000338.jpg HTTP/1.1
    Host    img.mukewang.com
    User-Agent    Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36
    Accept    image/webp,image/*,*/*;q=0.8
    Referer    http://www.imooc.com/
    Accept-Encoding    gzip, deflate, sdch
    Accept-Language    zh-CN,zh;q=0.8

     第一部分:GET说明请求类型为GET,[/562f25980001b1b106000338.jpg]为要访问的资源,该行的最后一部分说明使用的是HTTP1.1版本。

    
    

     第二部分:请求头部,紧接着请求行(即第一行)之后的部分,用来说明服务器要使用的附加信息

    
    

    从第二行起为请求头部,HOST将指出请求的目的地.User-Agent,服务器端和客户端脚本都能访问它,它是浏览器类型检测逻辑的重要基础.该信息由你的浏览器来定义,并且在每个请求中自动发送等等

    
    

     第三部分:空行,请求头部后面的空行是必须的

    
    

     第四部分:请求数据也叫主体,可以添加任意的其他数据。

    
    

    这个例子的请求数据为空。

     
    POST请求例子,使用Charles抓取的request:
    
    POST / HTTP1.1
    Host:www.wrox.com
    User-Agent:Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)
    Content-Type:application/x-www-form-urlencoded
    Content-Length:40
    Connection: Keep-Alive
    
    name=Professional%20Ajax&publisher=Wiley
    第一部分:请求行,第一行明了是post请求,以及http1.1版本。
    第二部分:请求头部,第二行至第六行。
    第三部分:空行,第七行的空行。
    第四部分:请求数据,第八行。

    #########

    #Http响应 Response

    #########  

    Http响应包括:也由四个部分组成,分别是:状态行、响应头、空行和响应正文。

    状态行:

    HTTP-Version Status-Code Reason-Phrase CRLF
    其中,HTTP-Version表示服务器HTTP协议的版本;Status-Code表示服务器发回的响应状态代码;Reason-Phrase表示状态代码的文本描述。
    状态代码有三位数字组成,第一个数字定义了响应的类别,且有五种可能取值:
    1xx:指示信息--表示请求已接收,继续处理
    2xx:成功--表示请求已被成功接收、理解、接受
    3xx:重定向--要完成请求必须进行更进一步的操作
    4xx:客户端错误--请求有语法错误或请求无法实现
    5xx:服务器端错误--服务器未能实现合法的请求
    常见状态代码、状态描述、说明:
    200 OK      //客户端请求成功
    400 Bad Request  //客户端请求有语法错误,不能被服务器所理解
    401 Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用 
    403 Forbidden  //服务器收到请求,但是拒绝提供服务
    404 Not Found  //请求资源不存在,eg:输入了错误的URL
    500 Internal Server Error //服务器发生不可预期的错误
    503 Server Unavailable  //服务器当前不能处理客户端的请求,一段时间后可能恢复正常
    eg:HTTP/1.1 200 OK (CRLF)

    响应头:

    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!"  //可以看出服务器对请求资源采用的是基本验证机制。

    #########

    #Http 请求方法 & Http1.1 & Http 1.0

    #########

    根据HTTP标准,HTTP请求可以使用多种请求方法。
    HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。
    HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。

    GET        请求指定的页面信息,并返回实体主体。
    HEAD       类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头
    POST       向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。
    PUT        从客户端向服务器传送的数据取代指定的文档的内容。
    DELETE       请求服务器删除指定的页面。
    CONNECT      HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
    OPTIONS      允许客户端查看服务器的性能。
    TRACE       回显服务器收到的请求,主要用于测试或诊断。

     以上请求方法的安全性:

    GET / HEAD / OPTIONS方法

                   只从服务端获取资源 并不对服务器进行修改 因此相对安全。

                   对于客户端来说是不安全的 请求参数会显示在URL中。 

    TRACE方法

                   用于诊断诊断服务器 仅记录路径信息 是安全的。

    POST方法

                   会影响服务器端的资源。

    GET和POST的区别

      1. GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连,如EditPosts.aspx?name=test1&id=123456. POST方法是把提交的数据放在HTTP包的Body中.

      2. GET提交的数据大小有限制(因为浏览器对URL的长度有限制),而POST方法提交的数据没有限制.

      3. GET方式需要使用Request.QueryString来取得变量的值,而POST方式通过Request.Form来获取变量的值。

      4. GET方式提交数据,会带来安全问题,比如一个登录页面,通过GET方式提交数据时,用户名和密码将出现在URL上,如果页面可以被缓存或者其他人可以访问这台机器,就可以从历史记录获得该用户的账号和密码.

    参考:http://www.cnblogs.com/ranyonsue/p/5984001.html

    看表更爽一些:

     

    补充一些 有关http的其他知识:

      HTTPS = http + ssl

      HTTPS是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。 
    SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层对网络连接进行加密。

     /*************************************************/

    CHTTP协议的ETAG响应头作用

    想必许多网友都有订阅某些大虾的RSS的习惯吧,但是大虾也是人,也要吃饭睡觉打豆豆,所以不可能无时无刻的在从事文学创作,因此一般产量较高的大虾也许平均每天能更新两篇已经是不错了,但是网友们却总是不断的去刷新RSS订阅的内容,期望在下次刷新中又有新的劲爆文章出现,如果我们每次刷新,都要从服务器端重新获取内容(事实上,几乎一天内95%以上的刷新返回的都是相同内容,因为刚才也说了,大虾一般一天也就出一两篇新文章而已,所以大部分时间内,内容都是相同的),如果订阅量相当巨大,这对于服务器的压力还是带宽都是一个严重的挑战。其实真正需要服务器重新返回内容是大虾们更新了新的文章后,而其他时间我们无论怎么刷新服务器最好能做到不需返回任何数据,这才是一个比较好的方案,而我们的主角etag响应头的出现正是为了解决这个问题。

  • 相关阅读:
    电商项目剖析专题【延后。。】
    中间件专题(RabbitMQ+Kafka+MongoDB)
    ECMAScript + TypeScript + Nodejs 专题
    第七节:IDEA配置Maven、创建Maven项目、常用指令、tomcat7插件的配置 及 pom.xml详解
    第六节:Maven简介、安装配置、仓库分类与配置、工程介绍
    第八节:前端UI大换血(动态登录页、三套皮肤、菜单伸缩、弹框页面、基础布局页面等等)
    第五节:使用TortoiseGit管理Git操作 、IDEA集成Git、使用SSH协议传数据
    第四节:Git的概述、代码托管平台、常用指令总结、实际案例模拟
    第二节:IDEA的入门用法(快捷键、创建项目、调试模式、Jar包等等)
    第三节:IDEA创建Web项目、Tomcat下载配置及与IDEA的集成
  • 原文地址:https://www.cnblogs.com/luntai/p/6561951.html
Copyright © 2011-2022 走看看