关于HTTP的一些心得

时间:2021-08-17 16:42:16

作者:IamA-知乎

概要:本文讲的是HTTP的部分知识,是本人的学习心得,可能会有讲解错误,敬请指正。

正文: HTTP(Hyper Text Transfer Protocol),意为:超文本传输协议,是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。HTTP协议用于从WWW服务器传输超文本到本地浏览器的传输协议。它可以使浏览器更加高效,使网络传输减少。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等。(转自百度百科)

 

这篇主要讲解HTTP请求/响应。


HTTP请求:(如图)

 

 

关于HTTP的一些心得

 

 

HTTP协议的请求主要分为三部分组成:请求行、请求报头和请求体(后两项可以选,必须要有请求头)。


请求行以一个方法符号开头,以空格分开,后面跟着请求的URI和协议的版本,格式如下:

 

Method Request-URI HTTP-Version CRLF

 

Method:请求方法。

Request-URI:一个统一资源标识符。

HTTP-Version:请求的HTTP协议版本。

CRLF:回车和换行(除了作为结尾的CRLF外,不允许出现单独的CR或LF字符)。

 

请求方法(所有方法全为大写)有多种,各个方法的解释如下:

GET 请求获取Request-URI所标识的资源。

POST 在Request-URI所标识的资源后附加新的数据。

HEAD 请求获取由Request-URI所标识的资源的响应消息报头。

PUT 请求服务器存储一个资源,并用Request-URI作为其标识。

DELETE 请求服务器删除Request-URI所标识的资源。

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

CONNECT 保留将来使用。

OPTIONS 请求查询服务器的性能,或者查询与资源相关的选项和需求。

 

常用的请求报头:

Accept:用于指定客户端接受哪些类型的信息。

Accept-Charset:用于指定客户端接受的字符集。

Accept-Encoding:类似于Accept,但是它是用于指定可接受的内容编码。

Accept-Language:类似于Accept,但是它是用于指定一种自然语言。

Authorization:主要用于证明客户端有权查看某个资源。

Host:主要用于指定被请求资源的Internet主机和端口号,它通常从HTTP URL中提取出来的。(发送请求时,该报头域是必需的)。

User-Agent:允许客户端将它的操作系统、浏览器和其它属性告诉服务器。

上述不是全部,有兴趣可以去查一下。


HTTP响应:

HTTP响应也是由三个部分组成,分别是:状态行、消息报头、响应正文,状态行格式如下:

 

HTTP-Version Status-Code Reason-Phrase CRLF

 

HTTP-Version:服务器HTTP协议的版本。

Status-Code:服务器发回的响应状态代码。

Reason-Phrase:状态代码的文本描述。

 

状态代码有三位数字组成,第一个数字定义了响应的类别,且有五种可能取值:

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

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

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

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

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

 

常见的状态代码及状态描述:

200 OK //客户端请求成功

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

401 Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用

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

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

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

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

 

这些状态代码我们大多数情况是一点都不希望见到的。唯一想见到的200则大多数直接跳转至网页。

 

常用的响应报头

Location:用于重定向接受者到一个新的位置。

Server:其包含了服务器用来处理请求的软件信息。与User-Agent请求报头域是相对应的。

WWW-Authenticate:其必须被包含在401(未授权的)响应消息中,客户端收到401响应消息时候,并发送Authorization报头域请求服务器对其进行验证时,服务端响应报头就包含该报头域。


这些说明有点难懂,而且一般是不会详细看到这些内容的,因为我们是使用浏览器打开网页,不会是手动发送请求来访问一个网页,那样效率十分低下。但是我们可以通过Telnet来详细了解过程。

我们以www.baidu.com为例子:

  1. 打开”运行”->cmd进入命令行。

 

关于HTTP的一些心得

 

 

关于HTTP的一些心得

 

  1. 输入”telnet”,回车,输入set(空格) localecho打开本地回显功能。

 

关于HTTP的一些心得

 

 

关于HTTP的一些心得

 

3. 然后连接网站,先输入:

open www.baidu.com 80

再输入请求:

GET / HTTP/1.1

连按两下回车(第一下是请求的格式需要,第二下是执行。)

如果成功收到响应的话,会是以下情况:

 

关于HTTP的一些心得

 

如果失败,则会显示:HTTP/1.1 400 Bad Request(当然,这是一个状态行)。


可能出现的问题:

  1. 无法使用telnet,显示这是一个无效的命令。

解决方案:这是没有开启telnet客户端,在控制面板中的程序中,打开“启用或关闭Windows功能”,拉到下面有“Telnet客户端”,点上。

2.手打进去后敲一下回车就出现400。

解决方案:直接复制上面的请求粘贴(请使用快捷键)进去,再敲两下回车。

 原文链接:https://zhuanlan.zhihu.com/p/43087625