目录
HTTP是什么
HTTP请求(get与post)
GET 方法:
POST 方法:
url的基本构成
常见的请求头与响应头
请求头(Request Headers)
响应头(Response Headers)
HTTP相应码
100系列 - 信息响应
200系列 - 成功响应
300系列 - 重定向响应
400系列 - 客户端错误响应
500系列 - 服务器错误响应
浏览器是如何访问网站的
HTTP是什么
HTTP,全称HyperText Transfer Protocol(超文本传输协议),是一种用于从Web服务器传输超文本到本地Web浏览器的应用层协议。HTTP是互联网上应用最为广泛的一种网络协议,它工作在客户端-服务器模型之上,客户端(通常是浏览器)向服务器发送请求,服务器对请求进行响应。
HTTP请求(get与post)
简单来说,get用于请求资源,post用来提交资源。
GET 方法:
用途:GET用来请求访问已经被URI(统一资源定位符)识别的资源。可以通过URI传参来指定服务器上的资源。
POST 方法:
用途:POST用来向指定资源提交数据,请求服务器进行处理(如提交表单或上传文件),并且可能会导致新的资源的创建或已有资源的修改。
url的基本构成
URL(Uniform Resource Locator,统一资源定位符)是用于标识互联网上资源的位置以及访问这些资源的方法的标准格式。URL的基本构成可以分解为以下几个部分:
-
协议(Scheme):指明了用于访问资源的协议类型,例如HTTP、HTTPS、FTP等。这是URL的第一部分,通常以
://
结尾。例子:
https://
-
主机名(Host Name):指定了资源所在的服务器的域名或IP地址。
例子:
www.example.com
-
端口号(Port Number):指定了服务器上监听的端口,默认情况下HTTP端口为80,HTTPS端口为443。如果使用默认端口,端口号可以省略。
例子:
:
后面跟端口号,如:8080
-
路径(Path):指定了服务器上的具体位置,可以包含目录层级和文件名。
例子:
/path/to/resource
-
查询字符串(Query String):包含了请求参数,通常用于GET请求中传递变量。查询字符串以
?
开始,并且可以包含多个键值对,键值对之间用&
符号分隔。例子:
?key1=value1&key2=value2
-
片段标识符(Fragment Identifier):也称为锚点(Anchor),用于标识文档内部的一个具体位置,通常用于跳转到页面内的某一部分。片段标识符以
#
开始。例子:
#section1
https://www.example.com:8080/path/to/resource?key1=value1&key2=value2#section1
https
是协议。www.example.com
是主机名。8080
是端口号。/path/to/resource
是路径。key1=value1&key2=value2
是查询字符串。#section1
是片段标识符。
常见的请求头与响应头
HTTP请求头(Request Headers)和响应头(Response Headers)是HTTP消息的一部分,它们携带了客户端和服务端之间的元信息,这些元信息有助于控制请求或响应的行为。下面分别列出一些常见的请求头和响应头及其用途。
请求头(Request Headers)
请求头提供了关于客户端请求的额外信息,以及如何处理请求的指示。以下是一些常见的请求头:
1. Accept: 指定客户端能接受的内容类型列表,如 `Accept: text/html,application/xhtml+xml` 表示客户端可以接收HTML类型的响应。
2. Accept-Encoding: 客户端支持的内容编码方式,如 `Accept-Encoding: gzip, deflate` 表示客户端支持gzip或deflate压缩格式。
3. Accept-Language: 客户端优先接收的语言种类,如 `Accept-Language: en-US,en;q=0.9,zh-CN;q=0.8` 表示客户端偏好接收英语(美式)语言的响应。
4. Authorization: 包含认证信息,通常用于Basic或Bearer Token认证。
5. Cache-Control: 指定请求和响应遵循的缓存机制,如 `Cache-Control: no-cache` 可以要求不缓存请求或响应。
6. Connection: 控制是否关闭连接,如 `Connection: keep-alive` 表示保持连接打开。
7. Content-Length: 请求消息体的长度(单位为字节),用于告诉服务器请求体的大小。
8. Content-Type: 请求消息体的MIME类型,如 `Content-Type: application/json` 表示请求体是一个JSON格式的数据。
9. Cookie: 包含客户端的Cookie信息,用于维护会话状态。
10. Host: 客户端请求的目标主机和端口,如 `Host: www.example.com`。
11. If-Modified-Since: 如果请求的资源自从指定的时间之后没有被修改过,则返回304(Not Modified)响应。
12. User-Agent: 客户端的软件信息,如浏览器类型、版本号等。
响应头(Response Headers)
响应头提供了关于响应的额外信息,帮助客户端理解响应内容。以下是一些常见的响应头:
1. Age: 响应在发送给客户端之前,在代理缓存中停留的时间。
2. Cache-Control: 控制请求和响应遵循的缓存机制,如 `Cache-Control: max-age=3600` 表示响应可以被缓存1小时。
3. Connection: 用于控制是否关闭连接,如 `Connection: close` 表示关闭连接。
4. Content-Encoding: 使用的内容编码方式,如 `Content-Encoding: gzip` 表示响应体已被gzip压缩。
5. Content-Length: 响应消息体的长度(单位为字节)。
6. Content-Type: 响应消息体的MIME类型,如 `Content-Type: image/jpeg` 表示响应体是一个JPEG图像。
7. Date: 服务器生成响应的日期和时间。
8. ETag: 实体标签,可以用来检查资源是否已更改,常用于验证缓存的有效性。
9. Expires: 响应在什么时间之后不再被缓存。
10. Last-Modified: 自上次资源被修改的时间。
11. Location: 当响应状态码为3xx时,该头部包含重定向地址。
12. Server: 服务器软件的名称和版本。
13. Set-Cookie: 服务器设置或更新Cookie。
14. Transfer-Encoding: 数据传输的编码方式,如 `Transfer-Encoding: chunked` 表示数据以分块的形式传输。
这些头字段在实际的HTTP通信中起着至关重要的作用,它们帮助确保请求和响应能够在客户端和服务端之间正确地交换数据。
HTTP相应码
HTTP响应码用于告知客户端请求的结果。响应码由三个数字组成,分为五个类别,每个类别都有其特定的意义。下面是HTTP响应码的主要分类及常见响应码:
100系列 - 信息响应
这类状态码表示请求已被接受,需要继续处理。
100 Continue:初始部分请求已经成功,客户端应当继续发送请求的其余部分。
101 Switching Protocols:服务器将遵从客户的请求切换协议。
200系列 - 成功响应
这类状态码表示请求已成功,动作已执行。
200 OK:请求已成功,请求所希望的响应头或数据体将随此响应返回。
201 Created:请求成功并且服务器创建了新的资源。
202 Accepted:请求已被接受,但尚未被处理。
204 No Content:服务器已经成功处理了请求,但没有返回任何内容。
300系列 - 重定向响应
这类状态码表示需要客户端采取进一步的动作才能完成请求。
300 Multiple Choices:针对请求,服务器可执行多种操作。常见于使用GET方法的链接:server可根据请求的资源选择一张图片或者不同版本网页中的一个。
301 Moved Permanently:请求的资源已被永久移动到新位置,并且将来任何对此资源的引用都应该使用响应中获得的若干个URI之一。
302 Found:请求的资源现在临时从不同的URI响应请求。由于这样的重定向是临时的,客户端应当继续使用原有地址进行以后的请求。
303 See Other:客户端应该跟随响应中的Location字段给出的URI,用GET方法检索请求的响应。
304 Not Modified:自从上次请求后,请求的资源未修改过。条件性GET使用此响应码未更新本地资源。
307 Temporary Redirect:和302 Found类似,但要求客户端保留原有请求方法重新发送。
400系列 - 客户端错误响应
这类状态码表示请求含有语法错误或无法完成。
400 Bad Request:服务器不能或不会解析请求。
401 Unauthorized:请求要求身份验证。对于需要登录的网页,服务器可能返回此响应。
403 Forbidden:服务器理解请求客户端的请求,但是拒绝执行此请求。
404 Not Found:请求失败,请求所希望得到的资源未被在服务器上发现。
405 Method Not Allowed:请求方法无效,不允许在指定的URL上请求。
500系列 - 服务器错误响应
这类状态码表示服务器未能正常完成请求。
500 Internal Server Error:服务器遇到了一个未曾预料的情况,导致了它无法完成对请求的处理。
501 Not Implemented:服务器不支持当前请求所需要的某个功能。
502 Bad Gateway:作为网关或代理工作的服务器从上游服务器收到了无效的响应。
503 Service Unavailable:服务器目前无法使用(由于超载或停机维护)。通常,这只是暂时状态。
504 Gateway Timeout:作为网关或代理工作的服务器从上游服务器等待响应的时间太长。
浏览器是如何访问网站的
当用户在浏览器中输入一个URL(Uniform Resource Locator,统一资源定位符)时,浏览器就会向服务器发起请求。
-
浏览器解析URL:浏览器首先解析URL,确定协议类型(http:// 或 https://)、主机名和路径。
-
DNS解析:浏览器会查询DNS(Domain Name System,域名系统)服务器,将主机名转换为对应的IP地址。
-
建立TCP连接:浏览器通过三次握手建立与服务器的TCP连接(Transmission Control Protocol,传输控制协议)。这是为了确保数据传输的可靠性。
-
发送HTTP请求:一旦TCP连接建立成功,浏览器就会向服务器发送HTTP请求。常见的HTTP请求方法有GET、POST等。请求头包含了一些附加信息,比如User-Agent(标识浏览器版本和操作系统)、Accept(指定浏览器接受的数据类型)等。
-
服务器处理请求:服务器接收到请求后,会查找相应的文件或执行PHP脚本。PHP是一种服务器端脚本语言,它会处理请求并生成响应内容。
-
返回HTTP响应:服务器返回一个HTTP响应,包括状态码(如200表示成功,404表示页面未找到等)、响应头(如Content-Type指明响应内容的类型,如text/html代表HTML文档)以及响应主体(即实际的网页内容)。
-
关闭TCP连接:浏览器接收完所有数据后,关闭TCP连接。有时,为了节省资源,浏览器和服务器可能会保持持久连接,以便后续请求无需重新建立连接。