HTTP的请求与响应
HTTP通信由两部分组成: 客户端请求消息 与 服务器响应消息
(一)浏览器发送HTTP请求的过程:
当用户在浏览器的地址栏中输入一个URL并按回车键之后,浏览器会向HTTP服务器发送HTTP请求。HTTP请求主要分为“Get”和“Post”两种方法。
当我们在浏览器输入URL http://www.baidu.com 的时候,浏览器发送一个Request请求去获取 http://www.baidu.com 的html文件,服务器把Response文件对象发送回给浏览器。
浏览器分析Response中的 HTML,发现其中引用了很多其他文件,比如Images文件,CSS文件,JS文件。 浏览器会自动再次发送Request去获取图片,CSS文件,或者JS文件。
当所有的文件都下载成功后,网页会根据HTML语法结构,完整的显示出来了。
【URL(Uniform / Universal Resource Locator的缩写)】:
统一资源定位符,是用于完整地描述Internet上网页和其他资源的地址的一种标识方法。
【基本格式:】scheme://host[:port#]/path/…/[?query-string][#anchor]
协议://IP[:端口#]/路径/.../[?参数][#锚]
【解析:】
(1)scheme:协议(例如:http, https, ftp)
(2)host:服务器的IP地址或者域名
(3)port#:服务器的端口(如果是走协议默认端口,缺省端口80)
(4)path:访问资源的路径
(5)query-string:参数,发送给http服务器的数据
(6)anchor:锚(跳转到网页的指定锚点位置)
例如:
http://www.baidu.com http://192.168.0.116:8080/index.jsp http://item.jd.com/11936238.html#product-detail
(二)客户端HTTP请求:
URL只是标识资源的位置,而HTTP是用来提交和获取资源。
客户端发送一个HTTP请求到服务器的请求消息,包括以下格式:请求行、请求头部、空行、请求数据四个部分组成
HTTP请求主要分为Get和Post两种方法:
GET是从服务器上获取数据,POST是向服务器传送数据
GET请求参数显示,都显示在浏览器网址上,HTTP服务器根据该请求所包含URL中的参数来产生响应内容,即“Get”请求的参数是URL的一部分。 例如: http://www.baidu.com/s?wd=Chinese
POST请求参数在请求体当中,消息长度没有限制而且以隐式的方式进行发送,通常用来向HTTP服务器提交量比较大的数据(比如请求中包含许多参数或者文件上传操作等),请求的参数包含在“Content-Type”消息头里,指明该消息体的媒体类型和编码,
注意:避免使用Get方式提交表单,因为有可能会导致安全问题。 比如说在登陆表单中用Get方式,用户输入的用户名和密码将在地址栏中暴露无遗。
常用的请求报头:这个我在后面文章里再做介绍
当浏览器向Web服务器发出请求时,它向服务器传递了一个数据块,也就是请求信息
HTTP请求信息由3部分组成:
①请求方法URI协议/版本 ;②请求头(Request Header) ;③请求正文
下面是一个HTTP请求的例子:
GET/sample.jspHTTP/1.1 Accept:image/gif.image/jpeg,*/* Accept-Language:zh-cn Connection:Keep-Alive Host:localhost User-Agent:Mozila/4.0(compatible;MSIE5.01;Window NT5.0) Accept-Encoding:gzip,deflate username=jinqiao&password=1234
(1) 请求方法URI协议/版本
请求的第一行是“方法URL议/版本”:GET/sample.jsp HTTP/1.1
以上代码中“GET”代表请求方法,“/sample.jsp”表示URI,“HTTP/1.1代表协议和协议的版本。
根据HTTP标准,HTTP请求可以使用多种请求方法。例如:HTTP1.1支持7种请求方法:GET、POST、HEAD、OPTIONS、PUT、DELETE和TARCE。在Internet应用中,最常用的方法是GET和POST。
URL完整地指定了要访问的网络资源,通常只要给出相对于服务器的根目录的相对目录即可,因此总是以“/”开头,最后,协议版本声明了通信过程中使用HTTP的版本。
(2) 请求头(Request Header)
请求头包含许多有关的客户端环境和请求正文的有用信息。例如,请求头可以声明浏览器所用的语言,请求正文的长
Accept:image/gif.image/jpeg.*/* Accept-Language:zh-cn Connection:Keep-Alive Host:localhost User-Agent:Mozila/4.0(compatible:MSIE5.01:Windows NT5.0) Accept-Encoding:gzip,deflate.
(3)请求正文
请求头和请求正文之间是一个空行,这个行非常重要,它表示请求头已经结束,接下来的是请求正文。请求正文中可以包含客户提交的查询字符串信息:
username=jinqiao&password=1234
在以上的例子的HTTP请求中,请求的正文只有一行内容。当然,在实际应用中,HTTP请求正文可以包含更多的内容。
HTTP应答与HTTP请求相似,HTTP响应也由3个部分构成,分别是:
①协议状态版本代码描述;②响应头(Response Header);③响应正文
下面是一个HTTP响应的例子:
HTTP/1.1 200 OK Server:Apache Tomcat/5.0.12 Date:Mon,6Oct2003 13:23:42 GMT Content-Length:112 <html> <head> <title>HTTP响应示例<title> </head> <body> Hello HTTP! </body> </html>
协议状态代码描述HTTP响应的第一行类似于HTTP请求的第一行,它表示通信所用的协议是HTTP1.1服务器已经成功的处理了客户端发出的请求(200表示成功):
HTTP/1.1 200 OK
响应头(Response Header)响应头也和请求头一样包含许多有用的信息,例如服务器类型、日期时间、内容类型和长度等:
Server:Apache Tomcat/5.0.12 Date:Mon,6Oct2003 13:13:33 GMT Content-Type:text/html Last-Moified:Mon,6 Oct 2003 13:23:42 GMT Content-Length:112
响应正文响应正文就是服务器返回的HTML页面:
<html> <head> <title>HTTP响应示例<title> </head> <body> Hello HTTP! </body> </html>
响应头和正文之间也必须用空行分隔。
常见方法支持的HTTP协议版本
【HTTP状态码】
HTTP状态码(HTTP Status Code)是用以表示网页服务器HTTP响应状态的3位数字代码
当浏览器从 web 服务器请求服务时,可能会发生错误
从而有可能会返回下面的一系列状态消息:
(1)1xx: 信息
(2)2xx: 成功
(3)3xx:重定向
(4)4xx:客户端错误(也称请求错误)
(5)5xx:服务器错误
1xx:
代表请求已被接受,需要继续处理。这类响应是临时响应,只包含状态行和某些可选的响应头信息,并以空行结束。由于 HTTP/1.0 协议中没有定义任何 1xx 状态码,所以除非在某些试验条件下,服务器禁止向此类客户端发送 1xx 响应。
2xx:
代表请求已成功被服务器接收、理解、并接受
3xx:
代表需要客户端采取进一步的操作才能完成请求。通常,这些状态码用来重定向,后续的请求地址(重定向目标)在本次响应的 Location 域中指明。
当且仅当后续的请求所使用的方法是 GET 或者 HEAD 时,用户浏览器才可以在没有用户介入的情况下自动提交所需要的后续请求。客户端应当自动监测无限循环重定向(例如:A->A,或者A->B->C->A),因为这会导致服务器和客户端大量不必要的资源消耗。按照 HTTP/1.0 版规范的建议,浏览器不应自动访问超过5次的重定向。
4xx:
代表了客户端看起来可能发生了错误,妨碍了服务器的处理。除非响应的是一个 HEAD 请求,否则服务器就应该返回一个解释当前错误状况的实体,以及这是临时的还是永久性的状况。这些状态码适用于任何请求方法。浏览器应当向用户显示任何包含在此类错误响应中的实体内容。
如果错误发生时客户端正在传送数据,那么使用TCP的服务器实现应当仔细确保在关闭客户端与服务器之间的连接之前,客户端已经收到了包含错误信息的数据包。如果客户端在收到错误信息后继续向服务器发送数据,服务器的TCP栈将向客户端发送一个重置数据包,以清除该客户端所有还未识别的输入缓冲,以免这些数据被服务器上的应用程序读取并干扰后者。
5xx:
代表了服务器在处理请求的过程中有错误或者异常状态发生,也有可能是服务器意识到以当前的软硬件资源无法完成对请求的处理。除非这是一个HEAD 请求,否则服务器应当包含一个解释当前错误状态以及这个状况是临时的还是永久的解释信息实体。浏览器应当向用户展示任何在当前响应中被包含的实体。
这些状态码适用于任何响应方法。
【简单版】
100 Continue 继续,一般在发送post请求时,已发送了http header之后服务端将返回此信息,表示确认,之后发送具体参数信息
200 OK 正常返回信息
201 Created 请求成功并且服务器创建了新的资源
202 Accepted 服务器已接受请求,但尚未处理
301 Moved Permanently 请求的网页已永久移动到新位置。
302 Found 临时性重定向。
303 See Other 临时性重定向,且总是使用 GET 请求新的 URI。
304 Not Modified 自从上次请求后,请求的网页未修改过。
400 Bad Request 服务器无法理解请求的格式,客户端不应当尝试再次使用相同的内容发起请求。
401 Unauthorized 请求未授权。
403 Forbidden 禁止访问。
404 Not Found 找不到如何与 URI 相匹配的资源。
500 Internal Server Error 最常见的服务器端错误。
503 Service Unavailable 服务器端暂时无法处理请求(可能是过载或维护)。
.
相关推荐
HTTP请求返回状态码全面解析
在Java编程中,发送HTTP请求并获取状态码是常见的网络通信任务。HTTP状态码是服务器对客户端请求的响应,它提供了关于请求是否成功、需要进一步操作还是存在错误等信息。以下是一个简单的Java实例,展示了如何实现这...
HTTP状态码是HTTP协议中非常重要的组成部分之一,它们用于指示客户端发送给服务器的HTTP请求的结果。下面将详细解析HTTP状态码的各个类别及其具体含义。 #### 1xx (临时响应) 这类状态码表示临时响应,请求者需要...
针对HTTP状态码:1xx,2xx,3xx,4xx,5xx的几十个状态码做了详细分析, 以及出现状态码代表了什么意思,个别的详细解释了出现的原因。供大家针对出现的问题思考解决方案;例如:300错误为:针对收到请求,服务器可执行...
本文将从HTTP请求头、响应头以及状态码三个方面深入探讨这些概念及其重要性。 #### 一、HTTP 请求头 HTTP请求头包含了客户端(通常是浏览器)发送给服务器的一系列关键信息。下面详细介绍一些常见的请求头: 1. *...
HTTP状态码是HTTP协议中服务器向客户端返回的一种状态反馈,用于表示请求处理的结果。这些状态码分为五大类,每类都对应着特定的含义和应用场景。 100-199的范围是临时响应,主要用于通知客户端一些中间状态。例如...
HTTP状态码是一种用于指示HTTP请求结果的三位数字编码。这些状态码分为五大类:1xx(信息性状态码)、2xx(成功状态码)、3xx(重定向状态码)、4xx(客户端错误状态码)以及5xx(服务器错误状态码)。 #### 三、...
HTTP 请求方法与返回状态码 HTTP 是一个基于请求-响应模式的协议,客户端向服务器发送请求,服务器响应客户端的请求。HTTP 请求方法和返回状态码是 HTTP 协议的核心组成部分。 一、HTTP 请求方法 HTTP 请求方法是...
#### HTTP请求的状态表:Web开发人员必备 HTTP(HyperText Transfer Protocol)协议作为互联网上应用最为广泛的一种网络协议,它规定了客户端与服务器端交互时的基本规则。在HTTP通信过程中,服务器端会返回一个...
在C#编程中,我们需要经常处理HTTP请求,获取目标网址的HTTP头信息,例如状态码、响应时间、服务器类型等,这些信息对于分析网页状态、诊断网络问题以及构建Web应用程序非常有用。本文将深入探讨如何在C#中获取这些...
HTTP 状态码是 HTTP 协议中的一个重要组成部分,它是服务器对客户端请求的响应信息,用于表示服务器对请求的处理结果。状态码由三个十进制数字组成,第一个数字定义了状态码的类型,后两个数字没有分类的作用。 ...
HTTP请求状态码 HTTP请求状态代码表 请求状态代码表 HTTP请求响应代码表
### HTTP状态码大全详解 ...通过以上详细介绍,我们可以看出HTTP状态码对于理解和诊断网络请求问题至关重要。每一种状态码都有其特定的意义和用途,掌握它们有助于开发者更高效地调试和优化Web应用。
例如,客户端可以通过发送一个HTTP请求检查某个资源是否存在,而不需要实际获取该资源的内容。使用场景包括但不限于: - 检查资源的存在性或状态。 - 测试资源是否已被更新。 2. **206 Partial Content**:当...
"易语言取HTTP状态码源码"这个压缩包文件很可能是提供了使用易语言编写的一个程序或库,用于获取HTTP请求的响应状态码。易语言是一种中文编程语言,设计目标是使编程变得简单,适合初学者和专业人士。通过易语言,...
HTTP状态码对于开发者来说至关重要,它们提供了关于请求是否成功以及为何失败的信息。通过状态码,开发者可以快速定位问题所在,如网络连接问题、请求格式错误、服务器内部错误等。在调试和优化Web应用程序时,理解...
在易语言中,获取HTTP状态码通常涉及到网络模块的使用,可能需要使用到如“创建HTTP连接”,“发送HTTP请求”,“接收HTTP响应数据”等命令。程序会通过发送HTTP请求到指定URL,然后解析服务器返回的响应数据,从中...
HTTP状态码是HTTP响应中的一个重要组成部分,它向客户端传达了服务器处理请求的结果。理解HTTP状态码对于网络开发、故障排查以及优化网站性能至关重要。 HTTP状态码由三位数字组成,分为五个类别: 1. 1XX(临时...
在HTTP通信过程中,服务器通过HTTP响应状态码告知客户端请求的结果。根据HTTP规范,响应状态码分为五类,每类的第一个数字代表了其基本类别。 #### 1xx: 信息性状态码 这类状态码表示接收到请求并且正在处理。此类...
这些函数或组件可以发送HTTP请求,并解析返回的HTTP响应报文,从中提取出状态码。具体实现过程可能包括以下步骤: 1. **建立连接**:首先,需要使用易语言的网络连接命令,如`创建TCP客户端`,与指定的HTTP服务器...