HTTP协议

本文详细介绍了HTTP协议,包括其简介、请求和响应过程、HTTP状态码的分类及其常见意义。通过浏览器的开发者工具,我们可以观察到HTTP请求的详细信息,如GET请求的组成部分、响应头和响应体。HTTP状态码200表示请求成功,404表示请求资源不存在,500表示服务器内部错误。HTTP协议采用简单的请求-响应模式,具有良好的扩展性和资源请求的灵活性。
摘要由CSDN通过智能技术生成

HTTP协议

简介
  • HTML是一种用来定义网页的文本,会HTML,就可以编写网页;
  • HTTP是在网络上传输HTML的协议,用于浏览器和服务器的通信。

Chrome浏览器提供了一套完整地调试工具,非常适合Web开发。
安装好Chrome浏览器后,打开Chrome,在菜单中选择“视图”,“开发者”,“开发者工具”,就可以显示开发者工具:
在这里插入图片描述

说明
  • Elements显示网页的结构
  • Network显示浏览器和服务器的通信

我们点Network,确保第一个小红灯亮着,Chrome就会记录所有浏览器和服务器之间的通信:
在这里插入图片描述

2.http协议的分析

当我们在地址输入www.sina.com时,浏览器将显示新浪的首页。这个过程中,浏览器都干了那些事呢? 通过Network的记录,我们就知道,在Network中,找到www.sina.com那条记录,点击,右侧将显示Request Headers,点击右侧view source,我们就可以看到浏览器发给新浪服务器的请求:

2.1浏览器请求

在这里插入图片描述
在这里插入图片描述
说明:
最主要的头两行分析如下,第一行

GET / HTTP/1.1

GET表示一个读取请求,将从服务器获取的网页数据,/表示URL的路劲,URL总是以/开头,/就表示首页,最后的HTTP/1.1指示采用的HTTP协议是1.1。muqianHTTP协议的版本就是1.1,但是大部分服务器也支持1.0版本,主要区别在于1.1版本允许多个HTTP请求复用一个TCP连接,已加速传输速度。

从第二行开始,每一行都是类似Xxx:abcdefg:

Host:www.sina.com

表示请求的域名是www.sina.com。如果一台服务器有多个网站,服务器就需要通过Host来区分浏览器请求那个网站。

2.2响应服务器

继续往下找到Response Headers,点击view source,显示服务器返回的原始响应数据:
在这里插入图片描述
HTTP响应分为Header和Body两部分(Body是可选项),我们在Network中看到的Header最重要的几行如下:

HTTP/1.1 200 OK

200表示一个成功的响应,后面的OK是说明。

如果返回的不是200,那么往往有其他的功能,例如:

  • 失败的响应有404 Not Found:网页不存在
  • 500 lnternal Server Error:服务器内部有错
  • 等等…
Content-Type: text/html

Content-Type指示相应的内容,这里是text/HTML网页。

请注意,浏览器就是依靠Content-Type来判断响应内容是网页还是图片,是视屏还是音乐。浏览器并不靠URL来判断相应的内容,所以,即使URL是http://www.baidu.com/meimei.jpg,它也不一定是图片。

HTTP相应的Body就是HTML源码,我们在菜单栏选择"视图",“开发者”,"查看网页源码"就可以在浏览器中直接看HTML源码:
在这里插入图片描述
浏览器解析过程:
当浏览器读取到新浪首页的HTML源码后,它会解析HTML,显示页面,然后,根据HTML里面的各种链接,再发送HTTP请求给新浪服务器,拿到相应的图片、视屏、Flash、JavaScript脚本、CSS等各种资源,最终显示出一个完整的页面。所以我们在Network下面能看到很多额外的HTTP请求。
在这里插入图片描述
在这里插入图片描述

3.总结
3.1 HTTP请求

跟踪了新浪的首页,我们来总结一下HTTP请求的流程:

