HTTP基础第二篇(红星照耀中国第二篇概括贺龙的相关事件)
nanshan 2024-10-21 06:03 24 浏览 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>
第二篇完 喜欢同学可以关注我。
本文版权归是三僡然所有,转载请标明出处。欢迎转载,欢迎评论,欢迎分享。如果你有文章想分享可以联系我。
相关推荐
- 删库之后不要着急跑路,教你神不知鬼不觉找回数据
-
在工作中,我们误删数据或者数据库,我们一定需要跑路吗?我看未必,程序员一定要学会自救,神不知鬼不觉的将数据找回。在mysql数据库中,我们知道binlog日志记录了我们对数据库的所有操作,所以...
- 数据库告警不可用,增删改受阻(数据库限制删除)
-
前言:昨晚,突然出现服务不可用告警,查看日志上线报文入库到数据库很慢并受阻,出现数据不同步问题。排查问题查看发现服务都是在执行update、insert这些DML命令的时候,报的数据库执行超时。经过一...
- Binlog实现MySQL复制,5个关键步骤,务必掌握!
-
复制是MySQL最重要的功能之一,MySQL集群的高可用、负载均衡和读写分离都是基于复制来实现的。Binlog就是实现主从复制的关键,主数据库将修改操作记录到Binlog中,从数据库通过解...
- MySQL数据实时增量同步到Elasticsearch
-
Mysql到Elasticsearch的数据同步,一般用ETL来实现,但性能并不理想,目前大部分的ETL是定时查询Mysql数据库有没有新增数据或者修改数据,如果数据量小影响不大,但如果几百万上千万的...
- MySQL 数据库恢复:如何执行时间点恢复(PITR)以挽救受损数据?
-
天津鸿萌科贸发展有限公司从事数据安全服务二十余年,致力于为各领域客户提供专业的数据恢复、数据备份、数据取证、数据迁移、网络安全、数据清除等解决方案,并针对企业面临的数据安全风险,提供专业的相关数据安全...
- 阿里面试:MySQL Binlog有哪些格式?底层原理?优缺点?
-
binlog的格式也有三种:STATEMENT、ROW、MIXED,下面我详解binlog三种模式@mikechenStatement模式Statement模式:是基于SQL语句的复制(statem...
- 快速带你读懂MySQL的binlog写入机制
-
深入讲解MySQL中的重要日志binlog的写入机制以及影响IO性能的关键配置,并且介绍了如何利用binlog去恢复数据,保证MySQL的可靠性。Q:binlog写入时机binlog的写入逻辑并...
- MySQL 误删除数据恢复全攻略:基于 Binlog 的实战指南
-
在MySQL的世界里,二进制日志(Binlog)就是我们的"时光机"。它默默记录着数据库的每一个重要变更,就像一位忠实的史官,为我们在数据灾难中提供最后的救命稻草。本文将带您深入掌握如...
- 一文了解MySQL Binlog(一文了解肝脏有益和有害的食物)
-
MySQL的Binlog日志是一种二进制格式的日志,Binlog记录所有的DDL和DML语句(除了数据查询语句SELECT、SHOW等),以Event的形式记录,同时记录语句执行时...
- 数据丢失?别慌!MySQL备份恢复攻略
-
想象一下,某个晴朗的午后,你正享受着咖啡,突然接到紧急电话:你的网站或APP彻底挂了!系统崩溃,界面全白。虽然心头一紧,但你或许还能安慰自己:系统崩溃只是暂停服务,数据还在,修复修复就好了。然而,如果...
- Mysql中的bin log、redo log、undo log的区别
-
最近在整理面试题,在看mvcc的时候看到了undolog,今天索性把这三个log都记录一遍。MySQL的逻辑架构说之前先说一下MySQL的基本架构,MySQL主要分为两层:Server层和存储引...
- binlog日志定时清理(binlog清理规则)
-
binlog日志binlog是MySQL数据库的一种日志文件,用于记录所有对数据的修改操作。binlog全称为binarylog,它以二进制格式记录MySQL服务器上所有的修改操作,包括对哪个数据库...
- 茶水间炸锅了!菜鸟误删用户表,运维老张的MySQL救命三招!
-
(公司茶水间,运维老张、开发小王和新人小李围着咖啡机)小李:(紧张兮兮)张哥!我...我好像把测试库的用户表删了!下午演示咋办啊?老张:(淡定喝咖啡)慌啥?昨晚的备份是吃干饭的?走,教你恢复!一、基础...
- 解决运维痛点,提高运维安全性-雷池 SafeLine WAF新功能身份认证
-
雷池介绍使用雷池SafeLineWAF已经两年多了,在1.5.x版本时就已经开始测试使用,并在推出LTS版本后转入LTS分支。近期雷池SafeLineWAF重点更新了身份认证功能,并提供了SS...
- 【Docker 新手入门指南】第十五章:常见故障排除
-
一、前期准备:收集关键信息在排查问题前,建议先获取以下系统数据,便于精准定位故障:1.系统基础信息#查看Docker版本(确认是否为最新稳定版)dockerversion#查看...
你 发表评论:
欢迎- 一周热门
-
-
极空间如何无损移机,新Z4 Pro又有哪些升级?极空间Z4 Pro深度体验
-
UOS服务器操作系统防火墙设置(uos20关闭防火墙)
-
如何修复用户配置文件服务在 WINDOWS 上登录失败的问题
-
手机如何设置与显示准确时间的详细指南
-
如何在安装前及安装后修改黑群晖的Mac地址和Sn系列号
-
日本海上自卫队的军衔制度(日本海上自卫队的军衔制度是什么)
-
爱折腾的特斯拉车主必看!手把手教你TESLAMATE的备份和恢复
-
10个免费文件中转服务站,分享文件简单方便,你知道几个?
-
NAS:DS video/DS file/DS photo等群晖移动端APP远程访问的教程
-
FANUC 0i-TF数据备份方法(fanuc系统备份教程)
-
- 最近发表
- 标签列表
-
- linux 查询端口号 (58)
- docker映射容器目录到宿主机 (66)
- 杀端口 (60)
- yum更换阿里源 (62)
- internet explorer 增强的安全配置已启用 (65)
- linux自动挂载 (56)
- 禁用selinux (55)
- sysv-rc-conf (69)
- ubuntu防火墙状态查看 (64)
- windows server 2022激活密钥 (56)
- 无法与服务器建立安全连接是什么意思 (74)
- 443/80端口被占用怎么解决 (56)
- ping无法访问目标主机怎么解决 (58)
- fdatasync (59)
- 405 not allowed (56)
- 免备案虚拟主机zxhost (55)
- linux根据pid查看进程 (60)
- dhcp工具 (62)
- mysql 1045 (57)
- 宝塔远程工具 (56)
- ssh服务器拒绝了密码 请再试一次 (56)
- ubuntu卸载docker (56)
- linux查看nginx状态 (63)
- tomcat 乱码 (76)
- 2008r2激活序列号 (65)