HTTP的方法:
GET:向服务器请求资源
POST:向服务器请求资源并提交数据
- eg:登录时输入用户名、密码后,点击登录按钮就是一个POST动作
HEAD:请求服务器,但仅返回首部,不包含主体内容
- 可以通过首部来检测服务器资源是否存在,资源是否被修改了等
PUT:向服务器写入文档(向服务器的资源中存储数据)
OPTIONS:询问服务器支持的方法有哪些
TRACE:跟踪请求,“环回”诊断;最后一站的服务器会返回一条TRACE响应,包含服务器接收到的请求的精确副本;可用于客户端对比请求在传送过程中是否被修改及修改内容等
DELETE:请服务器删除指定资源(无法保证一定删除,因为服务器可以在不通知客户端的情况下撤销请求)
状态码:
信息性状态码(100-199):
- 100 Continue:说明服务器收到了请求的初始部分,请客户端继续;服务器收到了这个状态码的请求后必须进行响应
- 101 Switching Protocols:说明服务器正在切换成首部指定的协议
成功状态码(200-299):
- 200 OK:请求成功
- 201 Created:用于创建服务器对象的请求(eg:PUT)
- 202 Accepted:请求已被服务器接受,但还没执行
重定向状态码(300-399):
- 300 Multiple Choices:请求指向多个资源的URL
- 301 Moved Permanately:请求的URL被移除
- 302 Found:面向HTTP/1.0,使用给定的URL临时定位资源
- 304 Not Modified:服务器上资源没被修改
- 307 Temporary Redirect:面向HTTP/1.1,使用给定的URL临时定位资源
客户端错误状态码(400-499):
- 403 Forbidden:服务器拒绝该请求(不说明原因)
- 404 Not Found:指定的URL没有找到
- 408 Request Timeout:请求超时
服务器错误状态吗(500-599):
- 500 Internal Server Error:执行请求服务失败
- 504 Gateway Timeout:请求超时
Cookie
客户端保存的是服务器返回的用来识别用户的id等小片段信息,当用户再次访问同一个服务器时,cookie会发送给合适的站点。
- 会话cookie:临时cookie,用户退出浏览器时,会被删除。
- 持久cookie:有一个过期时间的cookie,存储在本地cookie文件。
HTTPS(默认端口:443,其实是SSL的端口号)
简单说,HTTPS = HTTP + SSL or TLS,HTTPS是HTTP的安全版本。
HTTPS就是在安全的传输层上发送HTTP。
通俗说,就是先要进行SSL握手,验证SSL证书,生成秘钥等;之后再将原始HTTP报文发送到TCP传输层之前,会先发送到SSL层进行加密,再发送到TCP传输层。
TCP连接
IP分组=IP分组首部(20字节)+TCP段首部(20字节)+TCP数据块
三次握手:
- SYN
- SYN+ACK
- ACK+传输数据主体
提高HTTP连接性能:
并行连接:多条TCP连接,并发请求HTTP,叠加时延
持久连接:重用TCP连接,消除连接及关闭时延
在事务处理结束之后仍然保持TCP连接为打开状态
HTTP/1.0+keep alive:请求首部加上Connection:Keep-Alive激活keep-alive连接;当然服务器响应也需要带上Connection:Keep-Alive
- 哑代理:代理只是简单地将客户端和服务器的Connection:Keep-Alive进行传输,会造成服务器和客户端分别认为自己和代理发起了keep-alive连接,而导致代理挂起的困境
- Proxy-Connection:Keep-Alive:哑代理直接原样传输,服务器没匹配到Connection首部,忽略Keep-alive请求;聪明的代理可以识别出Proxy-Connection首部,并自动转化成Connection:Keep-Alive首部,服务器匹配成功
- 单个盲代理+Proxy-Connection新首部可以解决上面哑代理的困境;但对于多层代理依然束手无策
HTTP/1.1持久连接:HTTP/1.1已经停止对keep-alive的支持,改用默认持久连接的设计;需要关闭时,首部显式加入Connection:close即可。
管道化连接:HTTP/1.1持久连接上可选地使用请求管道。可以消除传输时延。
关闭连接
- TCP连接是双向的,两端都有输入、输出信道。
- close():完全关闭
- shutdown():半关闭,即单独关闭输入或输出信道。
- 关闭连接的输入信道比较危险,毕竟你不能确信对面输出信道不再进行输出;如果对方向已经关闭的输入信道发送数据,会产生“连接被对端重置”错误。
- 关闭连接的顺序:先关闭一端的输出信道,再等待对方关闭输出信道,最后再关闭输入信道