zoukankan      html  css  js  c++  java
  • HTTP请求详解

    HTTP请求详解

      

     HTTP的请求响应模型

      

      HTTP由请求和响应构成,是一个标准的客户端服务器模型(B/S)HTTP协议永远都是客户端发起请求,服务器回送响应。见下图:

      

      HTTP是一个无状态的协议。无状态是指客户机(Web浏览器)和服务器之间不需要建立持久的连接,这意味着当一个客户端向服务器端发出请求,然后服务器返回响应,连接就被关闭了,在服务器端不保留连接的有关信息。HTTP遵循请求(Request)/应答(Response)模型。客户机(浏览器)向服务器发送请求,服务器处理请求并返回适当的应答。所有HTTP连接都被构造成一套请求和应答。 

      

     HTTP工作过程

      a. 地址解析:先根据浏览器的地址解析出协议名,主机名,端口,对象路径等,再需要域名系统DNS解析主机名(域名),得主机的IP地址;

      b. 封装HTTP请求数据包:把以上部分结合本机自己的信息,封装成一个HTTP请求数据包

      c. 封装TCP包,建立TCP连接:在HTTP工作开始之前,客户机(Web浏览器)首先要通过网络与服务器建立连接,该连接是通过TCP来完成的

      d. 客户机发送请求报文

      e. 服务器响应

      f.  服务器关闭TCP连接:一般情况下,一旦Web服务器向浏览器发送了请求数据,它就要关闭TCP连接;当然也能在请求报文中设置 Connection:keep-alive,来使TCP链接一直保持打开状态,于是,浏览器可以继续通过相同的连接发送请求。保持连接节省了为每个请求建立新连接所需的时间,还节约了网络带宽。 

      

      HTTP协议栈中各层数据流

      

      HTTP协议的请求方法

      
      1、OPTIONS
      返回服务器针对特定资源所支持的HTTP请求方法,也可以利用向web服务器发送‘*’的请求来测试服务器的功能性
      2、HEAD
      向服务器索与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以再不必传输整个响应内容的情况下,就可以获取包含在响应小消息头中的元信息。
      3、GET
      向特定的资源发出请求。它本质就是发送一个请求来取得服务器上的某一资源。资源通过一组HTTP头和呈现数据(如HTML文本,或者图片或者视频等)返回给客户端。GET请求中,永远不会包含呈现数据。
      4、POST
      向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。 Loadrunner中对应POST请求函数:web_submit_data,web_submit_form
      5、PUT
      向指定资源位置上传其最新内容
      6、DELETE
      请求服务器删除Request-URL所标识的资源
      7、TRACE
      回显服务器收到的请求,主要用于测试或诊断
      8、CONNECT
      HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
      注意:
      1)方法名称是区分大小写的,当某个请求所针对的资源不支持对应的请求方法的时候,服务器应当返回状态码405(Mothod Not Allowed);当服务器不认识或者不支持对应的请求方法时,应返回状态码501(Not Implemented)。
      2)HTTP服务器至少应该实现GET和HEAD/POST方法,其他方法都是可选的,此外除上述方法,特定的HTTP服务器支持扩展自定义的方法。
     

       HTTPS实现原理 

      HTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL。其所用的端口号是443。
      SSL:安全套接层,是netscape公司设计的主要用于web的安全传输协议。这种协议在WEB上获得了广泛的应用。通过证书认证来确保客户端和网站服务器之间的通信数据是加密安全的。
      两种基本的加解密算法类型:对称加密(密钥只有一个;需要共享秘钥),非对称加密(公钥私钥,加密解密使用不同的密钥;速度慢)
      https的通信过程:

      

     

  • 相关阅读:
    032 Gradle 下载的依赖jar包在哪?
    031 can't rename root module,Android Studio修改项目名称
    030 Cannot resolve symbol'R' 问题解决汇总大全
    029 Android Studio层级显示目录文件
    028 You are about to commit CRLF line separators to the Git repository.It is recommended to set the core. autocrlf Git attribute to true to avoid line separator issues If you choose Fix and Comit ,
    027 【Android基础知识】Android Studio 编译慢及 Adb connection Error:远程主机强迫关闭了一个现有的连接
    026 Android Studio 和Gradle版版本对应关系
    025 Cause: org.jetbrains.plugins.gradle.tooling.util.ModuleComponentIdentifierIm
    024 Android Studio上传项目到Github 最全记录
    023 解决AndroidStudio下载gradle慢的问题
  • 原文地址:https://www.cnblogs.com/Demrystv/p/9315519.html
Copyright © 2011-2022 走看看