HTTP状态码,cookie字段,cookie一般存的是什么,session怎么存在的
HTTP状态码
1 信息状态码
2 成功状态码
- 200 OK
- 204 No Content
- 206 Partial Content 范围请求
3 重定向状态码
- 301 Moved Permanently 永久重定向
- 302 Found 临时重定向
- 303 See Other 与302类似,但希望以GET请求新URI
- 307 Temporary Redirect 临时重定向 遵循标准 不从POST变成GET
4 客户端错误状态码
- 400 Bad Request 语法错误
- 401 Unauthorized 需要认证或认证失败,首次会有认证窗口
- 403 Forbidden
- 404 Not Found
5 服务器错误状态码
- 500 Internal Server Error
- 503 Service Unavailable
- 504 Gateway Timeout
Cookie字段
HTTP是无状态协议,引入Cookie是为了达到状态管理的目的
Cookie会根据响应报文的Set-Cookie的Header信息,客户端保存对应Cookie,在下次请求中会在请求报文带上对应Cookie值发送出去。服务端对比Cookie与记录即可知道之前的状态信息。
Set-Cookie字段的属性
NAME=VALUE
expires=DATE
path=PATH
domain=域名
Secure
HttpOnly
Session
Session的理解应该是服务端创建的会话标识,可以将Session放在Cookie中,也可以将Session放在URL中,因此禁用Cookie也能够继续使用Session。当会话结束,服务器端可以选择Destory Session
HTTP的请求方式有哪些
- GET 获取资源
- POST 传输实体主体
- PUT 传输文件 自身不带验证机制
- HEAD 获取首部报文 和GET一样但是没有body 用于确认有效性和更新日期
- DELETE 删除文件 和PUT类似
- OPTIONS 询问支持的方法
- TRACE 追踪路径 请求Header中天如Max-Forward,每经过一个服务器端减1,到0时停止,可查询修改/篡改
- CONNECT 要求用隧道协议连接代理
强缓存和协商缓存
https://github.com/amandakelake/blog/issues/41
HTTPS怎么加密
HTTP+加密+认证+完整性保护=HTTPS。HTTPS通信双方使用对称密钥加密、解密通信内容,在建立SSL时交换此对称密钥使用的是非对称加密,认证机构将公钥与认证证书绑定,公开密钥是植入在浏览器中的。
通信过程(SSL握手过程):
- 客户端发送指定SSL版本、加密组件(Cipher Suite)及ClientHello报文
- Server响应ServerHello,SSL版本和加密组件
- Server发送Server Hello Done,完成初步SSL握手
- Client发送ClientClient Key Exchange报文,使用公钥加密,包含Pre-master secret随机密码串
- Client继续发送Change Cipher Spec报文,使用Pre-master secret加密
- Client发送Finished报文,包含连接至今的整体校验值
- Server发送Change Cipher Spec报文
- Server发送Finished报文
- 开始发送应用层请求
- 响应应用层请求
- Client断开连接,发送close_notify报文,TCP FIN报文
详细Handshake过程阅读https://tools.ietf.org/html/rfc6101#page-21
Client Server
ClientHello -------->
ServerHello
Certificate*
ServerKeyExchange*
CertificateRequest*
<-------- ServerHelloDone
Certificate*
ClientKeyExchange
CertificateVerify*
[ChangeCipherSpec]
Finished -------->
[ChangeCipherSpec]
<-------- Finished
Application Data <-------> Application Data
* Indicates optional or situation-dependent messages that are not
always sent.
从URL输入到页面显示会有哪些步骤
- Client需要访问的域名通过DNS解析得到对应IP
- Client请求对应IP访问服务,发起HTTP请求
- HTTP请求通过TCP分割成报文
- 通过IP协议寻找对方的地址
- 对方的TCP接受报文(两个TCP间有三次握手过程)并重组报文
- 对方的HTTP服务响应,同样通过TCP/IP回传
- Client根据响应结果进行页面的展示和渲染
HTTPS有几次握手 / SSL握手过程
- Client发送ClientHello
- Server发送ServerHello、Certificate、ServerHelloDone
- Client使用Server给的公钥进行加密,发送Pre-master secret随机密码串,用于加密
- Client发送ChangeCipherSpec报文,使用Pre-master secret加密
- Client发送Finished报文,包含校验值
- Server发送ChangeCipherSpec报文,发送Finished报文
GET和POST分别进行几次数据交互
暂时没有验证的说法:
GET会产生1个TCP包;
POST会发送两个TCP包,第一个包包含头部信息,Server收到后会响应100,等待;第二个包包含POST的内容,接受完后Server才会进行响应200/400/500等。
并不是所有浏览器都会在POST中发送两次包,Firefox就只发送一次。