zoukankan      html  css  js  c++  java
  • Http协议——基本概念

    一、浏览网页的过程

      用户输入一个url,浏览器根据url给web服务器发送一个Request,web服务器接收到Request后进行处理,并返回浏览器一个Response,可以响应一个静态页面或者图片进行页面跳转,JSP脚本,servlets,ASP脚本,服务端脚本或者其他一些服务端技术。浏览器解析Response中的HTML内容,呈现给用户。也可能浏览器发送的Request要过代理服务器(proxy),最后才到达web服务器。打开一个网页可能需要发送多次请求,如:当我们发送一次请求后,web服务器返回Response,但是浏览器分析该Response中的HTML后发现其中引用了许多其他的文件,比如css ,js,图片等,浏览器会再次发出请求,等所有文件都被下载成功后,页面才被展现出来。

    Web服务器:windows:IIS 

          Linux/Unix: Apache Nginx

    代理服务器的作用:

        1、提高访问速度,大多数的代理服务器都有缓存功能。

        2、突破限制,翻墙。

      3、隐藏身份。                         

    URL:

      schema://host[:port#]/path/.../[?query-string][#anchor]

      scheme指定低层使用的协议(例如:http, https, ftp)

      host  HTTP服务器的IP地址或者域名

      port# HTTP服务器的默认端口是80,这种情况下端口号可以省略。如果使用了别的端口,必须指明,例如 http://www.cnblogs.com:8080/  默认 HTTP的端口号为80,HTTPS的端口号为443。

      path  访问资源的路径

      query-string  发送给http服务器的数据

      anchor-   锚

    http://www.mywebsite.com/sj/test/test.aspx?name=sviergn&x=true#stuff

      Schema:                 http

      host:                   www.mywebsite.com

      path:                   /sj/test/test.aspx

      Query String:           name=sviergn&x=true

      Anchor:                 stuff

    二、HTTP协议

      HTTP协议通常承载于TCP协议之上,有时也承载于TLS或SSL协议层之上,这个时候,就成了我们常说的HTTPS。

    HTTP消息的结构

     Request:

        包含三部分,第一部分Request Line,第二部分Request Header,第二部分后有一个空行,第三部分Request Body

     

        如下为请求百度主页面:

     

        第一行为Request Line,第二行至末尾为Request Header,没有空行间隔,所以无第三部分Request Body。

        下图请求博客园主页面(包含Request Body):

    Response:

      消息结构也分三部分,与Request基本相似。

     

        请求百度首页的Response:

     

        第一行Response Line,第二行至第一个空行为Response Header,剩余部分Response Body。

    GET与POST:

      Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET(查),POST(改),PUT(增),DELETE(删)。GET主要用于查询资源信息,他是安全的(主要用于获取信息而不更改信息)和幂等的(对同一个url的多个请求应该返回相同的结果,对实时新闻的多次请求,尽管返回内容不同,但是也认为是幂等的,因为为改变资源信息)。POST用于更新资源信息。后面两个不常用。

      区别:

    • 一般在浏览器中直接输入url访问资源都是通过GET方式;在Form提交中,可以通过Method指定提交方式GET或者POST,默认为GET。
    • GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连,如EditPosts.aspx?name=test1&id=123456&verify=%E4%BD%A0 %E5%A5%BD.  url采用ASCII码编码格式,Unicode格式需要编码再传输。POST方法是把提交的数据放在HTTP包的RequestBody中。
    • 传输大小的限制。GET:特定浏览器和服务器对URL长度有限制,例如IE对URL长度的限制是2083字节(2K+35)。对于其他浏览器,如Netscape、FireFox等,理论上没有长度限制,其限制取决于操作系统的支持。因此对于GET提交时,传输数据就会受到URL长度的限制。POST:由于不是通过URL传值,理论上数据不受限。但实际各个WEB服务器会规定对post提交数据大小进行限制,Apache、IIS6都有各自的配置。
    • 安全性:POST安全级别要比GET高。 因为GET提交用户名和密码时,都会明文显示在url中,如果页面被缓存,则较不安全。
    • GET方式需要使用Request.QueryString来取得变量的值,而POST方式通过Request.Form来获取变量的值。

      Response 消息中的第一行叫做状态行,由HTTP协议版本号, 状态码, 状态消息 三部分组成。

    状态码:

      HTTP客户端可以通过状态码了解HTTP服务器是否产生了预期的Response.

      HTTP/1.1中定义了5类状态码, 状态码由三位数字组成,第一个数字定义了响应的类别

      1XX  提示信息 - 表示请求已被成功接收,继续处理

      2XX  成功 - 表示请求已被成功接收,理解,接受

      3XX  重定向 - 要完成请求必须进行更进一步的处理

      4XX  客户端错误 -  请求有语法错误或请求无法实现

      5XX  服务器端错误 -   服务器未能实现合法的请求

    Request Header

      Request Header中包含许多域,如下图的Cache、Client、Cookies/Login等。同理Response Header也包含许多域。

     

    HTTP协议是无状态的。

      无状态是指协议对于事务处理没有记忆功能。服务器不知道客户端的状态,无法知道连续的两次的请求是否来自于同一个客户端。需要借助于Cookie和Session或服务端API记录这些信息。

    • 优点:服务器不用为每个客户端连接分配内存来记忆大量状态。也不用在客户端断开连接时清理内存,提高了web业务效率。
    • 缺点:客户端每次都要提交相应参数,服务器需要处理这些参数。

    HTTP Connection:Keep-Alive

     

  • 相关阅读:
    Java实现 LeetCode 697 数组的度(类似于数组的map)
    Java实现 LeetCode 697 数组的度(类似于数组的map)
    Java实现 LeetCode 697 数组的度(类似于数组的map)
    Java实现 LeetCode 696 计数二进制子串(暴力)
    Java实现 LeetCode 696 计数二进制子串(暴力)
    Java实现 LeetCode 696 计数二进制子串(暴力)
    Java实现 LeetCode 695 岛屿的最大面积(DFS)
    Java实现 LeetCode 695 岛屿的最大面积(DFS)
    PHP serialize() 函数
    PHP print_r() 函数
  • 原文地址:https://www.cnblogs.com/mingcaoyouxin/p/3937143.html
Copyright © 2011-2022 走看看