http基础
常用浏览器
Firefox IE Chrome Opera Safari
TCP三次握手(建立连接)
TCP四次挥手(断开连接)
URI
http://user:pass@www.example.jp:80/dir/index.html?uid=1#ch1 协议 登录信息 服务器地址 端口号 文件路径 查询字符串 片段标识符 协议: 获取访问资源时要指定协议类型 登陆信息: 身份认证 服务器地址: 可以是DNS解析的域名也可以是IPv4地址 端口号: 指定服务器提供Web服务的端口 文件路径: 指定服务器上的文件路径来定位特定资源 查询字符串: 针对已指定的文件路径内的资源,使用查询字符串传入任意参数,获取特定资源 片段标识符: 可以标记处已获取资源中的子资源
Method
1 GET 请求访问已被URI识别的资源 2 POST 传输实体的主体 3 PUT 上传文件 4 HEAD 获得报文的首部 5 DELETE 按请求URI删除指定的资源 6 OPTIONS 查询服务器端支持的HTTP方法种类 7 TRACE 让Web服务器将之前的请求通信环回给客户端 8 CONNECT 在与代理服务器通信时建立隧道
持久连接
keep-alive字段
只要任意一端没有明确提出断开连接,则保持TCP连接状态
为传送大量数据提供服务,减少TCP连接重复建立和断开
状态码
1XX 信息性状态码 接收的请求正在处理
2XX 成功状态码 请求正常处理完毕
3XX 重定向状态码 需要进行附加操作以完成请求
4XX 客户端错误状态码 服务器无法处理请求
5XX 服务器错误状态码 服务器处理请求出错
经常遇到的状态码
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
200 OK # 表示从客户端发来的请求在服务器端被正常处理了 204 No Content # 表示请求已成功处理,但在返回的响应报文中不含实体的主体部分 206 Partial Content # 表示客户端进行了范围请求,而服务器成功执行了这部分的GET请求 301 Moved Permanently # 永久性重定向 302 Found # 临时性重定向 303 See Other # 表示请求对应的资源存在着另一个URI 304 Not Modified # 表示服务器没有改变的资源 307 Temporary Redirect # 临时重定向 400 Bad Request # 表示请求报文中存在语法错误 401 Unauthorized # 表示发送的请求需要有通过HTTP认证的认证信息 403 Forbidden # 表明对请求资源的访问被服务器拒绝了 404 Not Found # 表明服务器上无法找到请求的资源 500 Internal Server Error # 表明服务器本身发生错误 503 Service Unavailable # 表明服务器处于超负载或正在进行停机维护,现在无法处理请求
代理
代理是一种有转发功能的应用程序,它扮演了位于服务器和客户端“中间人”的角色,接收由客户端发送的请求并转发给服务器,同时也接收服务器返回的响应并转发给客户端
网关
网关是转发其它服务器通信数据的服务器,接收从客户端发送来的请求时,它就像自己拥有资源的源服务器一样对请求进行处理。有时客户端可能都不会察觉,自己的通信目标是一个网关
隧道
隧道是在相隔甚远的客户端和服务器两者之间进行中转,并保持双发通信连接的应用程序
缓存
缓存服务器是代理服务器的一种,当代理转发服务器返回的响应时,代理服务器会保存一份资源的副本,可避免多次从源服务器转发资源
HTTP首部字段
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
通用首部字段(请求和响应附带) # Cache-Control 控制缓存的行为 # Connection 逐跳首部、连接的管理 # Date 创建报文的日期时间 # Pragma 报文指令 # Trailer 报文末端的首部一览 # Transfer-Encoding 指定报文主体的传输编码方式 # Upgrade 升级为其它协议 # Via 代理服务器的相关信息 # Warning 错误通知 请求首部字段 # Accept 用户代理可处理的媒体类型 # Accept-Charset 优先的字符集 # Accept-Encoding 优先的内容编码 # Accept-Language 优先的语言 # Authorization Web认证信息 # Expect 期待服务器的特定行为 # From 用户的电子邮件地址 # Host 请求资源所在服务器地址 # If-Match 比较实体标记(Etag) # If-Modified-Since 比较资源的更新时间 # If-None-Match 比较实体标记(与If-Match相反) # If-Range 资源未更新时发送实体Byte的范围请求 # If-Unmodified-Since 与If-Modified-Since相反 # Max-Forwards 最大传输逐跳数 # Proxy-Authorization 代理服务器要求客户端的认证信息 # Range 实体的字节范围请求 # Referer 对请求中URI的原始获取方 # TE 传输编码的优先级 # User-Agent HTTP客户端身份 响应首部字段 # Accept-Ranges 是否接受字节范围请求 # Age 推算资源创建经过时间 # Etag 资源的匹配信息 # Location 令客户端重定向至指定URI # Proxy-Authenticate 代理服务器对客户端的认证信息 # Retry-After 对再次发起请求的时机要求 # Server HTTP服务器的安装信息 # Vary 代理服务器缓存的管理信息 # WWW-Authenticate 服务器对客户端的认证信息 实体首部字段 # Allow 资源可支持的HTTP方法 # Content-Encoding 实体主体使用的编码方式 # Content-Language 实体主体的自然语言 # Content-Length 实体主体的大小(单位:字节) # Content-Location 替代对应资源的URI # Content-MD5 实体主体的报文摘要 # Content-Range 实体主体位置范围 # Content-Type 实体主体的媒体类型 # Expires 实体主体过期的日期时间 # Last-Modified 资源的最后修改日期时间
重要字段解析
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
# Transfer-Encoding 规定了传输报文主体时采用的编码方式 # Accept 用户代理能够处理的媒体类型及媒体类型的相对优先级 text/html,text/plain,text/css application/xhtml+xml,application/xml image/jpeg,image/gif,image/png video/mpeg,video/quicktime # Content-Type 实体主体内对象的媒体类型 # Accpet-Charset 通知服务器用户代理支持的字符集及字符集的相对优先顺序 # Accept-Encoding 告知服务器用户代理支持的内容编码及内容编码的优先级顺序 gzip,compress,deflate,identity # Content-Encoding 告知客户端服务器对实体部分选用的内容编码方式 # Accept-Language 告知服务器用户代理能够处理的自然语言集及自然语言集的相对优先级 # Content-Language 告知客户端实体主体使用的自然语言 # Authorization 告知服务器用户代理的认证信息 # Host 告知服务器请求的资源所处的互联网主机名和端口号 和单台服务器分配多个域名的虚拟主机工作机制有很密切的关联 # If-Match 只有当If-Match的字段值根Etag值匹配时,服务器才会接受请求 # User-Agent 将请求的浏览器和用户代理名称等信息传达给服务器 # Age 告知客户端,源服务器在多久之前创建了相应,单位为秒 # ETag 实体标识 # Location 将响应接收方引导至某个请求URI位置不同的资源,配合重定向使用 # Content-Location 报文主体部分对应的URI # Server 告知客户端当前服务器上安装的HTTP服务器应用程序的信息 # WWW-Authenticate 用于HTTP访问认证 # Allow 通知客户端能够支持Request-URI指定资源的所有HTTP方法 # Content-Length 实体主体部分的大小 # Content-MD5 报文主体MD5值,给客户端验证传输是否完整 # Expires 资源失效的日期告知客户端
Cookie首部字段
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
Set-Cookie # expires 指定浏览器可发送Cookie的有效期 省略时,默认浏览器关闭Cookie失效 # path 限制指定Cookie的发送范围的文件目录 # domain domain属性指定的域名可做到与结尾匹配一致 指定example.com后,www.example.com和www2.example.com等都可以发送Cookie # secure 限制Web页面仅在HTTPS安全连接时,才可以发送Cookie,非HTTPS的连接Cookie不会被回收 # HttpOnly JS脚本无法获取Cookie,防止XSS攻击 Cookie Cookie主体,多个Cookie可以连续放置
Session
使用Cookie管理Session
客户端发送登陆信息进行身份认证,然后把用户的认证状态与Session ID绑定后记录在服务器端,返回响应时会在首部字段SetCookie内写入Session ID
扩展首部字段
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
# X-Frame-Options 控制网站内容在其他Web网站的Frame标签内的显示问题,防止点击劫持攻击 DENY:拒绝 SAMEORIGIN:仅同源域名下的网页匹配时许可 # X-XSS-Protection 控制浏览器XSS防护机制的开关 XSS过滤设置,0 无效状态 1 有效状态 # DNT 拒绝被精确广告追踪 同意被追踪 拒绝被追踪
HTTP的缺点
①通信使用明文,内容可能会被窃听
②不验证通信方的身份,因此有可能遭遇伪装
③无法证明报文的完整性,所以有可能已遭遇篡改
HTTPS
HTTPS = HTTP + 加密 + 认证 + 完整性保护
HTTPS通信接口部分使用 SSL协议 和 TLS协议 替代
TCP建立阶段采用非对称加密认证,数据传输阶段采用对称加密
服务器端公钥合法性正确性由CA鉴定