Http协议
HTTP协议
1. http简介
1.1 http定义
http(超文本传输协议)是一个基于请求与响应模式的、无状态的、应用层的协议
无状态指的是:协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传(为了解决这个问题,引出了cookie和Session机制,第四点会有提及),这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
1.2 url详解
1.http/https: 协议类型
2.host:主机地址或域名
–192.168.x.xx:8080 地址+端口号
–www.xxx.com 域名
–localhost8080 localhost是本机地址
3.port:端口号 (默认端口是80可以省略)
4.path: 请求的路径(host之后,问号?之前)
5.? : 问号是分割符号
6.参数: name=value
7.& : 多个参数用&隔开
2. request
2.1 请求方法
HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。
get:可以传参数,但是是在url中,一般用来获取资源
post:参数在请求的body中传输,保密性更强,可以用来传输数据给后台
HEAD 类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头 POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中
除了上述最常见的方法,还有下述方法:
HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。
PUT 从客户端向服务器传送的数据取代指定的文档的内容。 ( 很少用,一般不修改服务器上的数据 )
DELETE 请求服务器删除指定的页面。(很少用,一般不修改服务器上的数据,最好不用 )
CONNECT HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。 OPTIONS 允许客户端查看服务器的性能。
TRACE 回显服务器收到的请求,主要用于测试或诊断。
2.2 request组成
2.2.1 请求行
2.2.2 请求头
2.2.3 请求body(get方法无)
此示例是在登录网易邮箱时所抓取到的post请求。
使用的是第四种text/xml传输方式。
3. response
3.1 response响应消息
3.2 状态码
状态代码有三位数字组成,第一个数字定义了响应的类别,共分五种类别:
1xx:指示信息–表示请求已接收,继续处理
2xx:成功–表示请求已被成功接收、理解、接受
3xx:重定向–要完成请求必须进行更进一步的操作
4xx:客户端错误–请求有语法错误或请求无法实现
5xx:服务器端错误–服务器未能实现合法的请求
常见状态码:
200 OK //客户端请求成功 (并不代表登录成功,服务端能够接受并识别账号密码)
302:重定向,比如应用访问需要登录,但是没登陆所以重定向到登录界面登录。
400 Bad Request //客户端请求有语法错误,不能被服务器所理解
401 Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用
403 Forbidden //服务器收到请求,但是拒绝提供服务
404 Not Found //请求资源不存在,eg:输入了错误的URL
500 Internal Server Error //服务器发生不可预期的错误
503 Server Unavailable //服务器当前不能处理客户端的请求,一段时间后可能恢复正常
4. Cookie和Session
4.1 Cookie
参考文档:https://blog.csdn.net/u014465934/article/details/81357876
Cookie是通过客户端保持状态的解决方案。从定义上来说,Cookie就是由服务器发给客户端的特殊信息,而这些信息以文本文件的方式存放在客户端,然后客户端每次向服务器发送请求的时候都会带上这些特殊的信息。
让我们说得更具体一些:当用户使用浏览器访问一个支持Cookie的网站的时候,用户会提供包括用户名在内的个人信息并且提交至服务器;接着,服务器在向客户端回传相应的超文本的同时也会发回这些个人信息,当然这些信息并不是存放在HTTP响应体(Response Body)中的,而是存放于HTTP响应头(Response Header);当客户端浏览器接收到来自服务器的响应之后,浏览器会将这些信息存放在一个统一的位置,对于Windows操作系统而言,我们可以从: [系统盘]:\Documents and Settings[用户名]\Cookies目录中找到存储的Cookie;自此,客户端再向服务器发送请求的时候,都会把相应的Cookie再次发回至服务器。而这次,**Cookie信息则存放在HTTP请求头(**Request Header)了。
有了Cookie这样的技术实现,服务器在接收到来自客户端浏览器的请求之后,就能够通过分析存放于请求头的Cookie得到客户端特有的信息,从而动态生成与该客户端相对应的内容。通常,我们可以从很多网站的登录界面中看到“请记住我”这样的选项,如果你勾选了它之后再登录,那么在下一次访问该网站的时候就不需要进行重复而繁琐的登录动作了,而这个功能就是通过Cookie实现的。
4.2 Session
参考文档:https://blog.csdn.net/u014465934/article/details/81357876
当客户端访问服务器时,服务器根据需求设置 Session,将会话信息保存在服务器上,同时将标示 Session 的 SessionId 传递给客户端浏览器,浏览器将这个 SessionId 保存在内存中,我们称之为无过期时间的 Cookie。浏览器关闭后,这个 Cookie 就会被清掉,它不会存在于用户的 Cookie 临时文件。
以后浏览器每次请求都会额外加上这个参数值,服务器会根据这个 SessionId,就能取得客户端的数据信息。
如果客户端浏览器意外关闭,服务器保存的 Session 数据不是立即释放,此时数据还会存在,只要我们知道那个 SessionId,就可以继续通过请求获得此 Session 的信息,因为此时后台的 Session 还存在,当然我们可以设置一个 Session 超时时间,一旦超过规定时间没有客户端请求时,服务器就会清除对应 SessionId 的 Session 信息。