摘要:這不是講協(xié)議的很多的東西是知其意而忘其形趁著過(guò)年這段時(shí)間把很多的知識(shí)都下把形找回來(lái)寫(xiě)代碼并不是全部屬于應(yīng)用層的協(xié)議是無(wú)狀態(tài)的和的作用就體現(xiàn)出來(lái)了我這里畫(huà)了一張圖下面是我的的部分配置注意以這個(gè)為例代表使用協(xié)議默認(rèn)默認(rèn)就是我使用虛擬機(jī)的把虛擬機(jī)
這不是講http協(xié)議的
很多的東西是知其意而忘其形?, 趁著過(guò)年這段時(shí)間把很多的知識(shí)都review下, 把形找回來(lái), 寫(xiě)代碼并不是全部
telnet
curl
chrome
postman
fiddler/wireshark
httphttp屬于應(yīng)用層的協(xié)議
http是無(wú)狀態(tài)的(cookie和session的作用就體現(xiàn)出來(lái)了)
我這里畫(huà)了一張圖
https://www.processon.com/vie...
下面是我的php.ini的部分配置
session.use_cookies = 1 session.use_only_cookies = 1 session.name = PHPSESSID session.auto_start = 0 session.cookie_lifetime = 0 session.save_path=F:www mpsession
注意session.name = PHPSESSID
http://www.test.com:80/index.php/kill?d=1&a=x 以這個(gè)為例
description | value | commet |
---|---|---|
scheme | http | http代表使用http協(xié)議/https |
host | www.test.com | |
port | 80 | http默認(rèn)80/https默認(rèn)443 |
uri | /index.php/kill?d=1&a=x | |
args | d=1&a=x | 就是query_string |
我使用虛擬機(jī)的, 把虛擬機(jī)的80端口映射到本機(jī)的8000端口, so下面的host是127.0.0.1:8000
完整的是在chrome里面打開(kāi)http://127.0.0.1:8000/index/index/test2
request
GET /index/index/test2 HTTP/1.1 Host: 127.0.0.1:8000 Connection: keep-alive Cache-Control: max-age=0 Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 DNT: 1 Accept-Encoding: gzip, deflate, sdch, br Accept-Language: en-US,en;q=0.8,zh-CN;q=0.6,zh;q=0.4 Cookie: XDEBUG_SESSION=PHPSTORM
response
HTTP/1.1 200 OK Server: nginx Date: Mon, 23 Jan 2017 02:29:09 GMT Content-Type: text/html; charset=utf-8 Transfer-Encoding: chunked Connection: keep-alive Vary: Accept-Encoding X-Powered-By: PHP/5.6.22 Proxy-Connection: keep-alive
body
testcurl demo
[xsu@localhost ~]$ curl -v "http://127.0.0.1/index/index/test2" * About to connect() to 127.0.0.1 port 80 (#0) * Trying 127.0.0.1... * Connected to 127.0.0.1 (127.0.0.1) port 80 (#0) > GET /index/index/test2 HTTP/1.1 > User-Agent: curl/7.29.0 > Host: 127.0.0.1 > Accept: */* > < HTTP/1.1 200 OK < Server: nginx < Date: Mon, 23 Jan 2017 02:20:23 GMT < Content-Type: text/html; charset=utf-8 < Transfer-Encoding: chunked < Connection: keep-alive < Vary: Accept-Encoding < X-Powered-By: PHP/5.6.22 < * Connection #0 to host 127.0.0.1 left intact testtelnet demo
[xsu@localhost ~]$ telnet 127.0.0.1 80 Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is "^]". ^] telnet> GET /index/index/test2 HTTP/1.1 Host: 127.0.0.1 HTTP/1.1 200 OK Server: nginx Date: Mon, 23 Jan 2017 02:14:36 GMT Content-Type: text/html; charset=utf-8 Transfer-Encoding: chunked Connection: keep-alive Vary: Accept-Encoding X-Powered-By: PHP/5.6.22 4 test 0
Transfer-Encoding: chunkedchunked 表示是分段, test前面的4表示接下來(lái)的數(shù)據(jù)的長(zhǎng)度, 這是一個(gè)16進(jìn)制的數(shù), test下一段的長(zhǎng)度為0 , 即表示結(jié)束
request由3部分組成:
request method, uri, protocol versionGET /index.php/index/index/test HTTP/1.1
request method | curd |
---|---|
get | r, read |
post | u, update |
put | c, create |
delete | d, delete |
只說(shuō)幾個(gè)有趣的, 其他的自己看詳細(xì)的http協(xié)議, 或者chrome調(diào)試臺(tái)的request header
User-Agent
所有的瀏覽器都是 Mozilla/5.0 開(kāi)頭的, 當(dāng)時(shí)久我都驚呆了, 至于為什么看知乎
Accept-Language
在chrome地址欄里面打開(kāi)chrome://settings/languages, 把英文拖到 最上面, 打開(kāi)www.swoole.com, 再把中文拖到最上面, 再打開(kāi)www.swoole.com
困惑了我好久, 我之前打開(kāi)很多網(wǎng)站, 打開(kāi)的總是默認(rèn)打開(kāi)英文版的網(wǎng)站, 后來(lái)不小心review了下http協(xié)議, 恍然大悟?
X-Forward-For
可以用來(lái)偽造ip來(lái)源, 刷單, 限制ip的地方
在配置nginx的時(shí)候要注意, 和獲取client ip的時(shí)候要注意, 不要相信用戶的輸入, 特別是http_xxx, 太容易偽造了
X-Request-With
區(qū)分是正常的請(qǐng)求還是ajax請(qǐng)求的, ajax請(qǐng)求一般都帶有這個(gè)請(qǐng)求頭, 當(dāng)然可以直接定義
request bodypost的數(shù)據(jù)就是放到里面
response protocol version, response status, descriptionHTTP/1.1 200 OKresponse header
Server: nginx Date: Mon, 23 Jan 2017 02:29:09 GMT Content-Type: text/html; charset=utf-8 Transfer-Encoding: chunked Connection: keep-alive Vary: Accept-Encoding X-Powered-By: PHP/5.6.22 Proxy-Connection: keep-aliveresponse body
就是我們看到的html實(shí)體, 或者ajax返回的字符串
PHP大概說(shuō)下php里面$_SERVER
php的文件內(nèi)容為
ksort($_SERVER); print_r($_SERVER);
request -> view-source:http://127.0.0.1:8000/index.php/index/index/test?a=1&d=x
返回的數(shù)據(jù)為(服務(wù)器用的是nginx, apache的類似)
Array ( [CONTENT_LENGTH] => [CONTENT_TYPE] => [DOCUMENT_ROOT] => /home/wwwroot/tp5/public [DOCUMENT_URI] => /index.php [FCGI_ROLE] => RESPONDER [GATEWAY_INTERFACE] => CGI/1.1 [HOME] => /home/www [HTTP_ACCEPT] => text/html,application/xhtml+xml,application/xml;q=0.9,image/webp [HTTP_ACCEPT_ENCODING] => gzip, deflate, adch, br [HTTP_ACCEPT_LANGUAGE] => en-US,en;q=0.8,zh-CN;q=0.6,zh;q=0.4 [HTTP_CONNECTION] => keep-alive [HTTP_COOKIE] => XDEBUG_SESSION=PHPSTORM [HTTP_DNT] => 1 [HTTP_HOST] => 127.0.0.1:8000 [HTTP_UPGRADE_INSECURE_REQUESTS] => 1 [HTTP_USER_AGENT] => Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36 [PATH_INFO] => /index/index/test [PHP_SELF] => /index/index/test [QUERY_STRING] => a=1&d=x [REDIRECT_STATUS] => 200 [REMOTE_ADDR] => 10.0.2.2 [REMOTE_PORT] => 62835 [REQUEST_METHOD] => GET [REQUEST_SCHEME] => http [REQUEST_TIME] => 1485139559 [REQUEST_TIME_FLOAT] => 1485139559.6806 [REQUEST_URI] => /index.php/index/index/test?a=1&d=x [SCRIPT_FILENAME] => /home/wwwroot/tp5/public/index.php [SCRIPT_NAME] => /index.php [SERVER_ADDR] => 10.0.2.15 [SERVER_NAME] => www.test.com [SERVER_PORT] => 80 [SERVER_PROTOCOL] => HTTP/1.1 [SERVER_SOFTWARE] => nginx/1.10.0 [USER] => www )
大概可以分為以下(#1表)
分類 | 描述 |
---|---|
HTTP開(kāi)頭 | request header |
REQUEST開(kāi)頭 | request method, protocol |
SERVER開(kāi)頭 | 服務(wù)器的相關(guān)信息 |
REMOTE開(kāi)頭 | 客戶端的相關(guān)信息 |
SCRIPT,DOCUMENT開(kāi)頭 | 腳本相關(guān)的名稱, 路徑 |
路由, 參數(shù)相關(guān) | path_info, query_string |
其他 |
cgi -> 公共網(wǎng)關(guān)接口, 與語(yǔ)言無(wú)關(guān), 規(guī)定要傳哪些數(shù)據(jù)(看#1表), 通過(guò)重定向語(yǔ)言的stdin, stdout來(lái)實(shí)現(xiàn), 但是cgi很慢, 看下使用cgi的php執(zhí)行流程
webserver 收到 parse php請(qǐng)求 -> 啟動(dòng)PHPCGI -> PHPCGI解析php.ini, 初始化運(yùn)行環(huán)境 -> 處理請(qǐng)求, 以cgi規(guī)定格式返回 -> 退出PHPCGI -> webserver 返回?cái)?shù)據(jù)
問(wèn)題 : 每次都要啟動(dòng)phpcgi, 和初始化環(huán)境
fastcgi -> cgi的改進(jìn)方案, 啟動(dòng)一個(gè)master進(jìn)程, 解析配置文件, 初始化運(yùn)行環(huán)境, 再fork多個(gè)worker來(lái)處理php請(qǐng)求, 返回?cái)?shù)據(jù), 他是要管理一個(gè)進(jìn)程池來(lái)處理請(qǐng)求
php-fpm -> 是實(shí)現(xiàn)了fastcgi協(xié)議的 php fastcgi 進(jìn)程管理器, 并且可以平滑重啟(新的worker使用新的配置, 老的worker執(zhí)行完就可以自動(dòng)退出了),
nginx通常都是使用php-fpm, 通信有兩種方式, socket和9000端口
params看下fastcgi的重寫(xiě)
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param QUERY_STRING $query_string; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; fastcgi_param SCRIPT_NAME $fastcgi_script_name; fastcgi_param REQUEST_URI $request_uri; fastcgi_param DOCUMENT_URI $document_uri; fastcgi_param DOCUMENT_ROOT $document_root; fastcgi_param SERVER_PROTOCOL $server_protocol; fastcgi_param REQUEST_SCHEME $scheme; fastcgi_param HTTPS $https if_not_empty; fastcgi_param GATEWAY_INTERFACE CGI/1.1; fastcgi_param SERVER_SOFTWARE nginx/$nginx_version; fastcgi_param REMOTE_ADDR $remote_addr; fastcgi_param REMOTE_PORT $remote_port; fastcgi_param SERVER_ADDR $server_addr; fastcgi_param SERVER_PORT $server_port; fastcgi_param SERVER_NAME $server_name; fastcgi_split_path_info ^(.+?.php)(/.*)$; set $path_info $fastcgi_path_info; fastcgi_param PATH_INFO $path_info;
以$開(kāi)頭的是nginx ngx_http_core_module 提供的變量, 具體可參看http://nginx.org/en/docs/http/ngx_http_core_module.html#variables
fastcgi_param這條指令就是對(duì)php中的$_SERVER賦值
fiddler這個(gè)軟件抓包使用很簡(jiǎn)單, 可能不滿足需求, 當(dāng)然需要更加專業(yè)wireshark, 可以使用自定義腳本, 這個(gè)功能就自己想象了, 并且這個(gè)軟件我也只會(huì)簡(jiǎn)單的抓包, 復(fù)雜的不會(huì), 不敢寫(xiě)
為什么能抓包?打開(kāi)Internet屬性 -> 連接 -> 局域網(wǎng)設(shè)置 -> 高級(jí)
你的http和https都使用了代理的, 你的所有的請(qǐng)求都會(huì)轉(zhuǎn)發(fā)到代理, 由代理處理, 所以能抓包
你把手機(jī)的代理地址, 設(shè)置為fiddler自動(dòng)配置的ip地址和端口, 也可以抓手機(jī)的包
http斷點(diǎn)打斷點(diǎn), 加參數(shù), 就像調(diào)試本地程序一樣
這里可能需要用到filter過(guò)濾一下, 可以按 host, 進(jìn)程, 請(qǐng)求頭過(guò)濾, 高興就好
postman有空再寫(xiě), 回家過(guò)年了,
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/30544.html
摘要:這不是講協(xié)議的很多的東西是知其意而忘其形趁著過(guò)年這段時(shí)間把很多的知識(shí)都下把形找回來(lái)寫(xiě)代碼并不是全部屬于應(yīng)用層的協(xié)議是無(wú)狀態(tài)的和的作用就體現(xiàn)出來(lái)了我這里畫(huà)了一張圖下面是我的的部分配置注意以這個(gè)為例代表使用協(xié)議默認(rèn)默認(rèn)就是我使用虛擬機(jī)的把虛擬機(jī) 這不是講http協(xié)議的 很多的東西是知其意而忘其形?, 趁著過(guò)年這段時(shí)間把很多的知識(shí)都review下, 把形找回來(lái), 寫(xiě)代碼并不是全部 tools...
摘要:一注意事項(xiàng)課件,需要做到理解記憶應(yīng)用這個(gè)課件聽(tīng)一篇,很多人會(huì)很懵逼,這是正常情況課件里面需要把重點(diǎn)畫(huà)出來(lái)做記號(hào)做記號(hào)是為了后面的大綱串講做鋪墊重點(diǎn)的大綱串講,上面說(shuō)的每一句話都有可能是考點(diǎn),以及畫(huà)出來(lái)的黃色重點(diǎn)需要理解記憶大綱串講著重記憶, 一、注意事項(xiàng)1)ISTQB課件,需要做到理解+記憶+應(yīng)用(這個(gè)課件聽(tīng)一篇,很多人會(huì)很懵逼,這是正常情況)2)ISTQB課件里面需要把重點(diǎn)畫(huà)出來(lái)做記...
摘要:一注意事項(xiàng)課件,需要做到理解記憶應(yīng)用這個(gè)課件聽(tīng)一篇,很多人會(huì)很懵逼,這是正常情況課件里面需要把重點(diǎn)畫(huà)出來(lái)做記號(hào)做記號(hào)是為了后面的大綱串講做鋪墊重點(diǎn)的大綱串講,上面說(shuō)的每一句話都有可能是考點(diǎn),以及畫(huà)出來(lái)的黃色重點(diǎn)需要理解記憶大綱串講著重記憶, 一、注意事項(xiàng)1)ISTQB課件,需要做到理解+記憶+應(yīng)用(這個(gè)課件聽(tīng)一篇,很多人會(huì)很懵逼,這是正常情況)2)ISTQB課件里面需要把重點(diǎn)畫(huà)出來(lái)做記...
閱讀 3400·2021-10-08 10:15
閱讀 5440·2021-09-23 11:56
閱讀 1467·2019-08-30 15:55
閱讀 445·2019-08-29 16:05
閱讀 2725·2019-08-29 12:34
閱讀 2036·2019-08-29 12:18
閱讀 914·2019-08-26 12:02
閱讀 1650·2019-08-26 12:00