[
HTTP请求报文组成:请求行+请求头+请求体
HTTP响应报文组成:响应行+响应头+响应体
请求行:包含用于请求的方法(HEAD/GET/POST),请求 URI 和 HTTP 版本。
请求头:客户端的Cookie和User-Agent就放在这里.
请求体: 比如客户端POST的数据就放在这里(对比:GET的数据放在请求行的URL里).
响应行/状态行:包含表明响应结果的状态码,状态码描述和 HTTP 版本。
首部字段(即请求头、响应头):包含表示请求和响应的各种条件和属性的各类首部。
一般有 4 种首部,分别是:通用首部、请求首部、响应首部和实体首部。
响应头: 服务器的Set-Cookie和Server信息就放在这里.
报文主体:
响应体: 比如服务器返回的HTML和JSON数据就放在这里.
一个完整的HTTP请求如下:
GET /sample.jsp HTTP/1.1 //请求行
User-Agent:Mozila/4.0(compatible;MSIE5.01;Window NT5.0) //请求头
Accept:image/gif.image/jpeg,*/* //请求头:指定客户端能够接收的内容格式类型
Accept-Language:zh-cn //请求头:指定客户端能够接受的语言类型
Connection:Keep-Alive //请求头:是否开启持久连接(keepalive)
Host:localhost //请求头:服务器域名
Accept-Encoding:gzip,deflate //请求头:指定客户端能够接受的编码类型
//注意这里有空的换行
username=jinqiao&password=1234 //请求体
200 OK
204 No Content
>该状态码代表服务器接收的请求已成功处理,但在返回的响应报文中不含实体的主体部分。另外,也不允许返回任何实体的主体。比如,当从浏览器发出请求处理后,返回 204 响应,那么浏览器显示的页面不发生更新。
>一般在只需要从客户端往服务器发送信息,而对客户端不需要发送新信息内容的情况下使用。
301 Moved Permanently
永久性重定向。该状态码表示请求的资源已被分配了新的 URI,以后应使用资源现在所指的 URI。也就是说,如果已经把资源对应的 URI保存为书签了,这时应该按 Location 首部字段提示的 URI 重新保存。
302 Found
临时性重定向。该状态码表示请求的资源已被分配了新的 URI,希望用户(本次)能使用新的 URI 访问。
400 Bad Request
该状态码表示请求报文中存在语法错误。当错误发生时,需修改请求的内容后再次发送请求。另外,浏览器会像 200 OK 一样对待该状态码。
403 Forbidden
>该状态码表明对请求资源的访问被服务器拒绝了。服务器端没有必要给出拒绝的详细理由,但如果想作说明的话,可以在实体的主体部分对原因进行描述,这样就能让用户看到了。
>未获得文件系统的访问授权,访问权限出现某些问题(从未授权的发送源 IP 地址试图访问)等列举的情况都可能是发生 403 的原因。
404 Not Found
该状态码表明服务器上无法找到请求的资源。除此之外,也可以在服务器端拒绝请求且不想说明理由时使用。
500 Internal Server Error
该状态码表明服务器端在执行请求时发生了错误。也有可能是Web应用存在的 bug 或某些临时的故障。
503 Service Unavailable
该状态码表明服务器暂时处于超负载或正在进行停机维护,现在无法处理请求。如果事先得知解除以上状况需要的时间,最好写入RetryAfter 首部字段再返回给客户端。