百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

HTTP基础第二篇(红星照耀中国第二篇概括贺龙的相关事件)

nanshan 2024-10-21 06:03 15 浏览 0 评论

接上一篇。

HTTP请求方法

  • HTTP协议定义了一组请求方法。客户端可以使用这些请求方法之一向HTTP服务器发送请求消息。方法是:
  • GET:客户端可以使用GET请求从服务器获取Web资源。
  • HEAD:客户端可以使用HEAD请求获取GET请求将获得的头。由于标头包含数据的最后修改日期,因此可用于检查本地缓存副本。
  • POST:用于将数据发布到Web服务器。
  • PUT:要求服务器存储数据。
  • DELETE:要求服务器删除数据。
  • TRACE:要求服务器返回所需操作的诊断跟踪。
  • OPTIONS:要求服务器返回它支持的请求方法列表。
  • CONNECT:用于告诉代理与另一个主机建立连接,只需回复内容,而不尝试解析或缓存它。
  • 这通常用于通过代理进行SSL连接。
  • 其他扩展方法。

“GET”请求方法

GET是最常见的HTTP请求方法。

客户端可以使用GET请求方法从HTTP服务器请求(或“get”)一条资源。

GET请求消息采用以下语法:

GET request-URI HTTP-version
(optional request headers)
(blank line)
(optional request body)
  • 关键字GET区分大小写,必须为大写。
  • request-URI:指定所请求资源的路径,该路径必须从文档基目录的根“/”开始。
  • HTTP版本:HTTP / 1.0或HTTP / 1.1。该客户端协商用于当前会话的协议。例如,客户端可以请求使用HTTP / 1.1。如果服务器不支持HTTP / 1.1,它可能会通知响应中的客户端使用HTTP / 1.0。
  • 客户端使用可选的请求标头(例如Accept,Accept-Language等)与服务器协商并要求服务器提供首选内容(例如,以客户首选的语言)。
  • GET请求消息具有可选的请求主体,其包含查询字符串(稍后将对此进行说明)。

测试HTTP请求

有很多方法可以测试HTTP请求。您可以使用实用程序,如“telnet”或“hyperterm”(在c:\ windows下搜索“telnet.exe”或“hypertrm.exe”),或编写自己的网络程序将原始请求消息发送到HTTP服务器测试各种HTTP请求。

Telnet

“Telnet”是一个非常有用的网络实用程序。您可以使用telnet与服务器建立TCP连接;并发出原始HTTP请求。例如,假设您已在端口8000的localhost(IP地址127.0.0.1)中启动了HTTP服务器:

> telnet
telnet> help
... telnet help menu ...
telnet> open 127.0.0.1 8000
Connecting To 127.0.0.1...
GET /index.html HTTP/1.0
(Hit enter twice to send the terminating blank line ...)
... HTTP response message ...

Telnet是一种基于字符的协议。您在telnet客户端上输入的每个字符都将立即发送到服务器。因此,输入raw命令时不能输入拼写错误,因为delete和backspace将被发送到服务器。您可能必须启用“本地回显”选项才能看到您输入的字符。有关使用telnet的详细信息,请查看telnet手册(搜索Windows帮助)。

Network Program

您还可以编写自己的网络程序,以向HTTP服务器发出原始HTTP请求。您的网络程序应首先与服务器建立TCP / IP连接。建立TCP连接后,您可以发出原始请求。

用Java编写的网络程序示例如图所示(假设HTTP服务器在端口8000的localhost(IP地址127.0.0.1)上运行):

import java.net.*;
import java.io.*;
 
public class HttpClient {
 public static void main(String[] args) throws IOException {
 // The host and port to be connected.
 String host = "127.0.0.1";
 int port = 8000;
 // Create a TCP socket and connect to the host:port.
 Socket socket = new Socket(host, port);
 // Create the input and output streams for the network socket.
 BufferedReader in
 = new BufferedReader(
 new InputStreamReader(socket.getInputStream()));
 PrintWriter out
 = new PrintWriter(socket.getOutputStream(), true);
 // Send request to the HTTP server.
 out.println("GET /index.html HTTP/1.0");
 out.println(); // blank line separating header & body
 out.flush();
 // Read the response and display on console.
 String line;
 // readLine() returns null if server close the network socket.
 while((line = in.readLine()) != null) {
 System.out.println(line);
 }
 // Close the I/O streams.
 in.close();
 out.close();
 }
}

HTTP / 1.0 GET请求

以下显示了HTTP / 1.0 GET请求的响应(通过telnet或您自己的网络程序发出的问题 - 假设您已启动HTTP服务器):

