zoukankan      html  css  js  c++  java
  • HTTP协议学习笔记

    0 写在前面

    将近一个月没有怎么写博客了,这段时间经历了很多…冯如杯结果不太理想,但是软工项目的三轮迭代还算顺利,与团队的合作也十分愉快。总体而言,人生就是这样,起起伏伏,有惊喜也有失落。无论遇到了什么样的经历,生活都要继续,一切都要向前看。

    这个月24号的那场考试应该算是本学期最重要的一长考试了吧。从今天开始要为这场考试好好准备了。

    1 HTTP协议概述

    HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。

    HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。

    HTTP协议工作于客户端-服务端架构上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。Web服务器根据接收到的请求后,向客户端发送响应信息。

    响应模型图片如下:

    2 HTTP主要特点

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

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

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

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

    3 HTTP工作原理

    HTTP协议定义Web客户端如何从Web服务器请求Web页面,以及服务器如何把Web页面传送给客户端。HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求报文,请求报文包含请求的方法、URL、协议版本、请求头部和请求数据。服务器以一个状态行作为响应,响应的内容包括协议的版本、成功或者错误代码、服务器信息、响应头部和响应数据。

    以下是 HTTP 请求/响应的步骤:

    1、客户端连接到Web服务器
    一个HTTP客户端,通常是浏览器,与Web服务器的HTTP端口(默认为80)建立一个TCP套接字连接。例如,http://www.oakcms.cn。

    2、发送HTTP请求
    通过TCP套接字,客户端向Web服务器发送一个文本的请求报文,一个请求报文由请求行、请求头部、空行和请求数据4部分组成。

    3、服务器接受请求并返回HTTP响应
    Web服务器解析请求,定位请求资源。服务器将资源复本写到TCP套接字,由客户端读取。一个响应由状态行、响应头部、空行和响应数据4部分组成。

    4、释放连接TCP连接
    若connection 模式为close,则服务器主动关闭TCP连接,客户端被动关闭连接,释放TCP连接;若connection 模式为keepalive,则该连接会保持一段时间,在该时间内可以继续接收请求;

    5、客户端浏览器解析HTML内容
    客户端浏览器首先解析状态行,查看表明请求是否成功的状态代码。然后解析每一个响应头,响应头告知以下为若干字节的HTML文档和文档的字符集。客户端浏览器读取响应数据HTML,根据HTML的语法对其进行格式化,并在浏览器窗口中显示。

    在浏览器地址栏键入URL,按下回车之后会经历以下流程

    1、浏览器向 DNS 服务器请求解析该 URL 中的域名所对应的 IP 地址;

    2、解析出 IP 地址后,根据该 IP 地址和默认端口 80,和服务器建立TCP连接;

    3、浏览器发出读取文件(URL 中域名后面部分对应的文件)的HTTP 请求,该请求报文作为 TCP 三次握手的第三个报文的数据发送给服务器;

    4、服务器对浏览器请求作出响应,并把对应的 html 文本发送给浏览器;

    5、释放 TCP连接;

    6、浏览器将该 html 文本并显示内容;

    4 HTTP请求方式

    GET 请求指定的页面信息,并返回实体主体。

    HEAD 类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头

    POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。

    PUT 从客户端向服务器传送的数据取代指定的文档的内容。

    DELETE 请求服务器删除指定的页面。

    CONNECT HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。

    OPTIONS 允许客户端查看服务器的性能。

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

    5 HTTP状态码

    状态代码有三位数字组成,第一个数字定义了响应的类别,共分五种类别:

    1xx:指示信息–表示请求已接收,继续处理

    2xx:成功–表示请求已被成功接收、理解、接受

    3xx:重定向–要完成请求必须进行更进一步的操作

    4xx:客户端错误–请求有语法错误或请求无法实现

    5xx:服务器端错误–服务器未能实现合法的请求

    常见状态码

    200 OK //客户端请求成功

    301 Moved Permanently //永久移动

    302 //临时重定向

    303 //临时重定向且必须用GET方式请求

    304 //当浏览器多次访问同一个资源时,若第一次请求的结果还在缓存尚未过期,则访问资源时为了减少网络传输消耗,可以返回304让浏览器继续使用之前缓存中的内容。

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

    401 Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用,或协议格式出现了问题

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

    404 Not Found //请求资源不存在,eg:输入了错误的URL

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

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

    6 HTTP请求报文

    客户端发送一个HTTP请求到服务器的请求消息包括以下格式:

    请求行(request line)、请求头部(header)、空行和请求数据四个部分组成。

    图解请求报文:

    我们来看一个get请求

    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

    第一部分请求行:包括三个字段(请求方法,URL字段,HTTP版本字段)

    第二部分请求头部:HOST:指出对象所在主机。User-Agent:首部行用来指明用户代理,即向服务器发送求请求的浏览器类型。

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

    第四部分为请求主体:使用get方法是实体为空,使用post方法时才是用该实体。

    7 HTTP响应报文

    一般情况下,服务器接收并处理客户端发过来的请求后会返回一个HTTP的响应消息。

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

    响应报文内容

     1 HTTP/1.1 200 OK                                          
     2 Date: Mon, 10 June 2019 11:19:01 GMT
     3 Content-Type: text/html;charset=ISO-8859-1
     4 Content-Length: 122
     5 
     6 <html>
     7 <head>
     8 <title>page</title>
     9 </head>
    10 <body>
    11 <!--body goes here-->
    12 </body>
    13 </html> 

    第一部分:状态行,由HTTP协议版本号, 状态码, 状态消息 三部分组成。

    第1行为状态行,(HTTP/1.1)表明HTTP版本为1.1版本,状态码为200,状态消息为(ok)

    第二部分:消息报头,用来说明客户端要使用的一些附加信息

    第2行和第3行为消息报头。Date:生成响应的日期和时间;Content-Type:指定了MIME类型的HTML(text/html),编码类型是UTF-8

    第三部分:第5行空行,消息报头后面的空行是必须的。

    第四部分:第6行以后为响应正文,服务器返回给客户端的文本信息。空行后面的html部分为响应正文。

    8 总结

    今天学习了计算机网络7层模型中应用层中的一个重要协议-HTTP协议。

    主要学习了HTTP协议的特点、工作原理、请求/响应模式和报文格式等等。

    最后要非常感谢AwsuEver提供的文章,对我的学习有很大帮助,在这里给出原文链接

  • 相关阅读:
    js对象数组(JSON) 根据某个共同字段 分组
    一个 函数 用来转化esSearch 的range 条件
    关于 vuex 报错 Do not mutate vuex store state outside mutation handlers.
    android listview 重用view导致的选择混乱问题
    android SDK和ADT的更新
    Android中adb push和adb install的使用区别
    pycharm中添加扩展工具pylint
    su Authentication failure解决
    Putty以及adb网络调试
    有关android源码编译的几个问题
  • 原文地址:https://www.cnblogs.com/chrischen98/p/10996765.html
Copyright © 2011-2022 走看看