对http的理解

在进行爬虫的时候接触到了http,简单说一下对它的理解。

HTTP协议简介

HTTP(超文本传输协议)是应用层上的一种客户端/服务端模型的通信协议,它由请求和响应构成,且是无状态的。(暂不介绍HTTP2)

1…协议
协议规定了通信双方必须遵循的数据传输格式,这样通信双方按照约定的格式才能准确的通信。

2.无状态
无状态是指两次连接通信之间是没有任何关系的,每次都是一个新的连接,服务端不会记录前后的请求信息。

3.客户端/服务端模型
对http的理解_第1张图片

五层网络模型

对http的理解_第2张图片

URL构成

对http的理解_第3张图片

协议内容

1.请求(Request)
客户端发送一个HTTP请求到服务端的格式:

请求行

请求头

请求体

2.响应(Response)
服务端响应客户端格式:

状态行

响应头

响应体
3.状态码
HTTP状态码由三个十进制数字组成,第一个十进制数字定义了状态码的类型,后两个数字没有分类的作用。

HTTP状态码共分为5种类型:

分类 分类描述
1** 信息,服务器收到请求,需要请求者继续执行操作
2** 成功,操作被成功接收并处理
3** 重定向,需要进一步的操作以完成请求
4** 客户端错误,请求包含语法错误或无法完成请求
5** 服务器错误,服务器在处理请求的过程中发生了错误

更详细的状态码可查看 HTTP状态码

但一般我们只需要知道几个常见的就行,比如 200,400,401,403,404,500,502.

请求方法:

方法 描述
GET GET请求会显示请求指定的资源。一般来说GET方法应该只用于数s据的读取,而不应当用于会产生副作用的非幂等的操作中。它期望的应该是而且应该是安全的和幂等的。这里的安全指的是,请求不会影响到资源的状态。
POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。

(其他方法详细见网上)

请求和响应常见通用头

名称 作用
Content-Type 请求体/响应体的类型,如:text/plain、application/json
Accept 说明接收的类型,可以多个值,用,(半角逗号)分开
Content-Length 请求体/响应体的长度,单位字节
Content-Encoding 请求体/响应体的编码格式,如gzip,deflate
Accept-Encoding 告知对方我方接受的Content-Encoding
ETag 给当前资源的标识,和Last-Modified、If-None-Match、If-Modified-Since配合,用于缓存控制
Cache-Control 取值为一般为no-cache或max-age=XX,XX为个整数,表示该资源缓存有效期

注意:Content-Type,内容类型,一般是指网页中存在的Content-Type,用于定义网络文件的类型和网页的编码,决定浏览器将以什么形式、什么编码读取这个文件。

详细说明一下cookies

Cookie的作用:

Cookie是用于维持服务端会话状态的,通常由服务端写入,在后续请求中,供服务端读取。

一、HTTP请求,Cookie的使用过程:

1、server通过HTTP Response中的"Set-Cookie: header"把cookie发送给client

2、client把cookie通过HTTP Request 中的“Cookie: header”发送给server

3、每次HTTP请求,Cookie都会被发送。

二、http请求发送cookies的条件:

1、本地已经缓存有cookies

2、根据请求的URL来匹配cookies的domain、path属性,如果都符合才会发送。

举个例子:访问www.baidu.com时,就不发送www.qq.com的cookies.

三、cookies查看:

大家可以使用抓包工具,这种工具就不多话,网上搜索出很多。使用这些工具中可以清晰的看到Http Request 中的Cookie, 和Http Response中的cookie

四、网站的登陆与App的自动登陆原理:

用户在连接服务器时,服务器生成一个唯一的SessionID 。而SessionID这一数据则是保存到客户端,

用Cookie保存的,用户提交页面时,会将 SessionID提交到服务器端,来存取Session数据。

Cookie cookie = new Cookie(“mycookie”+cookieNo, String.valueOf(cookieNo));

两个String串组成cookies。

你可能感兴趣的:(对http的理解)