GET /index.html HTTP/1.0
(enter twice to create a blank line)
HTTP/1.1 200 OK
Date: Sun, 18 Oct 2009 08:56:53 GMT
Server: Apache/2.2.14 (Win32)
Last-Modified: Sat, 20 Nov 2004 07:16:26 GMT
ETag: "10000000565a5-2c-3e94b66c2e680"
Accept-Ranges: bytes
Content-Length: 44
Connection: close
Content-Type: text/html
X-Pad: avoid browser bug
 
<html><body><h1>It works!</h1></body></html>
 
Connection to host lost.

在此示例中,客户端发出GET请求以请求名为“/index.html”的文档;并协商使用HTTP / 1.0协议。请求标头后需要一个空行。此请求消息不包含正文。

服务器接收请求消息,将request-URI解释并映射到其文档目录下的文档。如果请求的文档可用,则服务器返回带有响应状态代码“200 OK”的文档。响应标头提供所返回文档的必要描述,例如上次修改日期(Last-Modified),MIME类型(Content-Type)和文档长度(Content-Length)。响应正文包含所请求的文档。浏览器将根据其媒体类型(例如,纯文本,HTML,JPEG,GIF等)以及从响应头获得的其他信息来格式化和显示文档。

Notes:

  • 请求方法名称“GET”区分大小写,并且必须为大写。
  • 如果请求方法名称拼写错误,服务器将返回错误消息“501 Method Not Implemented”。
  • 如果不允许请求方法名称,服务器将返回错误消息“405 Method Not Allowed”。例如,DELETE是有效的方法名称,但服务器可能不允许(或实现)。
  • 如果request-URI不存在,服务器将返回错误消息“404 Not Found”。您必须从文档根“/”开始发出正确的请求URI。否则,服务器将返回错误消息“400 Bad Request”。
  • 如果HTTP版本丢失或不正确,服务器将返回错误消息“400 Bad Request”。
  • 在HTTP / 1.0中,默认情况下,服务器在传递响应后关闭TCP连接。如果使用telnet连接到服务器,则会在收到响应正文后立即显示“连接到主机丢失”消息。您可以使用可选的请求标头“Connection:Keep-Alive”来请求持久(或保持活动)连接,以便可以通过相同的TCP连接发送另一个请求,以实现更好的网络效率。另一方面,HTTP / 1.1默认使用keep-alive连接。

响应状态代码

响应消息的第一行(即状态行)包含响应状态代码,该响应状态代码由服务器生成以指示请求的结果。

状态代码是一个3位数字:

  • 1xx(信息):收到请求,服务器正在继续该过程。
  • 2xx(成功):请求已成功接收,理解,接受和服务。
  • 3xx(重定向):必须采取进一步措施才能完成请求。
  • 4xx(客户端错误):请求包含错误的语法或无法理解。
  • 5xx(服务器错误):服务器无法满足明显有效的请求。

一些常见的状态代码是:

  • 100继续:服务器收到请求并正在给出响应。
  • 200 OK:请求成功。
  • 301永久移动:请求的资源已永久移动到新位置。新位置的URL在名为Location的响应头中给出。客户端应向新位置发出新请求。应用程序应更新对此新位置的所有引用。
  • 302 Found&Redirect(或暂时移动):与301相同,但新位置暂时属于性质。客户端应发出新请求,但应用程序无需更新引用。
  • 304 Not Modified:响应If-Modified-Since条件GET请求,服务器通知所请求的资源尚未被修改
  • 400错误请求:服务器无法解释或理解请求,可能是请求消息中的语法错误。
  • 401需要身份验证:请求的资源受到保护,并且需要客户端的凭据(用户名/密码)。客户端应使用其凭据(用户名/密码)重新提交请求。
  • 403 Forbidden:无论客户端的身份如何,服务器都拒绝提供资源。
  • 404 Not Found:在服务器中找不到请求的资源。
  • 405不允许的方法:使用的请求方法,例如POST,PUT,DELETE,是一种有效的方法。但是,服务器不允许该方法用于请求的资源。
  • 408请求超时:
  • 414请求URI太大:
  • 500内部服务器错误:服务器混淆,通常是由响应请求的服务器端程序中的错误引起的。
  • 502 Bad Gateway:代理或网关表示它从上游服务器收到错误响应。
  • 503服务不可用:服务器因超载或维护而无法响应。客户可以稍后再试。
  • 504网关超时:代理或网关表示它从上游服务器收到超时。

HTTP / 1.0 GET请求示例

示例:拼错请求方法

在请求中,“GET”拼错为“get”。服务器返回错误“501 Method Not Implemented”。响应标头“允许”告诉客户端允许的方法。

get /test.html HTTP/1.0
(enter twice to create a blank line)
HTTP/1.1 501 Method Not Implemented
Date: Sun, 18 Oct 2009 10:32:05 GMT
Server: Apache/2.2.14 (Win32)
Allow: GET,HEAD,POST,OPTIONS,TRACE
Content-Length: 215
Connection: close
Content-Type: text/html; charset=iso-8859-1
 
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>501 Method Not Implemented</title>
</head><body>
<h1>Method Not Implemented</h1>
<p>get to /index.html not supported.<br />
</p>
</body></html>