3.1.1.步骤1:浏览器首先向服务器发送HTTP请求,请求包括:

方法:GET还是POST,GET仅请求资源,POST会附带用户数据;
路径:/full/url/path;
域名:由Host头指定:Host: www.sina.com
以及其他相关的Header;
如果是POST,那么请求还包括一个Body,包含用户数据

3.1.1.步骤2:服务器向浏览器返回HTTP响应,响应包括:

响应代码:200表示成功,3xx表示重定向,4xx表示客户端发送的请求有误。5xx表示服务器处理时发生了错误;
响应类型: 由Content-Type指定;
以及其他相关的Header;
通常服务器HTTP响应会携带内容,也就是有一个Body,包含响应的内容,网页的HTML源码就在Body中。

3.1.1.步骤3:如果浏览器还需要继续向服务器请求其他资源,比如图片,就再次发出HTTP请求,重复步骤1、2.

Web采用的HTTP协议采用了非常简单的请求-响应模式,从而大大简化了开发。当我们编写一个页面是,我们只需要在HTTP请求中吧HTML发送出去,就不需要考虑如何附带图片,视屏等,浏览器如果需要请求图片和视屏,它会发送另一个HTTP请求,因此,一个HTTP请求只处理一个资源(此时就可以理解为TCP协议中的短连接,每个链接至获取一个资源,如需要多个就需要建立多个链接)

HTTP协议同时具备极强的扩展性,虽然浏览器请求的是http://www.sina.com的首页,但是新浪在HTML中可以链入其他服务器的资源,比如 <img …>,从而将请求压力分散到各个服务器上,并且,一个站点可以链接到其他站点,无数个站点互相链接起来,就形成了World Wide Web,简称WWW。
在这里插入图片描述

3.2.HTTP格式

每个HTTP请求和响应都遵循相同的格式,一个HTTP包含Header和Body两部分,其中Body是可选的。
HTTP协议是一种文本协议,所以,它的格式也非常简单。

3.2.1 HTTP GET请求的格式:

	GET /path HTTP/1.1
	Header1: Value1
	Header2: Value2
	Header3: Value3

每个Header一行一个,换行符是\r\n。

3.2.2 HTTP POST请求的格式:

	POST /path HTTP/1.1
	Header1: Value1
	Header2: Value2
	Header3: Value3
	
	body data goes here...

当遇到连续两个\r\n时,Header部分结束,后面的数据全部是Body。

3.2.3 HTTP响应的格式:

	200 OK
	Header1: Value1
	Header2: Value2
	Header3: Value3
	
	body data goes here...
	HTTP响应如果包含body,也是通过\r\n\r\n来分隔的。
	请再次注意,Body的数据类型由Content-Type头来确定,如果是网页,Body就是文本,如果是图片,Body就是图片的二进制数据。
	当存在Content-Encoding时,Body数据是被压缩的,最常见的压缩方式是gzip,所以,看到Content-Encoding: gzip时,需要将Body数据先解压缩,才能得到真正的数据。压缩的目的在于减少Body的大小,加快网络传输。

二、HTTP状态码

HTTP状态码的英文为HTTP Status Code

常见的HTTP状态码

  • 200 - 请求成功
  • 301 - 网页等资源被永久转移到其它URL
  • 302 - 网页等资源被临时转移到其它URL
  • 404 - 请求的资源(网页等)不存在
  • 500 - 内部服务器错误
HTTP状态码分类

HTTP状态码由三个十进制数字组成,第一个十进制数字定义了状态码的类型,后两个数字没有分类的作用。

HTTP状态码共分为5种类型:

分类分类描述
1xx信息,服务器收到请求,需要请求者继续执行操作
2xx成功,操作被成功接收处理
3xx重定向,需要进行一步的操作已完成请求
4xx客户端错误,请求包含语法有误或无法完成请求
5xx服务器错误,服务器在处理请求的过程中发生了错误

HTTP状态码列表:

