HTTP协议概述
HTTP超文本传输协议, 基于TCP/IP通信协议传输数据
特点
HTTP是无连接的: 无连接的含义是限制每次连接只处理一个请求. 服务器处理完客户的请求, 并收到客户的应答后, 即断开连接, 采用这种方式可以节省传输时间HTTP是媒体独立的: 只要客户端和服务器知道如何处理的数据类型, 任何类型的数据都可以通过HTTP发送, 在HTTP中使用Context-Type来表明资源类型HTTP是无状态的:HTTP协议是无状态协议, 指协议对于事物处理没有记忆能力. 缺少状态意味着如果后续处理需要前面的信息, 则它必须重传, 这样可能导致每次连接传送的数据量增大. 另一方面, 在服务器不需要先前信息时它的应答就较快
请求方法
HTTP/1.0定义了三种请求方法: GET、POST、HEAD方法
HTTP/1.1新增了六种请求方法:OPTIONS、PUT、PATCH、DELETE、TRACE和CONNECT方法
GET: 请求指定的页面信息, 并返回实体主体. 由于各浏览器对于URL的长度都有限制, 一般使用不超过4kPOST: 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中,POST 请求可能会导致新的资源的建立或已有资源的修改,其请求携带的最大资源大小由服务器设定HEAD: 类似于GET请求,只不过返回的响应中没有具体的内容,用于获取报头PUT: 从客户端向服务器传送的数据取代指定的文档的内容DELETE: 请求服务器删除指定的页面CONNECT: 可以开启一个客户端与所请求资源之间的双向沟通的通道,它可以用来创建隧道tunnelOPTIONS: 用于获取目的资源所支持的通信选项TRACE: 实现沿通向目标资源的路径的消息环回loop-back测试 ,提供了一种实用的debug 机制PATCH: 是对PUT方法的补充,用来对已知资源进行局部更新
请求头
Accept: 指定客户端能够接收的内容类型Accept-Charset: 浏览器可以接收的字符编码集Accept-Encoding: 指定浏览器可以支持的web服务器返回内容压缩编码类型Accept-Language: 浏览器可接收的语言Accept-Ranges: 可以请求网页实体的一个或者多个子范围字段Authorization: HTTP授权的授权证书Cache-Control: 指定请求和响应遵循的缓存机制Connection: 表示是否需要持久连接Cookie: HTTP请求发送时, 会把保存在该请求域名下的所有cookie值一起发送给web服务器Content-Length: 请求的长度Content-Type: 请求的与实体对应的MIME信息Date: 请求发送的日期和时间Expect: 请求的特定服务器行为From: 发出请求的用户的EmailHost: 指定请求的服务器的域名和端口号If-Match:HTTP请求报头使得所述请求为条件. 对于GET和HEAD方法, 服务器将只在与请求的资源匹配时发回请求的资源ETags. 对于PUT和其他非安全方法, 在这种情况下它只会上传资源If-Modified-Since: 如果请求的部分在指定时间之后被修改则请求成功, 未被修改则返回304代码If-Node-Match: 如果内容未改变返回304代码, 参数未服务器先前发送的Etag, 与服务器回应的Etag比较判断是否改变If-Range: 如果实体未改变, 服务器发送客户端丢失的部分, 否则发送整个实体, 参数也为EtagIf-Unmodified-Since: 只有实体在指定时间之后未被修改才请求成功Max-Forwards: 限制信息通过代理和网关传送的时间Pragma: 用来包含实现特定的指令Proxy-Authorization: 包含用于向代理服务器认证用户代理的凭证, 通常在服务器响应407,Proxy Authentication Required状态和Proxy-Authenticate标题后Range: 只请求实体的一部分, 指定范围Referer: 先前网页的地址, 当前请求网页紧随其后TE: 客户端愿意接受的传输编码, 并通知服务器接收尾加头信息Upgrade: 向服务器指定某种传输协议以便服务器进行转换(如果支持)User-Agent: User-Agent的内容包含发出请求的用户信息Via: 通知中间网关或代理服务器地址, 通信协议X-Forwarded-For:Fxx是用于通过HTTP代理或负载均衡器识别连接到web服务器的客户端的发起IP地址的事实上的标准报头X-Forwarded-Host:XFH是用于识别由客户机在所要求的原始主机一个事实上的标准报头Host的HTTP请求报头X-Forwarded-Proto:XFP用于识别协议HTTP或HTTPS, 其中使用的客户端连接到代理或负载均衡器一个事实上的标准报头
响应头
Accept-Ranges: 表明服务器是否支持指定范围请求及哪种类型的分段请求Age: 从原始服务器到代理缓存形成的估算时间Allow: 对某网络资源的有效的请求行为, 不允许则返回405Cache-Control: 告诉所有的缓存机制是否可以缓存及哪种类型Content-Encoding: web服务器支持的返回内容压缩编码类型Content-Language: 响应体的语言Content-Length: 响应体的长度Content-Location: 请求资源可替代的备用的另一地址Content-MDS: 返回资源的MD5校验值Content-Range: 在整个返回体中本部分的字节位置Content-Type: 返回内容的MIME类型Date: 原始服务器消息发出的时间ETag: 请求变量的实体标签的当前值Expires: 响应过期的日期和时间Last-Modified: 请求资源的最后修改时间Location: 用来重定向接收方到非请求URL的位置来完成请求或标识新的资源Pragma: 包括实现特定的指令, 它可应用到响应链上的任何地方Proxy-Authenticate: 它指出认证方案和可应用到代理的该URL上的参数refresh: 应用于重定向或一个新的资源被创造, 在5秒之后重定向Retry-After: 如果实体暂时不可取, 通知客户端在指定时间之后再次尝试erver:web服务器软件名称Set-Cookie: 设置Http CookieTrailer: 指出头域在分块传输编码的尾部存在Transfer-Encoding: 文件传输编码Vary: 告诉下游代理是使用缓存响应还是从原始服务器请求Via: 告知代理客户端响应是通过哪里发送的Warning: 警告实体可能存在的问题WWW-Authenticate: 表明客户端请求实体应该使用的授权方案X-Frame-Options: 可以被用来指示一个浏览器是否应该被允许在一个以呈现页面<frame>,<iframe>或<object>. 通过确保其内容未嵌入其他网站, 网站可以使用此功能来避免点击劫持攻击X-XSS-Protection: 可在检测到反射的跨站点脚本XSS攻击时阻止页面加载
状态码
总共有五种类型:
1xx: 信息, 服务器收到请求, 需要请求者继续执行操作2xx: 成功, 操作成功接收并处理3xx: 重定向, 需要进一步的操作以完成请求4xx: 客户端错误, 请求包含语法错误或无法完成请求5xx: 服务器错误, 服务器在处理请求的过程中发生了错误
详细分析:
100 Conyinue: 继续, 客户端应继续请求101 Switching Protocols: 切换协议. 服务器根据客户端的请求切换协议, 只能切换到更高级的协议, 例如切换到HTTP的新版本协议200 OK: 请求成功. 一般用于GET请求和```POST``请求201 Created: 已创建. 成功请求并创建了新的资源202 Accepted: 已接受. 已经接收请求, 但未处理完成203 Non-Authoritative Information: 非授权信息. 请求成功, 但返回的meta信息不在原始的服务器, 而是一个副本204 No Content: 无内容. 服务器成功处理, 但未返回内容. 在未更新网页的情况下可确保浏览器继续显示当前文档205 Reset Content: 重置内容. 服务器处理成功, 用户终端应重置文档视图. 可通过此返回码清除浏览器的表单域206 Partial Content: 部分内容. 服务器成功处理了部分GET请求300 Multipe Choies: 多种选择. 请求的资源可包括多个位置, 相应可返回一个资源特征与地址的列表用于用户终端选择301 Moved Permanently: 永久移动. 请求的资源已被永久地移动到新URL, 返回信息会包括新的URL, 浏览器会自动定向到新URL. 今后任何新的请求都应使用新的URL代替302 Found: 临时移动, 与301类似, 但资源只是临时被移动, 客户端应继续使用原有的URL303 See Other: 查看其他地址. 与301类似, 使用GET与POST请求查看304 Not Modified: 未修改. 所请求的资源未修改, 服务器返回此状态码时, 不会返回任何资源. 客户端通常会缓存访问过的资源, 通过提供一个头信息指出客户端希望只返回在指定日期之后修改的资源305 Use Proxy: 使用代理, 所请求的资源必须通过代理访问306 Unnsed: 已经被废弃的HTTP状态码307 Temporary Redirect: 临时重定向, 与302类似. 使用GET请求吃重定向400 Bad Request: 客户端请求的语法错误, 服务器无法理解401 Unauthorized: 请求要求用户的身份认证402 Payment Required: 保留, 将来使用403 Forbidden: 服务器理解客户端的请求, 但是拒绝执行此请求404 Not Found: 服务器无法根据客户端的请求找到资源405 Method Not Allowd: 客户端请求中的方法被禁止406 Not Acceptable: 服务器无法根据客户端请求的内容特性完成请求407 Proxy Authentication Required: 请求要代理的身份认证, 与401类似, 但请求者应当使用代理进行授权408 Request Time-out: 服务器等待客户端发送的请求时间过长, 超时409 Conflict: 服务器完成客户端的PUT请求时可能返回此代码, 服务器处理请求时发生了冲突410 Gone: 客户端请求的资源已经不存在.410不同于404, 如果资源以前有现在被永久删除了可使用410代码, 网站设计人员可通过301代码指定资源的位置411 Length Required: 服务器无法处理客户端发送给的不带Content-Length的请求信息412 Precondition Failed: 客户端请求信息的先决条件413 Request Entity Too Large: 由于请求的实体过大, 服务器无法处理, 因此拒绝请求. 为防止客户端的连续请求, 服务器可能会关闭连接. 如果只是服务器暂时无法处理, 则会包含一个Retry-After的响应信息414 Request-URL Too Large: 请求的URL过长, 服务器无法处理415 Unsupported Media Type: 服务器无法处理请求附带的媒体格式416 Requested range not satisfiable: 客户端请求的范围无效417 Expectation Failed: 服务器无法满足Expect的请求头信息500 Internal Server Error: 服务区不支持请求的功能, 无法完成请求502 Bad Gateway: 作为网关或者代理工作的服务器尝试执行请求时, 从远程服务器接收到了一个无效的响应503 Service Unavailable: 由于超载或系统维护, 服务器暂时的无法处理客户端的请求. 延时的长度可包含再服务器的Retry-After头信息中504 Gateway Time-out: 充当网关或代理的服务器, 未及时从远端服务器获取请求505 HTTP Version not supported: 服务器不支持请求的HTTP协议的版本, 无法完成处理