示例:找不到文件404

在此GET请求中,无法在服务器的文档目录下找到request-URL“/t.html”。服务器返回错误“404 Not Found”。

GET /t.html HTTP/1.0
(enter twice to create a blank line)
HTTP/1.1 404 Not Found
Date: Sun, 18 Oct 2009 10:36:20 GMT
Server: Apache/2.2.14 (Win32)
Content-Length: 204
Connection: close
Content-Type: text/html; charset=iso-8859-1
 
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p>The requested URL /t.html was not found on this server.</p>
</body></html>

示例:错误的HTTP版本号

在此GET请求中,HTTP版本拼写错误,导致语法错误。服务器返回错误“400 Bad Request”。HTTP版本应该是HTTP / 1.0或HTTP / 1.1。

GET /index.html HTTTTTP/1.0
(enter twice to create a blank line)
HTTP/1.1 400 Bad Request
Date: Sun, 08 Feb 2004 01:29:40 GMT
Server: Apache/1.3.29 (Win32)
Connection: close
Content-Type: text/html; charset=iso-8859-1
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<HTML><HEAD>
<TITLE>400 Bad Request</TITLE>
</HEAD><BODY>
<H1>Bad Request</H1>
Your browser sent a request that this server could not understand.<P>
The request line contained invalid characters following the protocol string.<P><P>
</BODY></HTML>

示例:错误的Request-URI

在以下GET请求中,request-URI不是从根“/”开始,导致“错误请求”。

GET test.html HTTP/1.0
(blank line)
HTTP/1.1 400 Bad Request
Date: Sun, 18 Oct 2009 10:42:27 GMT
Server: Apache/2.2.14 (Win32)
Content-Length: 226
Connection: close
Content-Type: text/html; charset=iso-8859-1
 
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>400 Bad Request</title>
</head><body>
<h1>Bad Request</h1>
<p>Your browser sent a request that this server could not understand.<br />
</p>
</body></html>

示例:Keep-Alive Connection

由于错误,对于HTTP / 1.0 GET请求,服务器在传递响应后关闭TCP连接。您可以通过可选的请求标头“Connection:Keep-Alive”请求维护TCP连接(以便使用相同的TCP连接发送另一个请求,以提高网络效率)。服务器包括一个“Connection:Keep-Alive”响应头,通知客户端他可以在保持活动超时之前使用此连接发送另一个请求。另一个响应标头“Keep-Alive:timeout = x,max = x”告诉客户端超时(以秒为单位)以及可通过此持久连接发送的最大请求数。

GET /test.html HTTP/1.0
Connection: Keep-Alive
(blank line)
HTTP/1.1 200 OK
Date: Sun, 18 Oct 2009 10:47:06 GMT
Server: Apache/2.2.14 (Win32)
Last-Modified: Sat, 20 Nov 2004 07:16:26 GMT
ETag: "10000000565a5-2c-3e94b66c2e680"
Accept-Ranges: bytes
Content-Length: 44
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html
 
<html><body><h1>It works!</h1></body></html>

Notes:

  • keep-alive”超时后出现消息“连接到主机丢失”(对于telnet)。
  • 在出现“连接主机丢失”消息(即保持活动超时)之前,您可以通过相同的TCP连接发送另一个请求。
  • “Connection:Keep-alive”不区分大小写。空间是可选的。如果可选标头拼写错误或无效,则服务器将忽略它。
  • 如果可选标头拼写错误或无效,则服务器将忽略它。

示例:访问受保护的资源

以下GET请求尝试访问受保护的资源。服务器返回错误“403 Forbidden”。

GET /forbidden/index.html HTTP/1.0
(blank line)
HTTP/1.1 403 Forbidden
Date: Sun, 18 Oct 2009 11:58:41 GMT
Server: Apache/2.2.14 (Win32)
Content-Length: 222
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html; charset=iso-8859-1
 
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>403 Forbidden</title>
</head><body>
<h1>Forbidden</h1>
<p>You don't have permission to access /forbidden/index.html
on this server.</p>
</body></html>

第二篇完 喜欢同学可以关注我。

本文版权归是三僡然所有,转载请标明出处。欢迎转载,欢迎评论,欢迎分享。如果你有文章想分享可以联系我。

相关推荐

服务器数据恢复—Raid5数据灾难不用愁,Raid5数据恢复原理了解下

Raid5数据恢复算法原理:分布式奇偶校验的独立磁盘结构(被称之为raid5)的数据恢复有一个“奇偶校验”的概念。可以简单的理解为二进制运算中的“异或运算”,通常使用的标识是xor。运算规则:若二者值...

