HTTP协议

作者: 南方小小姑娘 | 来源:发表于2018-05-28 13:43 被阅读0次

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

    一:HTTP请求(Request)的结构

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

    请求行:

    包括三个部分,请求方法(POST、GET、PUT 等)、URL、http版本号。三者之间用空格分开。最后有一个回车换行标志(CRLF)。

    请求头部:

    由若干个报头组成。每个报头的结构为:名字+“:”+空格+值。名字是大小写无关的。这些报头用来设置http请求的一些参数,例如host表示被请求资源的主机和端口号。host报头在请求时是必备的。

    空行:

    请求头部后面的空行是必须的,即使第四部分的请求数据为空,也必须有空行。 浏览器发送了一空白行来通知服务器,它已经结束了该头信息的发送

    数据体:

    只在POST请求里用到,表示要上传的数据。数据体和头部之间有一行空行。

    POST请求例子:

    第一部分:请求行,第一行表明了是post请求,以及http1.1版本。

    第二部分:请求头部,第二行至第六行。

    第三部分:空行,第七行的空行。

    第四部分:请求数据,第八行。

    二:HTTP响应报文(Response)的结构

    服务器接收并处理客户端发过来的请求后会返回一个HTTP的响应消息;http响应报文:状态行、响应头部、响应正文。

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

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

    第二行和第三行为消息报头,

    Date:生成响应的日期和时间;Content-Type:指定了MIME类型的HTML(text/html),编码类型是UTF-8

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

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

    三:常见的HTTP状态码

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

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

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

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

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

    常见状态码描述:

    100 Continue 继续,一般在发送post请求时,已发送了http header之后服务端将返回此信息,表示确认,之后发送具体参数信息

    200 OK 正常返回信息

    201 Created 请求成功并且服务器创建了新的资源

    202 Accepted 服务器已接受请求,但尚未处理

    301 Moved Permanently 请求的网页已永久移动到新位置

    302 Found 临时性重定向

    303 See Other 临时性重定向,且总是使用 GET 请求新的 URI

    304 Not Modified 自从上次请求后,请求的网页未修改过

    400 Bad Request 服务器无法理解请求的格式,客户端不应当尝试再次使用相同的内容发起请求

    401 Unauthorized 请求未授权

    403 Forbidden 禁止访问

    404 Not Found 找不到如何与 URI 相匹配的资源

    500 Internal Server Error 最常见的服务器端错误

    503 Service Unavailable 服务器端暂时无法处理请求(可能是过载或维护)

    四:常见的http请求方法

    HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。

    HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。

    GET: 用于请求访问已经被URI(统一资源标识符)识别的资源,可以通过URL传参给服务器。

    POST:用于传输信息给服务器,主要功能与GET方法类似,但一般推荐使用POST方式。

    PUT: 传输文件,报文主体中包含文件内容,保存到对应URI位置。

    HEAD: 获得报文首部,与GET方法类似,只是不返回报文主体,一般用于验证URI是否有效。

    DELETE:删除文件,与PUT方法相反,删除对应URI位置的文件。

    OPTIONS:查询相应URI支持的HTTP方法。

    GET方法与POST方法的区别:

    1、get重点在从服务器上获取资源,post重点在向服务器发送数据;

    2、get传输数据是通过URL请求,以field(字段)= value的形式,置于URL后,并用"?"连接,多个请求数据间用"&"连接,如http://127.0.0.1/Test/login.action?name=admin&password=admin,这个过程用户是可见的;post传输数据通过Http的post机制,将字段与对应值封存在请求实体中发送给服务器,这个过程对用户是不可见的;

    3、Get传输的数据量小,因为受URL长度限制,但效率较高;Post可以传输大量数据,所以上传文件时只能用Post方式

    4、get是不安全的,因为URL是可见的,可能会泄露私密信息,如密码等;post较get安全性较高

    5、get方式只能支持ASCII字符,向服务器传的中文字符可能会乱码;post支持标准字符集,可以正确传递中文字符。

    五:浏览器输入www.baidu.com会发生什么?主要过程:网络通信和页面渲染

    当我们在浏览器上敲入一个url时, 浏览器首先接收该url的域名并分析是否符合URL标准,不符合的话,会交给搜索引擎

    如果是正确的URL,那么浏览器会检索该主机的HOST列表,如果有该域名的IP的话,就万事大吉。否则发送域名给最近的DNS进行解析。DNS接收该域名后,先请求本地服务器缓存,如果本地服务器也没有该域名的IP的话,那么由本地服务器依次向上请求,根服务器,com服务器,百度服务器,直到找到baidu.com的IP地址

    DNS将域名对应的IP地址返回给浏览器

    应用层浏览器客户端向IP地址所对应的的服务器发送请求数据(请求行为:GET http://www.baidu.com/HTTP/1.1)

    传输层TCP传输请求报文,“三次握手”建立TCP连接,一般TCP连接的端口号是80

    网络层IP协议查询MAC地址,IP协议的作用是把TCP分割好的各种数据包传送给接收方,而要保证报文确实能传到接收方还需要接收方的MAC地址,也就是物理地址。ARP协议可以将IP地址解析成对应的MAC地址

    在找到对方的MAC地址后,就将数据发送到数据链路层传输。这时,客户端发送请求的阶段结束

    接收端的服务器在链路层接收到数据包,再层层向上直到应用层。这过程中包括在传输层通过TCP协议将分段的数据包重新组成原来的HTTP请求报文。

    服务器响应请求,发回网页内容(响应状态行为:HTTP/1.1 200 OK)

    客户端浏览器获取网页内容,解析HTML并进行渲染来显示在浏览器上。

    相关文章

      网友评论

        本文标题:HTTP协议

        本文链接:https://www.haomeiwen.com/subject/bvqgjftx.html