一、http协议定义了很多与服务器交互的方法,最基本的四种为get(对资源的查询与获取)、post(对资源的更新)、put(对资源的增加)、delete(对资源的删除);
get与post的区别:
* 传输数据的位置:get提交的数据会放到URL之后,以?分割URL和传输数据,参数之间用&连接;post方法是把提交的数据放到body中;
* 传输数据的大小:get提交的数据大小受限制,因为浏览器对URL的长度限制;而post方法无限制;
* 传输数据的安全性:get传输的数据存在安全风险,因传输的数据可缓存;
* 传输数据的获取:get方法使用Request.QueryString获取变量的值;post方法使用Request.Form来获取变量的值;
二、5类状态码
* 1xx 提示信息,表示请求已被成功接收,继续处理;
* 2xx 成功,表示已成功接收,理解;
* 3xx 重定向, 要完成请求必须进行更进一步的 处理。常见302 Found 新的URL会在response中的location中返回,浏览器将会使用新的URL发出新的request;304 Not Modified 上次的文档已被缓存,还可继续使用。若不想使用本地缓存,可Ctrl+F5强制刷新;
* 4xx 客户端错误,请求有语法错误或请求无法实现。400 Bad Request 客户端请求有语法错误,不能被服务器理解;403 Forbidden 服务器收到请求后,拒绝提供服务;404 Not Found 请求资源不存在;
* 5xx 服务器端错误,服务器不能实现合法的请求。500 服务器发生不可预期的错误;503 服务器当前不能处理请求,一段时间后可能恢复正常。
三、http协议是无状态的
* 无状态是指http协议对事务处理没有记忆能力,即不会为了下一次连接而维护这次连接所传输的信息,服务器不知道客户端是什么状态,不知道是否已经在服务器端打开了该网页;但客户端与服务器需要动态交互,于是,两种用于保持HTTP状态的技术就应运而生了,一个是Cookie,而另一个则是Session。
* Http1.0 是短连接,HTTP1.1 默认是长连接,也就是默认 Connection 的值就是 keep-alive。但是长连接实质是指的 TCP 连接,而不是 HTTP 连接。即长连接情况下,多个 HTTP 请求可以复用同一个 TCP 连接,这就节省了很多 TCP 连接建立和断开的消耗。此外,长连接并不是永久连接的。如果一段时间内(具体的时间长短,是可以在 header 当中进行设置的,也就是所谓的超时时间),这个连接没有 HTTP 请求发出的话,那么这个长连接就会被断掉。
* Cookie是客户端的存储空间,由浏览器来维持。cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案。由于服务器端保持状态的方案在客户端也需要保存一个标识,所以session机制可能需要借助于cookie机制来达到保存标识的目的,但实际上还有其他选择,比如说重写URL和隐藏表单域。
简单的说就是cookie和session起到保存客户端状态的作用,但是它们并没有改变http协议本身这种无状态的性质,可以理解为在应用上做了状态保留。
* 当客户端访问服务器时,服务器根据需求设置 Session,将会话信息保存在服务器上,同时将标示 Session 的 SessionId 传递给客户端浏览器,浏览器将这个 SessionId 保存在内存中,我们称之为无过期时间的 Cookie。浏览器关闭后,这个 Cookie 就会被清掉,它不会存在于用户的 Cookie 临时文件。
以后浏览器每次请求都会额外加上这个参数值,服务器会根据这个 SessionId,就能取得客户端的数据信息。
如果客户端浏览器意外关闭,服务器保存的 Session 数据不是立即释放,此时数据还会存在,只要我们知道那个 SessionId,就可以继续通过请求获得此 Session 的信息,因为此时后台的 Session 还存在,当然我们可以设置一个 Session 超时时间,一旦超过规定时间没有客户端请求时,服务器就会清除对应 SessionId 的 Session 信息。
需要注意只有访问JSP、Servlet等程序时才会创建Session,只访问HTML、IMAGE等静态资源并不会创建Session。
五、http和HTTPS的区别,抓包中需要注意
* HTTP是超文本传输协议,信息是明文传输;HTTPS则是具有安全性的SSL/TLS加密传输协议;
* HTTP 和 HTTPS 使用的是不同的连接方式,用的端口也不一样,前者是 80,后者是 443;
* HTTPS 需要到 CA 申请证书(下载证书),一般证书都是收费的;
参考:
网友评论