1.2 HTTP详解
本节主要介绍HTTP的概念、请求方法、请求状态码、URL和响应头信息。
1.2.1 HTTP概述
我们在上网时,需要打开网页,输入地址,那么这些页面是如何正确地显示到我们的计算机上的呢?数据是如何穿过重重障碍,跨越千山万水来到我们的计算机上的呢?从技术原理上来说,是许多协议层层配合。这其中就需要用到一种很重要的协议,即HTTP。
HTTP是一个客户端(用户)和服务器(网站)之间请求和应答的标准,通常使用TCP。通过使用网页浏览器、网络爬虫或者其他的工具,客户端发起一个HTTP请求到服务器上指定端口(默认端口为80),我们称这个客户端为用户代理程序(User Agent)。应答的服务器上存储着一些资源,如HTML文件和图像,我们称这个应答服务器为源服务器。
简单来说,客户端使用HTTP格式来构造请求包内容,将其发送出去之后,服务器再以HTTP格式来构造应答包,发送回客户端。客户端接收到这个包之后进行解析,最终得到我们看到的网页架构。
一个HTTP请求包例子如图1-1所示。
对应的HTTP返回包例子如图1-2所示。
图1-1 一个HTTP请求包例子
图1-2 一个HTTP返回包例子
下面几小节将会进一步解释这些信息分别是什么含义。
1.2.2 HTTP请求方法
HTTP请求方法定义了HTTP请求时所要告诉服务器执行的动作。常见的HTTP请求方法有以下几种。
• GET:通常用于直接获取服务器上的资源。
• POST:一般用于向服务器发送数据,常用于更新资源信息。
• PUT:一般用于新增一个数据记录。
• PATCH:一般用于修改一个数据记录。
• DELETE:一般用于删除一个数据记录。
• HEAD:一般用于判断一个资源是否存在。
• OPTIONS:一般用于获取一个资源自身所具备的约束,如应该采用怎样的HTTP方法及自定义的请求头。
1.2.3 HTTP请求状态码
HTTP返回头中会含有一个HTTP状态码,通常由数字及相应的解释组成,如“200 OK”,下面对常见的HTTP状态码做一个介绍。
• 101 Switching Protocols:切换协议,通常见于HTTP切换为Websocket协议。
• 200 OK:请求成功。
• 201 Created:资源创建成果,通常用于回应动词PUT。
• 204 No Content:用于不回显任何内容的情况,如网络联通性检测。
• 301 Moved Permanently:永久跳转,浏览器以后访问到这个地址都会直接跳转到Location头所指向的新地址。
• 302 Found:临时跳转,会跳转到Location头所指向的地址。
• 404 Not Found:所请求资源不存在。
• 405 Method not allowed:方法不被允许。
• 500 Internal Server Error:服务器内部错误。
• 502 Bad Gateway:网关在转发内容时出错,通常是转发的下一站——后端不可达或返回了一些奇怪的信息。
• 504 Gateway Time-out:网关在转发内容时出错,通常是转发的下一站——后端不可达。
1.2.4 HTTP协议的URL
URL就是我们输入的网址,一个标准的URL如下:
https://url/read-6951.html?a=1&b=2#tag5
对每个部分进行解构,概括如下:
scheme:[//[userinfo@] host[:port]] path[?query] [#fragment]
• 协议scheme:用于代表这个URL所指向的协议。常见的如HTTP、HTTPS、FTP等。
• 用户信息userinfo:通常为“用户名:密码”这类格式,会被编码在Authorization头中发向服务器。
• 主机名(host):指向网络上的服务器的地址、域名,或者IP地址。
• 端口(port):指向服务器上的端口,如果不填写就会依据协议设置成默认值并且不展示。例如,HTTP是80端口,HTTPS是443端口,FTP是21端口。
• 请求路径(path):指向服务器上资源的路径,如/read-6591.html会请求该路径对应的资源。
• 请求参数(query):在请求资源时所带的参数,后端可获取到这些参数。例如,a=1&b=2代表有两个参数a和b,值分别为1和2。
• 页面描点(fragment):用于指向页面上某个元素,不会被实际发送到服务器,浏览器会进行处理并滚动到该元素出现的地方。
1.2.5 HTTP响应头信息
可以看到,返回的请求包中有许多内容,其中返回头的内容非常丰富,这里挑选几个常见的返回头来进行讲解。
• Set-Cookie:此头用于远程服务器向本地设置Cookie,Cookie是一种凭证,一般用于客户端向远程服务器证明身份,举例如下:
• Location:这个头用于跳转,通常和上面提到301及302状态码共用,举例如下:
当浏览器看到这个头后,就会跳转到https://url页面上了。