HTTP
HTTP协议是什么
1,Hyper Text Transfer Protocol (超文本传输协议)
实际上这个协议传输的数据是用超链接组成的,可以传输的不仅仅有文本,音频图片也行
2,用于从万维网(即www.)服务器传输超文本到本地浏览器的传送协议
(服务器简单理解就是一台电脑)
3,HTTP协议是基于TCP的应用层协议,他不关心数据传输的细节,主要是用来 规定客户端和服务器端的数据传输格式,最初是用来向客户端传输HTML页面的内容。默认端口号是 80
4,特点:HTTP是基于请求与响应模式的、无状态的、应用层的协议
工作原理
HTTP是基于客户/服务器模式,且面向连接的。典型的HTTP事务处理有如下的过程:
1,客户与服务器建立连接;
2,客户向服务器提出请求;
3,服务器接受请求,并根据请求返回相应的文件作为应答;
4,客户与服务器关闭连接。
客户与服务器之间的HTTP连接是一种一次性连接,它限制每次连接只处理一个请求,当服务器返回本次请求的应答后便立即关闭连接,下次请求再重新建立连接。这种一次性连接主要考虑到WWW服务器面向的是Internet中成千上万个用户,且只能提供有限个连接,故服务器不会让一个连接处于等待状态,及时地释放连接可以大大提高服务器的执行效率。
客户与服务器之间的HTTP连接是一种一次性连接,它限制每次连接只处理一个请求,当服务器返回本次请求的应答后便立即关闭连接,下次请求再重新建立连接。这种一次性连接主要考虑到WWW服务器面向的是Internet中成千上万个用户,且只能提供有限个连接,故服务器不会让一个连接处于等待状态,及时地释放连接可以大大提高服务器的执行效率。
HTTP支持持久连接,在HTTP / 0.9和1.0中,连接在单个请求/响应对之后关闭。在HTTP / 1.1中,引入了保持活动机制,其中连接可以重用于多个请求。这样的持久性连接可以明显减少请求延迟,因为在发送第一个请求之后,客户端不需要重新协商TCP 3-Way-Handshake连接。另一个积极的副作用是,通常,由于TCP的缓慢启动机制,连接随着时间的推移而变得更快。
该协议的1.1版还对HTTP / 1.0进行了带宽优化改进。例如,HTTP / 1.1引入了分块传输编码,以允许流传输而不是缓冲持久连接上的内容。HTTP流水线进一步减少了延迟时间,允许客户端在等待每个响应之前发送多个请求。协议的另一项附加功能是字节服务,即服务器仅传输客户端明确请求的资源部分。
从技术上讲是客户在一个特定的TCP端口(端口号一般为80)上打开一个套接字。如果服务器一直在这个周知的端口上倾听连接,则该连接便会建立起来。然后客户通过该连接发送一个包含请求方法的请求块。
HTTP规范定义了9种请求方法,每种请求方法规定了客户和服务器之间不同的信息交换方式,常用的请求方法是GET和POST。服务器将根据客户请求完成相应操作,并以应答块形式返回给客户,最后关闭连接。
HTTP的报文格式
HTTP报文由从客户机到服务器的请求和从服务器到客户机的响应构成。
(完整版:)
请求报文格式如下:
请求行 - 通用信息头 - 请求头 - 实体头 - 报文主体
请求行以方法字段开始,后面分别是URL字段和HTTP协议版本字段,并以CRLF结尾。SP是分隔符。除了在最后的CRLF序列中CF和LF是必需的之外,其他都可以不要。有关通用信息头,请求头和实体头方面的具体内容可以参照相关文件。
应答报文格式如下:
状态行 - 通用信息头 - 响应头 - 实体头 - 报文主体
状态码元由3位数字组成,表示请求是否被理解或被满足。原因分析是对原文的状态码作简短的描述,状态码用来支持自动操作,而原因分析用来供用户使用。客户机无需用来检查或显示语法。
HTTP请求报文
(入门版:)
HTTP请求报文主要是由请求行、请求头部、空一行、请求正文(请求体)4部分组成
注:get没有请求体。 请求体是一个参数,get请求把这个参数放在了url里
请求行:
请求方法:
connect
写的不全,常用get和post
URL:
Uniform Resource Locator:统一资源定位符
可以理解为描述网上资源的位置、路径
url格式:
protocol://hostname[:port]/website/path/ [file][?query-string][#fragment]
协议名://主机名:端口号/网站名称/目录/文件名?查询参数#信息片段
protocol:协议名称,比如http、ftp、file、gopher、https、mailto、news
hostname:主机名称,通常为机器名+域名+域树+域林(域名或者IP地址)
port:端口号,http的通常默认为8080,telnet默认为23,ftp默认为21,smtp默认为25,pop3默认为110,dns默认为53
website:网站名称,可以是web应用程序上下文、虚拟目录名、网站根目录、
path/file:目录/文件
?query-string:查询参数,可以是1和2
#fragment:信息片段,是一种网页描点
个人常见是 protocol://host[ :port# ]/path/…/[?query-string]
如:
https://search.bilibili.com/all?keyword=%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95&from_source=webtop_search&spm_id_from=333.1007
请求头:
以键值对出现
请求头 | 描述 |
---|---|
Host | 主机ip地址或域名 |
User-Agent | 客户端相关信息,如操作系统、浏览器信息 |
Accept | 指定客户端 接收信息类型,如:image/jpg,application/json, text/plain,text/html |
Accept-Charset | 客户端可接受的字符集,如:gb2312 |
Accept-Encoding | 可接受的内容编码,如:gzip |
Accept-Language | 接受的语言,如:Accept-Language:zh-cn |
Authorization | 客户端提供给服务端,进行权限验证的信息(即授权,这是服务器给我们的一个令牌token,它发送给服务端之后,进行校验,合法的才会给客户端发送信息,返回响应) |
Cookie | 携带的Cookie信息,里面可能会藏着会话id(session id)。它保存在客户端(如:浏览器)当中,然后请求再携带Cookie发送到服务器,和Authorization一样做一个接口的权限鉴定,从而确定此接口有无资格来请求对应的资源(里面可能会藏着会话id) |
Referer | 当前文档的url,即从哪个链接过来的。(防盗链) |
Content-Type | 请求体内容类型 |
Content-Length | 数据长度 |
Cache-Control | 缓存机制,如:Cache-Control:no-cache |
Pragma | 防止页面被缓存,和Cache-Control:no-cache作用一样 |
HTTP响应报文
HTTP响应报文
(入门版:)
HTTP响应报文主要是由状态行、消息报头、空一行、响应正文(响应体)4部分组成
响应体有可能没有
状态行:
状态码:
用以表示网页服务器HTTP响应状态的3位数字码
(简略版)
响应头:
响应头 | 描述 |
---|---|
Server | HTTP服务器的软件信息 |
Date | 响应报文的时间 |
Expires | 指定缓存过期时间 |
Set-Cookie | 种缓存(就是存Cookie,后续过程中接口要用) |
Last-Modified | 资源最后修改时间 |
Content-Type | 响应的类型和字符集,如:application/x-javascript,charset=UTF-8 |
Content-length | 内容长度 |
Connection | 如:keep-alive,表示保持tcp连接不关闭(保留三次握手,避免网络资源浪费),不会永久保持连接,服务器可重置 |
Location | 指向重定向的位置,新的URL地址,如304的情况 |
状态消息:
(详细版)
1xx:信息
消息 | 描述 |
---|---|
100 Continue | 服务器仅接收到部分请求,但是一旦服务器并没有拒绝该请求,客户端应该继续发送其余的请求。 |
101 Switching Protocols | 服务器转换协议:服务器将遵从客户的请求转换到另外一种协议。 |
2xx:成功
消息 | 描述 |
---|---|
200 OK | 请求成功(其后是对GET和POST请求的应答文档。) |
201 Created | 请求被创建完成,同时新的资源被创建。 |
202 Accepted | 供处理的请求已被接受,但是处理未完成。 |
203 Non-authoritative Information | 文档已经正常地返回,但一些应答头可能不正确,因为使用的是文档的拷贝。 |
204 No Content | 没有新文档。浏览器应该继续显示原来的文档。如果用户定期地刷新页面,而Servlet可以确定用户文档足够新,这个状态代码是很有用的。 |
205 Reset Content | 没有新文档。但浏览器应该重置它所显示的内容。用来强制浏览器清除表单输入内容。 |
206 Partial Content | 客户发送了一个带有Range头的GET请求,服务器完成了它。 |
3xx:重定向
消息 | 描述 |
---|---|
300 Multiple Choices | 多重选择。链接列表。用户可以选择某链接到达目的地。最多允许五个地址。 |
301 Moved Permanently | 所请求的页面已经转移至新的url。 |
302 Found | 所请求的页面已经临时转移至新的url。 |
303 See Other | 所请求的页面可在别的url下被找到。 |
304 Not Modified | 未按预期修改文档。客户端有缓冲的文档并发出了一个条件性的请求(一般是提供If-Modified-Since头表示客户只想比指定日期更新的文档)。服务器告诉客户,原来缓冲的文档还可以继续使用。 |
305 Use Proxy | 客户请求的文档应该通过Location头所指明的代理服务器提取。 |
306 Unused | 此代码被用于前一版本。目前已不再使用,但是代码依然被保留。 |
307 Temporary Redirect | 被请求的页面已经临时移至新的url。 |
4xx:客户端错误
消息 | 描述 |
---|---|
400 Bad Request | 服务器未能理解请求。 |
401 Unauthorized | 被请求的页面需要用户名和密码。 |
401.1 | 登录失败。 |
401.2 | 服务器配置导致登录失败。 |
401.3 | 由于ACL对资源的限制而未获得授权。 |
401.4 | 筛选器授权失败 |
401.5 | ISAPI/CGI应用程序授权失败。 |
401.7 | 访问被Web服务器上的URL授权策略拒绝。这个错误代码为IIS 6.0所专用。 |
402 Payment Required | 此代码尚无法使用。 |
403 Forbidden | 对被请求页面的访问被禁止。 |
403.1 | 执行访问被禁止。 |
403.2 | 读访问被禁止。 |
403.3 | 写访问被禁止。 |
403.4 | 要求SSL。 |
403.5 | 要求SSL 128。 |
403.6 | IP地址被拒绝。 |
403.7 | 要求客户端证书。 |
403.8 | 站点访问被拒绝 |
403.9 | 用户数过多。 |
403.10 | 配置无效。 |
403.11 | 密码更改。 |
403.12 | 拒绝访问映射表。 |
403.13 | 客户端证书被吊销。 |
403.14 | 拒绝目录列表。 |
403.15 | 超出客户端访问许可。 |
403.16 | 客户端证书不受信任或无效。 |
403.17 | 客户端证书已过期或尚未生效。 |
403.18 | 在当前的应用程序池中不能执行所请求的URL。这个错误代码为IIS 6.0所专用。 |
403.19 | 不能为这个应用程序池中的客户端执行CGI。这个错误代码为IIS 6.0所专用。 |
403.20 | Passport登录失败。这个错误代码为IIS 6.0所专用。 |
404 Not Found | 服务器无法找到被请求的页面。 |
404.0 | (无)–没有找到文件或目录。 |
404.1 | 无法在所请求的端口上访问Web站点。 |
404.2 | Web服务扩展锁定策略阻止本请求。 |
404.3 | MIME映射策略阻止本请求。 |
405 Method Not Allowed | 请求中指定的方法不被允许。 |
406 Not Acceptable | 服务器生成的响应无法被客户端所接受。 |
407 Proxy Authentication Required | 用户必须首先使用代理服务器进行验证,这样请求才会被处理。 |
408 Request Timeout | 请求超出了服务器的等待时间。 |
409 Conflict | 由于冲突,请求无法被完成。 |
410 Gone | 被请求的页面不可用。 |
411 Length Required | "Content-Length"未被定义。如果无此内容,服务器不会接受请求。 |
412 Precondition Failed | 请求中的前提条件被服务器评估为失败。 |
413 Request Entity Too Large | 由于所请求的实体的太大,服务器不会接受请求。 |
414 Request-url Too Long | 由于url太长,服务器不会接受请求。当post请求被转换为带有很长的查询信息的get请求时,就会发生这种情况。 |
415 Unsupported Media Type | 由于媒介类型不被支持,服务器不会接受请求。 |
416 Requested Range Not Satisfiable | 服务器不能满足客户在请求中指定的Range头。 |
417 Expectation Failed | 执行失败。 |
423 | 锁定的错误。 |
5xx:服务器错误
消息 | 描述 |
---|---|
500 Internal Server Error | 请求未完成。服务器遇到不可预知的情况。 |
500.12 | 应用程序正忙于在Web服务器上重新启动。 |
500.13 | Web服务器太忙。 |
500.15 | 不允许直接请求Global.asa。 |
500.16 | UNC授权凭据不正确。这个错误代码为IIS 6.0所专用。 |
500.18 | URL授权存储不能打开。这个错误代码为IIS 6.0所专用。 |
500.100 | 内部ASP错误。 |
501 Not Implemented | 请求未完成。服务器不支持所请求的功能。 |
502 Bad Gateway | 请求未完成。服务器从上游服务器收到一个无效的响应。 |
502.1 | CGI应用程序超时。 |
502.2 | CGI应用程序出错。 |
503 Service Unavailable | 请求未完成。服务器临时过载或宕机。 |
504 Gateway Timeout | 网关超时。 |
505 HTTP Version Not Supported | 服务器不支持请求中指明的HTTP版本。 |
本文参考了教学录频,百度百科,csdn
本文不盈利,也禁止以盈利为目的的使用