服务器数据恢复—多次异常断电导致服务器raid不可用的数据恢复

服务器数据恢复环境&故障:由于机房多次断电导致一台服务器中raid阵列信息丢失。该阵列中存放的是文档,上层安装的是Windowsserver操作系统,没有配置ups。因为服务器异常断电重启后,rai...

服务器数据恢复-V7000存储更换磁盘数据同步失败的数据恢复案例

服务器数据恢复环境:P740+AIX+Sybase+V7000存储,存储阵列柜上共12块SAS机械硬盘(其中一块为热备盘)。服务器故障:存储阵列柜中有磁盘出现故障,工作人员发现后更换磁盘,新更换的磁盘...

「服务器数据恢复」重装系统导致XFS文件系统分区丢失的数据恢复

服务器数据恢复环境:DellPowerVault系列磁盘柜;用RAID卡创建的一组RAID5;分配一个LUN。服务器故障:在Linux系统层面对LUN进行分区,划分sdc1和sdc2两个分区。将sd...

服务器数据恢复-ESXi虚拟机被误删的数据恢复案例

服务器数据恢复环境:一台服务器安装的ESXi虚拟化系统,该虚拟化系统连接了多个LUN,其中一个LUN上运行了数台虚拟机,虚拟机安装WindowsServer操作系统。服务器故障&分析:管理员因误操作...

「服务器数据恢复」Raid5阵列两块硬盘亮黄灯掉线的数据恢复案例

服务器数据恢复环境:HPStorageWorks某型号存储;虚拟化平台为vmwareexsi;10块磁盘组成raid5(有1块热备盘)。服务器故障:raid5阵列中两块硬盘指示灯变黄掉线,无法读取...

服务器数据恢复—基于oracle数据库的SAP数据恢复案例

服务器存储数据恢复环境:某品牌服务器存储中有一组由6块SAS硬盘组建的RAID5阵列,其中有1块硬盘作为热备盘使用。上层划分若干lun,存放Oracle数据库数据。服务器存储故障&分析:该RAID5阵...

「服务器虚拟化数据恢复」Xen Server环境下数据库数据恢复案例

服务器虚拟化数据恢复环境:Dell某型号服务器;数块STAT硬盘通过raid卡组建的RAID10;XenServer服务器虚拟化系统;故障虚拟机操作系统:WindowsServer,部署Web服务...

服务器数据恢复—RAID故障导致oracle无法启动的数据恢复案例

服务器数据恢复环境:某品牌服务器中有一组由4块SAS磁盘做的RAID5磁盘阵列。该服务器操作系统为windowsserver,运行了一个单节点Oracle,数据存储为文件系统,无归档。该oracle...

服务器数据恢复—服务器磁盘阵列常见故障表现&amp;解决方案

RAID(磁盘阵列)是一种将多块物理硬盘整合成一个虚拟存储的技术,raid模块相当于一个存储管理的中间层,上层接收并执行操作系统及文件系统的数据读写指令,下层管理数据在各个物理硬盘上的存储及读写。相对...

「服务器数据恢复」IBM某型号服务器RAID5磁盘阵列数据恢复案例

服务器数据恢复环境:IBM某型号服务器;5块SAS硬盘组成RAID5磁盘阵列;存储划分为1个LUN和3个分区:第一个分区存放windowsserver系统,第二个分区存放SQLServer数据库,...

服务器数据恢复—Zfs文件系统下误删除文件如何恢复数据?

服务器故障:一台zfs文件系统服务器,管理员误操作删除服务器上的数据。服务器数据恢复过程:1、将故障服务器所有磁盘编号后取出,硬件工程师检测所有硬盘后没有发现有磁盘存在硬件故障。以只读方式将全部磁盘做...

服务器数据恢复—Linux+raid5服务器数据恢复案例

服务器数据恢复环境:某品牌linux操作系统服务器,服务器中有4块SAS接口硬盘组建一组raid5阵列。服务器中存放的数据有数据库、办公文档、代码文件等。服务器故障&检测:服务器在运行过程中突然瘫痪,...

服务器数据恢复—Sql Server数据库数据恢复案例

服务器数据恢复环境:一台安装windowsserver操作系统的服务器。一组由8块硬盘组建的RAID5,划分LUN供这台服务器使用。在windows服务器内装有SqlServer数据库。存储空间LU...

服务器数据恢复—阿里云ECS网站服务器数据恢复案例

云服务器数据恢复环境:阿里云ECS网站服务器,linux操作系统+mysql数据库。云服务器故障:在执行数据库版本更新测试时,在生产库误执行了本来应该在测试库执行的sql脚本,导致生产库部分表被tru...

取消回复欢迎 发表评论: