zoukankan      html  css  js  c++  java
  • 通讯协议(一)HTTP协议

    协议是指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则,超文本传输协议(HTTP)是一种通信协议,它允许将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器。目前我们使用的是HTTP/1.1 版本。

    当我们打开浏览器,在地址栏中输入URL,我们的浏览器给Web服务器发送了一个Request, Web服务器接到Request后进行处理,生成相应的Response,然后发送给浏览器, 浏览器解析Response中的HTML,这样我们就看到了网页。

    URL(Uniform Resource Locator) 地址用于描述一个网络上的资源,  基本格式如下:

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

    scheme

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

    host

    HTTP服务器的IP地址或者域名
    port#  HTTP服务器的默认端口是80,这种情况下端口号可以省略。如果使用了别的端口,必须指明
    path 访问资源的路径
    query-string 发送给http服务器的数据
    anchor
    http://www.test.com:8080/v1/user?name=cellphone#introduction
    Schema:                 http
    host: www.mywebsite.com
    port:            8080
    path: /v1/user
    Query String: name=cellphone
    Anchor: introduction

    浏览器访问网页时,浏览器需要发送多次Request。当在浏览器输入URL http://www.cnblogs.com 的时候,浏览器发送一个Request去获取 http://www.cnblogs.com 的html。 服务器把Response发送回给浏览器。浏览器分析Response中的 HTML,发现其中引用了很多其他文件,比如图片,CSS文件,JS文件。浏览器会自动再次发送Request去获取图片,CSS文件,或者JS文件。等所有的文件都下载成功后。 网页就被显示出来了。

    HTTP协议是无状态的,同一个客户端的这次请求和上次请求是没有对应关系,对http服务器来说,它并不知道这两个请求来自同一个客户端。 为了解决这个问题, Web程序引入了Cookie机制来维护状态。

    HTTP消息体结构

    先看Request 消息的结构,   Request 消息分为3部分,第一部分叫Request line,第二部分叫Request header,第三部分是body。header和body之间有个空行, 结构如下:

    METHOD/path-to-resource HTTP/Version-number

    Head-Name-1: value

    Head-Name-2: value

     
    Optional request body

    METHOD表示请求方法,比如"POST","GET",  Path-to-resoure表示请求的资源, Http/version-number 表示HTTP协议的版本号。当使用的是"GET" 方法的时候, body是为空的。比如我们打开博客园首页的Request 如下:

    GET http://www.cnblogs.com/ HTTP/1.1
    Host: www.cnblogs.com

    为了加深对HTTP的理解,我们用Fiddler,实际的看看Request和Response。

     

    再看Response消息的结构, 和Request消息的结构基本一样。 同样也分为三部分,第一部分叫Response line,第二部分叫Response header,第三部分是body. header和body之间也有个空行,  结构如下:

    HTTP/Version-number                 Status Code

    Head-Name-1: value

    Head-Name-2: value

     
    Optional response body

    Response 消息中的第一行叫做状态行,由HTTP协议版本号,状态码,状态消息 三部分组成。状态码用来告诉HTTP客户端,HTTP服务器是否产生了预期的Response。

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

    1XX 提示信息 - 表示请求已被成功接收,继续处理
    2XX   成功 - 表示请求已被成功接收,理解,接受
    3XX 重定向 - 要完成请求必须进行更进一步的处理
    4XX   客户端错误 -  请求有语法错误或请求无法实现
    5XX   服务器端错误 -   服务器未能实现合法的请求

      

      

    一些常见的状态码:

    200 OK:表明该请求被成功地完成,所请求的资源发送回客户端;

    302 Found:重定向,新的URL会在Response 中的Location中返回,浏览器将会自动使用新的URL发出新的Request;

    304 Not Modified:代表上次的文档已经被缓存了, 还可以继续使用;

    400 Bad Request:客户端请求与语法错误,不能被服务器所理解;

    403 Forbidden:服务器收到请求,但是拒绝提供服务;

    404 Not Found:请求资源不存在(输错了URL);

    500 Internal Server Error:服务器发生了不可预期的错误;

    503 Server Unavailable:服务器当前不能处理客户端的请求,一段时间后可能恢复正常;

    参考:HTTP协议详解

  • 相关阅读:
    GMA Round 1 数列求单项
    GMA Round 1 双曲线与面积
    多线程环境中安全使用集合API(含代码)
    使用synchronized获取互斥锁的几点说明
    ThreadPoolExecutor线程池
    线程状态转换
    volatile关键字
    守护线程与线程阻塞的四种情况
    线程挂起,恢复与终止
    线程中断
  • 原文地址:https://www.cnblogs.com/warehouse/p/9332954.html
Copyright © 2011-2022 走看看