HTTP协议详解

1. HTTP协议简介

  HTTP协议,俗称超文本传输协议,是一种用于分布式、协作式的超媒体信息系统的应用层协议,是万维网的数据通信的基础。目前存在着HTTP1.0、HTTP1.1和HTTP2.0。

  HTTP1.0的特点:

    1. 一次TCP连接只能处理一个请求,响应结束,连接立即关闭,长连接需要手动设置keep-alive参数来建立;

    2. 不支持发送header信息,造成浪费带宽的现象,并且不支持断点续传功能;

    3. 不存在host域,在1.0中认为每台服务器都绑定一个唯一的IP地址。

    3. 判断缓存的标准只有if-Modified-Since和Expires,太单一。

  HTTP1.1的特点:

    1. 支持长连接,默认开启keep-alive,即连接不会立即断开,而是在指定的时间内没有请求或响应时才会断开,一个TCP连接可以传送多个HTTP请求和响应。

    2. 支持发送header信息,如果服务器确认客户端有权限请求,则开始发送body体,否则不需要发送body,一定程度上节约了带宽。

    3. 存在host域,即服务器上可以存在多个虚拟主机,他们共享一个IP地址,客户端请求的时候必须带上host域。

    4. 缓存处理标准更多,1.1引入Entity tag,If-Unmodified-Since, If-Match, If-None-Match等更多可供选择的缓存头来控制缓存策略。

    5. 新增了24个错误状态响应码,更加利于错误通知的管理。

  HTTP2.0的特点:

    1. 多路复用,可以在同一个TCP连接并发处理多个请求,相比1.1创建多TCP来处理并发请求的方法,节约了创建TCP连接的成本开销;

    2. 头部数据压缩,2.0使用HPACK算法对header的数据进行压缩,数据体积小,传输速度更快; 

    3. 服务器推送资源,在1.1中只有客户端发送请求,服务器才会进行响应,不存在服务器没有收到请求而去自动发送响应,这种机制有时候会造成很大的延迟,2.0引入server push,它允许服务器在浏览器请求之前推送资源给浏览器,这样客户端就可以直接从本地加载资源,更加快速。

 

2. HTTP协议概述

  HTTP是客户端到服务端请求和响应的标准。客户端通过使用浏览器、网络爬虫或者其他工具,向服务器发起一个HTTP请求(请求报文中包括请求的方法、URL、版本协议、请求头部和请求数据),然后TCP进行三次握手来创建连接,服务器监听到客户端发送过来的请求,给客户端返回一个响应(响应中包括协议版本、响应状态、服务器信息、响应头部和响应数据)。

 

3. HTTP的工作原理

  1. 浏览器通过URL域名向服务器发送一个请求,请求中包含请求行、请求头部、空行和请求数据四个部分;

  2. 在应用层中首先通过DNS协议解析域名,获取对应的IP地址;

  3. 解析出IP地址后,根据IP和服务器默认端口号80,由传输层的TCP协议向服务器发出三次握手,建立连接;

  4. 服务器监听到浏览器的请求后,做出响应,并发请求的资源发送给浏览器;

  5. 响应结束,释放TCP连接;

  6. 浏览器接收数据并进行相应操作。

 

4. HTTP的特点:

  1. 无状态保存

    HTTP是一种不保存状态,即无状态协议。HTTP协议自身不对请求和响应之间的通信状态进行保存。即每一次连接都是新的,和上一次连接没有任何关联。因为请求—响应机制,没发生一次请求,就伴随着一次响应,为了更大效率的处理大量事务(一次HTTP请求过程称为事务),HTTP协议本身不保留之前一切的请求或响应报文的信息。但是随着互联网业务不断发展,很多场景需要保存浏览器的状态,HTTP1.1于是引入了Cookie技术,浏览器可以通过Cookie来管理状态,但是它还是属于无状态协议。

  2. 无连接

    无连接的含义是每次连接只能处理一个请求,服务收到请求并做出响应后,连接自动断开。这种方式的好处是每次完成请求后,服务器和客户端的连接就断开了,可以提高并发性能。无连接分为两种方式:一种是1.0版本时候的服务器响应请求之后,连接就直接断开了;另一种是1.1版本他们之间的连接并不是直接断开,而是等个几秒钟,在这时间内,如果客户端有后续的请求,则在原来的连接通道继续来收发消息,如果客户端没有发送新的请求,则连接断开,这样的好处是减少了短时间内建立连接的次数,提高了效率,因为TCP建立连接也是需要耗时的。

  3. 明文传输数据

    HTTP是相对来说,安全性较低,web浏览器和服务器之间的数据传输,是以一种明文的方式进行,不经过任何加密的手段,他会将信息携带在URL地址中,一些重要的信息很容易被人获取到,它的传输的速度快,但是安全性较低。

 

5. HTTP常用的请求方法

  1. get    用于向服务器请求数据

  2. post     向服务器提交数据处理请求

  3. head    类似get请求,用于请求报文头,不包含响应体

  4. put    提交修改数据请求,覆盖式修改,即取代指定的内容

  5. patch   提交修改数据请求,不会覆盖式修改,即作局部更新

  6. delete     请求服务器删除指定的数据

  7. options   返回服务器对特殊资源支持的请求方式或查看服务器的性能

  8. trace    回显服务器收到的请求,主要用于测试或者诊断

 

6.  HTTP常见的状态码

  100:客户端应继续进行请求,即服务器已接收到第一部分,正等待后续请求(继续请求)

  101:客户端要求服务器求换协议,服务器已确认并准备切换(切换协议)

  200:请求成功,最常见的状态码(成功)

  201:请求成功并创建了新的资源(创建新的资源)

  202:服务器接受请求,但未处理(接受但未处理)

  204:服务器成功处理了请求,但是未返回任何内容(为返回内容)

  206:服务器成功处理了部分请求(部分内容)

  301:请求的资源被永久移动到了新的URL(永久移动)

  302:请求的资源被临时移动,可以继续使用原来的URL(临时移动)

  304:请求的内容未进行修改,返回的是之前网页缓存中的内容(内容未改变)

  305:客户端只能使用代理的方式访问请求的内容(代理请求)

  307:服务器从不同的位置的网页响应请求,应继续使用原有位置进行请求(临时重定向)

  308:请求地址被重定向,需要使用新的URL地址发送请求(永久重定向)

  400:服务器不理解请求的语法(语法错误)

  401:需要进行身份认证才能进行请求(未授权)

  403:服务器拒绝请求(拒绝)

  404:网页未找到(URL地址错误)

  407:客户端需要使用代理进行请求(代理清理)

  408:服务器等候请求时发生超时(请求超时)

  410:请求的资源被永久删除(资源删除)

  413:请求体过大,服务器无法处理请求(请求实体过大)

  414:请求的URL过长,服务器无法处理(URL过长)

  500:服务器发生错误,无法完成请求(服务器内部错误)

  502:错误网关

  503:服务器暂时不可用

  504:网关超时

  505:服务器不支持请求的HTTP协议版本

  

  

posted @   无敌小豆包  阅读(159)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示