1. HTTP协议(超文本协议HyperText Transfer Protocol),是一个基于请求与相应模式的、无状态的、应用层的协议
2.无状态:HTTP是一种不保存状态,即无状态(stateless)协议。HTTP协议 自身不对请求和响应之间的通信状态进行保存。也就是说在HTTP这个 级别,协议对于发送过的请求或响应都不做持久化处理(于是引入了Cookie/token技术)。
3.URL地址:
(1)协议类型(HTTP/HTTPS),HTTPS=HTTP+SSL(安全认证,由CA证书机构颁发CA证书,使用该证书请求服务端,由此保证请求的安全性)
(2)域名/ip地址(没有申请域名就是ip+端口号,http默认80端口,https默认443端口)
(3)path,请求的路径(域名/IP地址后,?之前,/s,form表单中的action)
(4)请求参数(?是分割符号),键值对:key=value&key=value
(5)编码:urlencode编码
4.请求方式
(1)GET vs. POST请求
GET肯定没有请求body,POST有请求body(请求body可为空,请求参数也可以不放在body里而是放在?后,也可以同时放在body中和?后)
(2)HTTP1-0有3中请求方法(GET、POST、HEAD),HTTP1.1有8种(GET查询、POST提交、HEAD、OPTIONS、PUT修改、DELETE删除、TRACE、CONNECT)
GET
向指定的资源发出“显示”请求。使用GET方法应该只用在读取数据,而不应当被用于产生“副作用”的操作中,例如在Web Application中。其中一个原因是GET可能会被网络蜘蛛等随意访问。
HEAD
与GET方法一样,都是向服务器发出指定资源的请求。只不过服务器将不传回资源的本文部分。它的好处在于,使用这个方法可以在不必传输全部内容的情况下,就可以获取其中“关于该资源的信息”(元信息或称元数据)例如爬虫。
POST
向指定资源提交数据,请求服务器进行处理(例如提交表单或者上传文件)。数据被包含在请求本文中。这个请求可能会创建新的资源或修改现有资源,或二者皆有。
PUT
向指定资源位置上传其最新内容。
DELETE
请求服务器删除Request-URI所标识的资源。
TRACE
回显服务器收到的请求,主要用于测试或诊断。
OPTIONS
这个方法可使服务器传回该资源所支持的所有HTTP请求方法。用‘*‘来代替资源名称,向Web服务器发送OPTIONS请求,可以测试服务器功能是否正常运作。
CONNECT
HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。通常用于SSL加密服务器的链接(经由非加密的HTTP代理服务器)。
5.发送请求时携带的内容(请求行、请求头、空一行、body)
②请求头:
cookie:不一定只有登录才有cookie,cookie是一种身份认证方式,登录只是身份认证的一种。登录≠cookie,登录常用的方式是cookie,cookie是一种数据结构(键值对存储格式的文件),功能是实现身份认证。
Content-Type:发送post请求时,body的数据类型声明(一般是json{}、urlencoding键值对、multipart/form-data:这一种是表单格式的,一般上传图片/文件用到)
Authorization: Bearer XXX 认证 (一般用token的时候)
JsessionId:
Token: xxx
X-Requested-With: XMLHttpRequest 是 Ajax 异步请求(带上X-Requested-With: XMLHttpRequest ,返回数据是 json 。如果头部不加这个参数,返回数据是普通 html 文本。普通B/S模式(同步)AJAX技术(异步):同步:提交请求->等待服务器处理->处理完毕返回 这个期间客户端浏览器不能干任何事异步: 请求通过事件触发->服务器处理(这是浏览器仍然可以作其他事情)->处理完毕)
User-Agent: 客户端类型,一般爬页面数据需加上这个参数,伪装成浏览器
Referer 用户是从哪个源链接跳转过来,用法是防外连接(正确单词是referrer, 这里是将错就错 )
6.GET请求的请求参数QueryString(?+键值对)
7.POST请求的请求参数QueryString+body
8.响应
所有HTTP响应的第一行都是状态行,依次是当前HTTP版本号,3位数字组成的状态代码,以及描述状态的短语,彼此由空格分隔。
状态代码的第一个数字代表当前响应的类型:
- 1xx消息——请求已被服务器接收,继续处理
- 2xx成功——请求已成功被服务器接收、理解、并接受(≠登陆成功)
- 3xx重定向——需要后续操作才能完成这一请求(301-永久重定向,302-临时重定向,304-用到缓存,请求服务端资源为改变,用本地未过期缓存)
- 4xx请求错误——客户端错误,请求含有词法错误或者无法被执行
- 5xx服务器错误——服务器错误,服务器在处理某个正确请求时发生错误
常见错误
200 OK //客户端请求成功
401 Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用 (身份认证不通过)
403 Forbidden //服务器收到请求,但是拒绝提供服务 (没访问权限)
400 bad request:400 Bad Request 是由于明显的客户端错误(例如,格式错误的请求语法,太大的大小,无效的请求消息或欺骗性路由请求),服务器不能或不会处理该请求。
404 Not Found //请求资源不存在,eg:输入了错误的URL
405 不允许此方法 (比如只有get请求,你用了put请求)
500 Internal Server Error //服务器发生不可预期的错误
503 Server Unavailable //服务器当前不能处理客户端的请求,一段时间后可能恢复正常
一般4开头是自己的请求方式不对要找自己的原因,5开头可以提BUG了。