zoukankan      html  css  js  c++  java
  • HTTP原理

    简介

    HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。

     HTTP协议的主要特点可概括如下:

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

     2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。

     3.灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。

     4.无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。

     

    5.无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快

      HTTP 的原理: 使客户端和服务端的数据有效的传输.

     HTTP 的作用

     HTTP 对于URL

     http(超文本传输协议)是一个基于请求与响应模式的、无状态的、应用层的协议,常基于TCP的连接方式,HTTP1.1版本中给出一种持续连接的机制,绝大多数的Web开发,都是构建在HTTP协议之上的Web应用。

     HTTP URL (URL是一种特殊类型的URI,包含了用于查找某个资源的足够的信息)的格式如下:

     http://host[":"port][abs_path]

     http表示要通过HTTP协议来定位网络资源;host表示合法的Internet主机域名或者IP地址;port指定一个端口号,为空则使用缺 省端口80;abs_path指定请求资源的URI;如果URL中没有给出abs_path,那么当它作为请求URI时,必须以“/”的形式给出,通常这 个工作浏览器自动帮我们完成。

     HTTP用于请求中

     http请求由三部分组成,分别是:请求行、消息报头、请求正文

     1、请求行以一个方法符号开头,以空格分开,后面跟着请求的URL和协议的版本,格式如下:Method Request-URI HTTP-Version CRLF  

     其中 Method表示请求方法;Request-URI是一个统一资源标识符;HTTP-Version表示请求的HTTP协议版本;CRLF表示回车和换行(除了作为结尾的CRLF外,不允许出现单独的CR或LF字符)。

     请求方法(所有方法全为大写)有多种,各个方法的解释如下:

     

    GET     请求获取Request-URI所标识的资源

     

    POST    在Request-URI所标识的资源后附加新的数据

     

    HEAD    请求获取由Request-URI所标识的资源的响应消息报头

     

    PUT     请求服务器存储一个资源,并用Request-URI作为其标识

     

    DELETE  请求服务器删除Request-URI所标识的资源

     

    TRACE   请求服务器回送收到的请求信息,主要用于测试或诊断

     

    CONNECT 保留将来使用

     

    OPTIONS 请求查询服务器的性能,或者查询与资源相关的选项和需求.

     

    HTTP 用于响应中

     在接收和解释请求消息后,服务器返回一个HTTP响应消息。

     HTTP响应也是由三个部分组成,分别是:状态行、消息报头、响应正文

     1、状态行格式如下:

     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  //服务器当前不能处理客户端的请求,一段时间后可能恢复正常

     

    2、响应报头后述

     

    3、响应正文就是服务器返回的资源的内容

     

     

     

    HTTP 的请求方法

     

    标准的 HTTP 协议支持六种请求方法:

     

    0:GET 1:HEAD 2:PUT 3:DELETE 4:POST 5:OPTIONS

     

    我们大部分情况下只用到 GET 和 POST 方法.假如要设计一款符合 RESTFul 风格的web 应用程序,这六种方法都会用到.

     

      0,GET:GET可以说是最常见的了,它本质就是发送一个请求来取得服务器上的某一资源。资源通过一组HTTP头呈现数据(如HTML文本,或者图片或者视频等)返回给客户端。GET请求中,永远不会包含呈现数据。

     

      1,HEAD:HEAD和GET本质是一样的,区别在于HEAD不含有呈现数据,而仅仅是HTTP头信息。有的人可能觉得这个方法没什么用,其实不是这样的。想象一个业务情景:欲判断某个资源是否存在,我们通常使用GET,但这里用HEAD则意义更加明确。

     

      2,PUT:这个方法比较少见。HTML表单也不支持这个。本质上来讲, PUT和POST极为相似,都是向服务器发送数据,但它们之间有一个重要区别,PUT通常指定了资源的存放位置,而POST则没有,POST的数据存放位置由服务器自己决定。

     

      3,DELETE:删除某一个资源。基本上这个也很少见,不过还是有一些地方比如amazon的S3云服务里面就用的这个方法来删除资源。

     

      4,POST:向服务器提交数据。这个方法用途广泛,几乎目前所有的提交操作都是靠这个完成。

     

      5,OPTIONS:这个方法很有趣,但极少使用。它用于获取当前URL所支持的方法。若请求成功,则它会在HTTP头中包含一个名为“Allow”的头,值是所支持的方法,如“GET, POST”。

     

      其实还有一个TRACE方法,不过这个基本上不会用到,这里就不介绍了。以上的六种方法,我们可以跟数据库的CRUD增删改查操作对应起来:

     

      CREATE :PUT

     

      READ:GET

     

      UPDATE:POST

     

      DELETE:DELETE

     

    这样一来就实现了HTTP和数据库操作(其实不光是数据库,任何数据如文件图表都是这样)的完美统一,这也是REST的精髓之一。

     

    两种常用的请求

     

    GET请求 

     

        1. GET 请求的请求参数都拼接在 url 中.

     

        2. ?号后面都是参数内容.?前面是具体的接口名称.

     

        3. 参数格式: key=value 的格式.

     

        4. key:是服务器接收参数的key值.一般是服务器人员告诉我们.

     

        5. 多个参数之间以 & 符号分割    

     

    缺点:

     

    对于 GET 请求,请求参数都封装在了 url 中,只要截取到url都能获得参数内容.GET请求不安全!

     

        url是有长度限制的!如果参数比较多,是不能使用GET 请求发送的.

     

        GET请求默认会在本地做数据缓存.

     

     POST请求

     

        1.POST请求的所有参数都封装在请求体中.理论上没有长度限制.

     

        2.外界查看不到POST的请求参数,POST请求比GET请求安全!涉及到私密信息的传递,一定要使用POST请求.

     

    POST请求默认情况下,不会在本地做数据缓存.

     

    文件上传只能使用POST请求.

     

    设置请求方法为 POST 方法.

     

    request.HTTPMethod = @"POST";

     

    设置请求体内容,二进制

     

    request.HTTPBody = [self getHttpBody];

  • 相关阅读:
    part11-1 Python图形界面编程(Python GUI库介绍、Tkinter 组件介绍、布局管理器、事件处理)
    part10-3 Python常见模块(正则表达式)
    Cyclic Nacklace HDU
    模拟题 Right turn SCU
    状态DP Doing Homework HDU
    Dp Milking Time POJ
    区间DP Treats for the Cows POJ
    DP Help Jimmy POJ
    Dales and Hills Gym
    Kids and Prizes Gym
  • 原文地址:https://www.cnblogs.com/fengmin/p/5453843.html
Copyright © 2011-2022 走看看