100 Continue 继续。客户端应继续其请求
101 Switching Protocols 切换协议。服务器根据客户端的请求切换协议。只能切换到更高级的协议,例如,切换到HTTP的新版本协议
200 OK 请求成功。一般用于GET与POST请求
201 Created 已创建。成功请求并创建了新的资源
202 Accepted 已接受。已经接受请求,但未处理完成
203 Non-Authoritative Information 非授权信息。请求成功。但返回的meta信息不在原始的服务器,而是一个副本
204 No Content 无内容。服务器成功处理,但未返回内容。在未更新网页的情况下,可确保浏览器继续显示当前文档
205 Reset Content 重置内容。服务器处理成功,用户终端(例如:浏览器)应重置文档视图。可通过此返回码清除浏览器的表单域
206 Partial Content 部分内容。服务器成功处理了部分GET请求
300 Multiple Choices 多种选择。请求的资源可包括多个位置,相应可返回一个资源特征与地址的列表用于用户终端(例如:浏览器)选择
301 Moved Permanently 永久移动。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替
302 Found 临时移动。与301类似。但资源只是临时被移动。客户端应继续使用原有URI
303 See Other 查看其它地址。与301类似。使用GET和POST请求查看
304 Not Modified 未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端通常会缓存访问过的资源,通过提供一个头信息指出客户端希望只返回在指定日期之后修改的资源
305 Use Proxy 使用代理。所请求的资源必须通过代理访问
306 Unused 已经被废弃的HTTP状态码
307 Temporary Redirect 临时重定向。与302类似。使用GET请求重定向
400 Bad Request 客户端请求的语法错误,服务器无法理解
401 Unauthorized 请求要求用户的身份认证
402 Payment Required 保留,将来使用
403 Forbidden 服务器理解请求客户端的请求,但是拒绝执行此请求
404 Not Found 服务器无法根据客户端的请求找到资源(网页)。通过此代码,网站设计人员可设置"您所请求的资源无法找到"的个性页面
405 Method Not Allowed 客户端请求中的方法被禁止
406 Not Acceptable 服务器无法根据客户端请求的内容特性完成请求
407 Proxy Authentication Required 请求要求代理的身份认证,与401类似,但请求者应当使用代理进行授权
408 Request Time-out 服务器等待客户端发送的请求时间过长,超时
409 Conflict 服务器完成客户端的PUT请求是可能返回此代码,服务器处理请求时发生了冲突
410 Gone 客户端请求的资源已经不存在。410不同于404,如果资源以前有现在被永久删除了可使用410代码,网站设计人员可通过301代码指定资源的新位置
411 Length Required 服务器无法处理客户端发送的不带Content-Length的请求信息
412 Precondition Failed 客户端请求信息的先决条件错误
413 Request Entity Too Large 由于请求的实体过大,服务器无法处理,因此拒绝请求。为防止客户端的连续请求,服务器可能会关闭连接。如果只是服务器暂时无法处理,则会包含一个Retry-After的响应信息
414 Request-URI Too Large 请求的URI过长(URI通常为网址),服务器无法处理
415 Unsupported Media Type 服务器无法处理请求附带的媒体格式
416 Requested range not satisfiable 客户端请求的范围无效
417 Expectation Failed 服务器无法满足Expect的请求头信息
500 Internal Server Error 服务器内部错误,无法完成请求
501 Not Implemented 服务器不支持请求的功能,无法完成请求
502 Bad Gateway 作为网关或者代理工作的服务器尝试执行请求时,从远程服务器接收到了一个无效的响应
503 Service Unavailable 由于超载或系统维护,服务器暂时的无法处理客户端的请求。延时的长度可包含在服务器的Retry-After头信息中
504 Gateway Time-out 充当网关或代理的服务器,未及时从远端服务器获取请求
505 HTTP Version not supported 服务器不支持请求的HTTP协议的版本,无法完成处理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值