什么是 Request,Response
浏览器发送消息给网址所在的服务器,这个过程就叫做 HTTP Request
服务器收到浏览器发送的消息后,能够根据浏览器发送消息的内容,做相应的处理,然后把消息回传给浏览器,这个过程就是 HTTP Response
浏览器收到服务器的 Response 信息后,会对信息进行相应的处理,然后展示
Request 中包含什么?
-
请求 URL
URL,即统一资源定位符,也就是我们说的网址,统一资源定位符是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。互联网上的每个文件都有一个唯一的 URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它。
URL的格式由三个部分组成:
- 第一部分是协议(或称为服务方式)。
- 第二部分是存有该资源的主机 IP 地址(有时也包括端口号)。
- 第三部分是主机资源的具体地址,如目录和文件名等。
-
请求体
请求是携带的数据,如提交表单数据时候的表单数据(POST)
Response 中包含了什么
所有 HTTP 响应的第一行都是状态行,依次是当前 HTTP 版本号,3位数字组成的状态代码,以及描述状态的短语,彼此由空格分隔。
URL
web 开发中通过英文问号(?)方式在浏览器地址栏中传值时。浏览器是通过 &
来区分问号后的参数个数的。 如果出现传值参数中带有 &
时,在接受页面就会出现错误,类似如下请求路径:/next.jsp?param1=hendhs89&furej & param2=sss
参数 param1
中含有转义字符 &
,这样会导致被请求页的参数接收错误。
在传值前通过编码处理,可将转义字符转为 16 进制;
特殊字符 | URL 中用途 | 转义方式 |
---|---|---|
+ | 表示空格 | %2B |
(空格) | 应换用加号 + 或 %20 表示 |
%20 |
/ | 分隔目录和子目录 | %2F |
? | 分隔实际的 URL 和参数 | %3F |
% | 指定特殊字符 | %25 |
# | 表示书签 | %23 |
& | URL 中指定的参数间的分隔 | %26 |
= | URL 中指定参数的值 | %3D |
! | URL 中指定参数的值 | %21 |
所有 HTTP 响应的第一行都是状态行,依次是当前 HTTP 版本号,3位数字组成的状态代码,以及描述状态的短语,彼此由空格分隔。
有多种响应状态
状态码 | 含义 | 说明 |
---|---|---|
1xx | 临时响应 | 表示临时响应并需要请求者继续执行操作的状态代码. |
100 | 继续 | 请求者应当继续提出请求. 服务器返回此代码表示已收到请求的第一部分,正在等待其余部分. |
101 | 切换协议 | 请求者已要求服务器切换协议,服务器已确认并准备切换. |
2xx | 成功 | 表示成功处理了请求的状态代码. |
200 | 成功 | 服务器已成功处理了请求. 通常,这表示服务器提供了请求的网页. |
201 | 已创建 | 请求成功并且服务器创建了新的资源. |
202 | 已接受 | 服务器已接受请求,但尚未处理. |
203 | 非授权信息 | 服务器已成功处理了请求,但返回的信息可能来自另一来源. |
204 | 无内容 | 服务器成功处理了请求,但没有返回任何内容. |
205 | 重置内容 | 服务器成功处理了请求,但没有返回任何内容. |
206 | 部分内容 | 服务器成功处理了部分 GET 请求. |
3xx | 重定向 | 表示要完成请求,需要进一步操作. 通常,这些状态代码用来重定向. |
300 | 多种选择 | 针对请求,服务器可执行多种操作. 服务器可根据请求者(user agent)选择一项操作,或提供操作列表供请求者选择. |
301 | 永久移动 | 请求的网页已永久移动到新位置. 服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置. |
302 | 临时移动 | 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求. |
303 | 查看其他位置 | 请求者应当对不同的位置使用单独的 GET 请求来检索响应时,服务器返回此代码. |
304 | 未修改 | 自从上次请求后,请求的网页未修改过. 服务器返回此响应时,不会返回网页内容. |
305 | 使用代理 | 请求者只能使用代理访问请求的网页. 如果服务器返回此响应,还表示请求者应使用代理. |
307 | 临时重定向 | 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求. |
4xx | 请求错误 | 这些状态代码表示请求可能出错,妨碍了服务器的处理. |
400 | 错误请求 | 服务器不理解请求的语法. |
401 | 未授权 | 请求要求身份验证. 对于需要登录的网页,服务器可能返回此响应. |
402 | 未支付 | 402状态码被创建最初目的是用于数字现金或微型支付系统, 表明客户端请求的内容只有付费之后才能获取. |
403 | 禁止 | 服务器拒绝请求. |
404 | 未找到 | 服务器找不到请求的网页. |
405 | 方法禁用 | 禁用请求中指定的方法. |
406 | 不接受 | 无法使用请求的内容特性响应请求的网页. |
407 | 需要代理授权 | 此状态代码与 401 类似,但指定请求者应当授权使用代理. |
408 | 请求超时 | 服务器等候请求时发生超时. |
409 | 冲突 | 服务器在完成请求时发生冲突. 服务器必须在响应中包含有关冲突的信息. |
410 | 已删除 | 如果请求的资源已永久删除,服务器就会返回此响应. |
411 | 需要有效长度 | 服务器不接受不含有效内容长度标头字段的请求. |
412 | 未满足前提条件 | 服务器未满足请求者在请求中设置的其中一个前提条件. |
413 | 请求实体过大 | 服务器无法处理请求,因为请求实体过大,超出服务器的处理能力. |
414 | 请求的 URI 过长 | 请求的 URI (通常为网址)过长,服务器无法处理. |
415 | 不支持的媒体类型 | 请求的格式不受请求页面的支持. |
416 | 请求范围不符合要求 | 如果页面无法提供请求的范围,则服务器会返回此状态代码. |
417 | 未满足期望值 | 服务器未满足"期望"请求标头字段的要求. |
5xx | 服务器错误 | 这些状态代码表示服务器在尝试处理请求时发生内部错误. 这些错误可能是服务器本身的错误,而不是请求出错. |
500 | 服务器内部错误 | 服务器遇到错误,无法完成请求. |
501 | 尚未实施 | 服务器不具备完成请求的功能. 例如,服务器无法识别请求方法时可能会返回此代码. |
502 | 错误网关 | 服务器作为网关或代理,从上游服务器收到无效响应. |
503 | 服务不可用 | 服务器目前无法使用 (由于超载或停机维护). 通常,这只是暂时状态. |
504 | 网关超时 | 服务器作为网关或代理,但是没有及时从上游服务器收到请求. |
505 | HTTP 版本不受支持 | 服务器不支持请求中所用的 HTTP 协议版本. |
在浏览器中显示的内容有 HTML、有 XML、有 GIF、还有 Flash ……那么,浏览器是如何区分它们,决定什么内容用什么形式来显示呢?答案是 MIME Type,也就是该资源的媒体类型。
媒体类型通常是通过 HTTP 协议,由 Web 服务器告知浏览器的,更准确地说,是通过 Content-Type 来表示的,例如: Content-Type: text/HTML
,表示内容是 text/HTML
类型,也就是超文本文件。MIME type 是一个标准,编写格式和内容都是已经固定好的。
通常只有一些在互联网上获得广泛应用的格式才会获得一个 MIME Type,如果是某个客户端自己定义的格式,一般只能以 application/x-
开头。当然,处理本地的文件,在没有人告诉浏览器某个文件的 MIME Type 的情况下,浏览器也会做一些默认的处理。
每个 MIME 类型由两部分组成:前面是数据的大类别(主类型),例如声音 audio、图象 image 等,后面定义具体的种类(子类型)。很多时候,如果在后台服务器没有定义子类型的时候,文本文件默认为 text/plain
,而二进制文件则默认为 application/octet-stream
。
常见类型
-
text
- text/html
- text/css
- text/javascript
- text/plain
- text/markdown
-
image
- image/jpeg
- image/png
- image/svg
-
video
- video/mp4
-
audio
- audio/ogg
-
application
- application/json
- application/xml
- application/pdf
- application/octet-stream
-
multipart
注:multipart 表示具有多个 MIME types 的一组 document. 比如 multipart/form-data 就是通常由 HTTP FORM 的 post 方法发送出的文件表格格式。
- multipart/form-data
文章